diff --git a/mopidy_iris/static/app.css b/mopidy_iris/static/app.css index 5676d242..db2e95ac 100644 --- a/mopidy_iris/static/app.css +++ b/mopidy_iris/static/app.css @@ -3856,141 +3856,6 @@ input[type="submit"] { -webkit-filter: blur(10px); filter: blur(10px); } -/** - * Iris icon font - **/ -@font-face { - font-family: 'iris'; - src: url(data:application/x-font-ttf;base64,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) format("truetype"), url(data:application/font-woff;base64,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) format("woff"), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9Imljb21vb24iIGhvcml6LWFkdi14PSIxMDI0Ij4KPGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEwMjQiIGFzY2VudD0iOTYwIiBkZXNjZW50PSItNjQiIC8+CjxtaXNzaW5nLWdseXBoIGhvcml6LWFkdi14PSIxMDI0IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjA7IiBob3Jpei1hZHYteD0iNTEyIiBkPSIiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAwOyIgZ2x5cGgtbmFtZT0iYmFjayIgZD0iTTI1NiA3MDRoODUuMzMzdi01MTJoLTg1LjMzM3Y1MTJ6TTQwNS4zMzMgNDQ4bDM2Mi42NjctMjU2djUxMmwtMzYyLjY2Ny0yNTZ6TTY4Mi42NjcgMzU2LjY5M2wtMTI5LjI4IDkxLjMwNyAxMjkuMjggOTEuMzA3di0xODIuNjEzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDE7IiBnbHlwaC1uYW1lPSJicm9hZGNhc3QiIGQ9Ik01MTIgMzY0LjhjLTQ0LjggMC04My4yIDM4LjQtODMuMiA4My4yczM4LjQgODMuMiA4My4yIDgzLjIgODMuMi0zOC40IDgzLjItODMuMi0zOC40LTgzLjItODMuMi04My4yek02MTQuNCAyMzYuOGMtMTIuOCAwLTMyIDYuNC0zOC40IDE5LjItMTIuOCAxOS4yLTYuNCA1MS4yIDEyLjggNjQgNDQuOCAyNS42IDcwLjQgNzYuOCA3MC40IDEyOHMtMjUuNiAxMDIuNC03MC40IDEyOGMtMTkuMiAxMi44LTI1LjYgMzguNC0xMi44IDY0IDEyLjggMTkuMiAzOC40IDI1LjYgNjQgMTIuOCA3MC40LTQ0LjggMTE1LjItMTIxLjYgMTE1LjItMjA0LjhzLTQ0LjgtMTYwLTExNS4yLTIwNC44Yy02LjQgMC0xOS4yLTYuNC0yNS42LTYuNHpNNDA5LjYgMjM2LjhjLTYuNCAwLTE5LjIgMC0yNS42IDYuNC03MC40IDQ0LjgtMTA4LjggMTIxLjYtMTA4LjggMjA0LjhzNDQuOCAxNjAgMTE1LjIgMjA0LjhjMTkuMiAxMi44IDQ0LjggNi40IDU3LjYtMTIuOHM2LjQtNTEuMi0xMi44LTY0Yy00NC44LTI1LjYtNzAuNC03Ni44LTcwLjQtMTI4czI1LjYtMTAyLjQgNzAuNC0xMjhjMTkuMi0xMi44IDI1LjYtMzguNCAxMi44LTY0LTYuNC02LjQtMjUuNi0xOS4yLTM4LjQtMTkuMnpNNzM2IDEzNC40Yy0xMi44IDAtMjUuNiA2LjQtMzIgMTkuMi0xMi44IDE5LjItMTIuOCA0NC44IDYuNCA2NCA3MC40IDU3LjYgMTE1LjIgMTQ3LjIgMTE1LjIgMjM2LjhzLTM4LjQgMTc5LjItMTE1LjIgMjM2LjhjLTE5LjIgMTIuOC0xOS4yIDQ0LjgtNi40IDY0czQ0LjggMTkuMiA2NCA2LjRjODkuNi03Ni44IDE0Ny4yLTE4NS42IDE0Ny4yLTMwNy4ycy01MS4yLTIzMC40LTE0Ny4yLTMwNy4yYy0xMi44LTEyLjgtMTkuMi0xMi44LTMyLTEyLjh6TTI4OCAxMjhjLTEyLjggMC0xOS4yIDYuNC0yNS42IDEyLjgtOTYgNzYuOC0xNDcuMiAxODUuNi0xNDcuMiAzMDcuMnM1MS4yIDIzMC40IDE0Ny4yIDMwNy4yYzEyLjggMTkuMiA0NC44IDEyLjggNTcuNi02LjRzMTIuOC00NC44LTYuNC02NGMtNzAuNC01Ny42LTEwOC44LTE0MC44LTEwOC44LTIzNi44czQ0LjgtMTc5LjIgMTE1LjItMjM2LjhjMTkuMi0xMi44IDE5LjItNDQuOCA2LjQtNjQtMTIuOC0xMi44LTI1LjYtMTkuMi0zOC40LTE5LjJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMjsiIGdseXBoLW5hbWU9ImNkIiBkPSJNNTEyIDkxNS4yYy0yNTYgMC00NjcuMi0yMTEuMi00NjcuMi00NjcuMnMyMTEuMi00NjcuMiA0NjcuMi00NjcuMiA0NjcuMiAyMTEuMiA0NjcuMiA0NjcuMmMwIDI1Ni0yMTEuMiA0NjcuMi00NjcuMiA0NjcuMnpNNTEyIDUzNy42YzUxLjIgMCA4OS42LTM4LjQgODkuNi04OS42cy0zOC40LTg5LjYtODkuNi04OS42LTg5LjYgMzguNC04OS42IDg5LjYgMzguNCA4OS42IDg5LjYgODkuNnpNODY0IDU4OC44bC0xODUuNi03Ni44Yy0xOS4yIDQ0LjgtNTEuMiA4My4yLTk2IDEwMi40bDgzLjIgMTc5LjJjODkuNi0zOC40IDE2MC0xMTUuMiAxOTguNC0yMDQuOHpNMTYwIDMxMy42bDE4NS42IDcwLjRjMTkuMi00NC44IDUxLjItODMuMiA5Ni0xMDIuNGwtODMuMi0xNzkuMmMtODkuNiA0NC44LTE2MCAxMTUuMi0xOTguNCAyMTEuMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAzOyIgZ2x5cGgtbmFtZT0iY2hldnJvbi1sZWZ0IiBkPSJNMzk2LjggNTE4LjRsMzY0LjggMzY0LjhjMjUuNiAyNS42IDI1LjYgNTcuNiAwIDgzLjJzLTY0IDI1LjYtODMuMiAwbC00MDkuNi00MDkuNmMtMTIuOC0xMi44LTE5LjItMjUuNi0xOS4yLTM4LjRzNi40LTMyIDE5LjItNDQuOGw0MDkuNi00MDkuNmMxMi44LTEyLjggMjUuNi0xOS4yIDQ0LjgtMTkuMnMzMiA2LjQgNDQuOCAxOS4yYzI1LjYgMjUuNiAyNS42IDU3LjYgMCA4My4ybC0zNzEuMiAzNzEuMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA0OyIgZ2x5cGgtbmFtZT0iY2hldnJvbi1yaWdodCIgZD0iTTc2MS42IDQ5Mi44bC00MDkuNiA0MDkuNmMtMjUuNiAyNS42LTU3LjYgMjUuNi04My4yIDBzLTI1LjYtNTcuNiAwLTgzLjJsMzY0LjgtMzY0LjgtMzY0LjgtMzY0LjhjLTI1LjYtMjUuNi0yNS42LTU3LjYgMC04My4yIDEyLjgtMTIuOCAyNS42LTE5LjIgNDQuOC0xOS4yczMyIDYuNCA0NC44IDE5LjJsNDA5LjYgNDA5LjZjMTIuOCAxMi44IDE5LjIgMjUuNiAxOS4yIDQ0LjhzLTE5LjIgMTkuMi0yNS42IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDU7IiBnbHlwaC1uYW1lPSJjbG9zZSIgZD0iTTkyMS42IDgxNi42NGwtNDAuOTYgNDAuOTYtMzY4LjY0LTM2OC42NC0zNjguNjQgMzY4LjY0LTQwLjk2LTQwLjk2IDM2OC42NC0zNjguNjQtMzY4LjY0LTM2OC42NCA0MC45Ni00MC45NiAzNjguNjQgMzY4LjY0IDM2OC42NC0zNjguNjQgNDAuOTYgNDAuOTYtMzY4LjY0IDM2OC42NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA2OyIgZ2x5cGgtbmFtZT0iY29nIiBkPSJNODI5LjAxMyA0MDYuMTg3YzEuNzA3IDEzLjY1MyAyLjk4NyAyNy4zMDcgMi45ODcgNDEuODEzcy0xLjI4IDI4LjE2LTIuOTg3IDQxLjgxM2w5MC4wMjcgNzAuNGM4LjEwNyA2LjQgMTAuMjQgMTcuOTIgNS4xMiAyNy4zMDdsLTg1LjMzMyAxNDcuNjI3Yy0zLjg0IDYuODI3LTExLjA5MyAxMC42NjctMTguNzczIDEwLjY2Ny0yLjU2IDAtNS4xMi0wLjQyNy03LjI1My0xLjI4bC0xMDYuMjQtNDIuNjY3Yy0yMi4xODcgMTcuMDY3LTQ2LjA4MCAzMS4xNDctNzIuMTA3IDQxLjgxM2wtMTYuMjEzIDExMy4wNjdjLTEuMjggMTAuMjQtMTAuMjQgMTcuOTItMjAuOTA3IDE3LjkyaC0xNzAuNjY3Yy0xMC42NjcgMC0xOS42MjctNy42OC0yMC45MDctMTcuOTJsLTE2LjIxMy0xMTMuMDY3Yy0yNi4wMjctMTAuNjY3LTQ5LjkyLTI1LjE3My03Mi4xMDctNDEuODEzbC0xMDYuMjQgNDIuNjY3Yy0yLjU2IDAuODUzLTUuMTIgMS4yOC03LjY4IDEuMjgtNy4yNTMgMC0xNC41MDctMy44NC0xOC4zNDctMTAuNjY3bC04NS4zMzMtMTQ3LjYyN2MtNS41NDctOS4zODctMi45ODctMjAuOTA3IDUuMTItMjcuMzA3bDkwLjAyNy03MC40Yy0xLjcwNy0xMy42NTMtMi45ODctMjcuNzMzLTIuOTg3LTQxLjgxM3MxLjI4LTI4LjE2IDIuOTg3LTQxLjgxM2wtOTAuMDI3LTcwLjRjLTguMTA3LTYuNC0xMC4yNC0xNy45Mi01LjEyLTI3LjMwN2w4NS4zMzMtMTQ3LjYyN2MzLjg0LTYuODI3IDExLjA5My0xMC42NjcgMTguNzczLTEwLjY2NyAyLjU2IDAgNS4xMiAwLjQyNyA3LjI1MyAxLjI4bDEwNi4yNCA0Mi42NjdjMjIuMTg3LTE3LjA2NyA0Ni4wODAtMzEuMTQ3IDcyLjEwNy00MS44MTNsMTYuMjEzLTExMy4wNjdjMS4yOC0xMC4yNCAxMC4yNC0xNy45MiAyMC45MDctMTcuOTJoMTcwLjY2N2MxMC42NjcgMCAxOS42MjcgNy42OCAyMC45MDcgMTcuOTJsMTYuMjEzIDExMy4wNjdjMjYuMDI3IDEwLjY2NyA0OS45MiAyNS4xNzMgNzIuMTA3IDQxLjgxM2wxMDYuMjQtNDIuNjY3YzIuNTYtMC44NTMgNS4xMi0xLjI4IDcuNjgtMS4yOCA3LjI1MyAwIDE0LjUwNyAzLjg0IDE4LjM0NyAxMC42NjdsODUuMzMzIDE0Ny42MjdjNS4xMiA5LjM4NyAyLjk4NyAyMC45MDctNS4xMiAyNy4zMDdsLTkwLjAyNyA3MC40ek03NDQuNTMzIDQ3OS4xNDdjMS43MDctMTMuMjI3IDIuMTMzLTIyLjE4NyAyLjEzMy0zMS4xNDdzLTAuODUzLTE4LjM0Ny0yLjEzMy0zMS4xNDdsLTUuOTczLTQ4LjIxMyAzNy45NzMtMjkuODY3IDQ2LjA4MC0zNS44NC0yOS44NjctNTEuNjI3LTU0LjE4NyAyMS43Ni00NC4zNzMgMTcuOTItMzguNC0yOS4wMTNjLTE4LjM0Ny0xMy42NTMtMzUuODQtMjMuODkzLTUzLjMzMy0zMS4xNDdsLTQ1LjIyNy0xOC4zNDctNi44MjctNDguMjEzLTguNTMzLTU3LjZoLTU5LjczM2wtOC4xMDcgNTcuNi02LjgyNyA0OC4yMTMtNDUuMjI3IDE4LjM0N2MtMTguMzQ3IDcuNjgtMzUuNDEzIDE3LjQ5My01Mi40OCAzMC4yOTNsLTM4LjgyNyAyOS44NjctNDUuMjI3LTE4LjM0Ny01NC4xODctMjEuNzYtMjkuODY3IDUxLjYyNyA0Ni4wODAgMzUuODQgMzcuOTczIDI5Ljg2Ny01Ljk3MyA0OC4yMTNjLTEuMjggMTMuMjI3LTIuMTMzIDIzLjA0MC0yLjEzMyAzMS41NzNzMC44NTMgMTguMzQ3IDIuMTMzIDMxLjE0N2w1Ljk3MyA0OC4yMTMtMzcuOTczIDI5Ljg2Ny00Ni4wODAgMzUuODQgMjkuODY3IDUxLjYyNyA1NC4xODctMjEuNzYgNDQuMzczLTE3LjkyIDM4LjQgMjkuMDEzYzE4LjM0NyAxMy42NTMgMzUuODQgMjMuODkzIDUzLjMzMyAzMS4xNDdsNDUuMjI3IDE4LjM0NyA2LjgyNyA0OC4yMTMgOC41MzMgNTcuNmg1OS4zMDdsOC4xMDctNTcuNiA2LjgyNy00OC4yMTMgNDUuMjI3LTE4LjM0N2MxOC4zNDctNy42OCAzNS40MTMtMTcuNDkzIDUyLjQ4LTMwLjI5M2wzOC44MjctMjkuODY3IDQ1LjIyNyAxOC4zNDcgNTQuMTg3IDIxLjc2IDI5Ljg2Ny01MS42MjctNDUuNjUzLTM2LjI2Ny0zNy45NzMtMjkuODY3IDUuOTczLTQ4LjIxM3pNNTEyIDYxOC42NjdjLTk0LjI5MyAwLTE3MC42NjctNzYuMzczLTE3MC42NjctMTcwLjY2N3M3Ni4zNzMtMTcwLjY2NyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2NyA3Ni4zNzMgMTcwLjY2NyAxNzAuNjY3LTc2LjM3MyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2N3pNNTEyIDM2Mi42NjdjLTQ2LjkzMyAwLTg1LjMzMyAzOC40LTg1LjMzMyA4NS4zMzNzMzguNCA4NS4zMzMgODUuMzMzIDg1LjMzMyA4NS4zMzMtMzguNCA4NS4zMzMtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzMy04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNzsiIGdseXBoLW5hbWU9ImNvbXBhc3MiIGQ9Ik01MTIgOTE1LjJjLTI1NiAwLTQ2Ny4yLTIwNC44LTQ2Ny4yLTQ2Ny4yIDAtMjU2IDIwNC44LTQ2Ny4yIDQ2Ny4yLTQ2Ny4yIDI1NiAwIDQ2MC44IDIwNC44IDQ2MC44IDQ2Ny4yIDYuNCAyNjIuNC0yMDQuOCA0NjcuMi00NjAuOCA0NjcuMnpNNjQ2LjQgMzIwbC00NDEuNi0xNzIuOCAxNzkuMiA0MzUuMiA0MzUuMiAxNzkuMi0xNzIuOC00NDEuNnpNNTg4LjggNDU0LjRjMC00Mi40MTUtMzQuMzg1LTc2LjgtNzYuOC03Ni44cy03Ni44IDM0LjM4NS03Ni44IDc2LjhjMCA0Mi40MTUgMzQuMzg1IDc2LjggNzYuOCA3Ni44czc2LjgtMzQuMzg1IDc2LjgtNzYuOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA4OyIgZ2x5cGgtbmFtZT0iY29ubmVjdGlvbiIgZD0iTTMzOS4yIDc2MS42bC0xNjYuNC0yMDQuOGgxMzQuNHYtNDQxLjZoNjR2NDQxLjZoMTI4ek03MjMuMiAzMjB2NDQxLjZoLTY0di00NDEuNmgtMTM0LjRsMTY2LjQtMjA0LjggMTYwIDIwNC44eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDk7IiBnbHlwaC1uYW1lPSJjb25zdW1lIiBkPSJNNjgyLjY2NyA3MDR2LTM0MS4zMzNoMTI4di0zNDEuMzMzaDg1LjMzM3Y4NTMuMzMzYy0xMTcuNzYgMC0yMTMuMzMzLTk1LjU3My0yMTMuMzMzLTE3MC42Njd6TTQ2OS4zMzMgNTc2aC04NS4zMzN2Mjk4LjY2N2gtODUuMzMzdi0yOTguNjY3aC04NS4zMzN2Mjk4LjY2N2gtODUuMzMzdi0yOTguNjY3YzAtOTQuMjkzIDc2LjM3My0xNzAuNjY3IDE3MC42NjctMTcwLjY2N3YtMzg0aDg1LjMzM3YzODRjOTQuMjkzIDAgMTcwLjY2NyA3Ni4zNzMgMTcwLjY2NyAxNzAuNjY3djI5OC42NjdoLTg1LjMzM3YtMjk4LjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBhOyIgZ2x5cGgtbmFtZT0iZmlsdGVyIiBkPSJNNDI2LjY2NyAxOTJoMTcwLjY2N3Y4NS4zMzNoLTE3MC42Njd2LTg1LjMzM3pNMTI4IDcwNHYtODUuMzMzaDc2OHY4NS4zMzNoLTc2OHpNMjU2IDQwNS4zMzNoNTEydjg1LjMzM2gtNTEydi04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYjsiIGdseXBoLW5hbWU9ImZvbGRlciIgZD0iTTg1Ny42IDY5MS4yaC0zMjYuNHY4OS42YzAgNDQuOC0zMiA3Ni44LTc2LjggNzYuOGgtMjQ5LjZjLTQ0LjggMC03Ni44LTMyLTc2LjgtNzYuOHYtMTAyLjRjLTI1LjYtMTIuOC0zOC40LTM4LjQtMzguNC02NHYtNDkyLjhjMC00NC44IDMyLTc2LjggNzYuOC03Ni44aDY5MS4yYzQ0LjggMCA3Ni44IDMyIDc2LjggNzYuOHY0OTIuOGMwIDQ0LjgtMzIgNzYuOC03Ni44IDc2Ljh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYzsiIGdseXBoLW5hbWU9ImZvbGRlci1vcGVuIiBkPSJNODUzLjMzMyA3MDRoLTM0MS4zMzNsLTg1LjMzMyA4NS4zMzNoLTI1NmMtNDYuOTMzIDAtODQuOTA3LTM4LjQtODQuOTA3LTg1LjMzM2wtMC40MjctNTEyYzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoNjgyLjY2N2M0Ni45MzMgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzdjQyNi42NjdjMCA0Ni45MzMtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM3pNODUzLjMzMyAxOTJoLTY4Mi42Njd2NDI2LjY2N2g2ODIuNjY3di00MjYuNjY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGQ7IiBnbHlwaC1uYW1lPSJncmlkIiBkPSJNMTI4IDgzOC40aDMyMHYtMzIwaC0zMjB2MzIwek01ODIuNCAzODRoMzIwdi0zMjBoLTMyMHYzMjB6TTEyOCAzODRoMzIwdi0zMjBoLTMyMHYzMjB6TTU4Mi40IDgzOC40aDMyMHYtMzIwaC0zMjB2MzIweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGU7IiBnbHlwaC1uYW1lPSJsZWFmIiBkPSJNOTYgNjk3LjZjMCAwIDI3NS4yIDI0OS42IDUzNy42IDg5LjYgMjYyLjQtMTUzLjYgMzQ1LjYtMzU4LjQgMjMwLjQtNTA1LjYtMTM0LjQgMjA0LjgtMjA0LjggMzA3LjItNDgwIDM5MC40IDAgMCA0MzUuMi0yNzUuMiA1MTItNTk1LjItMTIuOC03MC40LTc2LjgtMTkuMi03Ni44LTE5LjJsLTcwLjQgMTE1LjJjMCAwLTEzNC40LTEwMi40LTI5NC40IDMyLTI2OC44IDIzNi44LTU3LjYgNDk5LjItMzU4LjQgNDkyLjh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwZjsiIGdseXBoLW5hbWU9Imxpc3QiIGQ9Ik0xMDguOCA4MDYuNGg4MDYuNHYtMTIxLjZoLTgwNi40djEyMS42ek0xMDguOCA1MTJoODA2LjR2LTEyMS42aC04MDYuNHYxMjEuNnpNMTA4LjggMjE3LjZoODA2LjR2LTEyMS42aC04MDYuNHYxMjEuNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEwOyIgZ2x5cGgtbmFtZT0ibG9jYWwiIGQ9Ik05MTMuMTUyIDY4NS4yNDhoLTI5NS41NTJsLTk4LjU2IDk4LjQ5NmgtMjk1LjQyNHYtOTguNDk2aC05OC40OTZ2LTU5MC45NzZoNjg5LjQ3MnY5OC40MzJoOTguNDk2djQ5Mi41NDRoMC4wNjR6TTg2My45MzYgMjQxLjk4NGgtNDkuMzQ0djM0NC43NjhoLTI5NS41NTJsLTk4LjQzMiA5OC41NmgtMTQ3LjcxMnY0OS4yMTZoMjI1Ljg1Nmw5OC40OTYtOTguNDk2aDI2Ni42ODh2LTM5NC4wNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxMTsiIGdseXBoLW5hbWU9Im1pYyIgZD0iTTQ3My42IDU2My4yYy0xMi44IDEyLjgtMzguNCAxMi44LTUxLjIgMGwtMzM5LjItMzk2LjhjLTYuNC02LjQtMTIuOC0xMi44LTEyLjgtMjUuNnM2LjQtMTkuMiAxMi44LTI1LjZsOTYtOTZjNi40LTYuNCAxMi44LTEyLjggMjUuNi0xMi44IDYuNCAwIDE5LjIgNi40IDI1LjYgNi40bDM5Ni44IDMzOS4yYzYuNCAxMi44IDEyLjggMTkuMiAxMi44IDMycy02LjQgMTkuMi0xMi44IDI1LjZsLTE1My42IDE1My42ek04ODMuMiA4MjUuNmMtNDQuOCA0NC44LTEwMi40IDcwLjQtMTY2LjQgNzAuNHMtMTIxLjYtMjUuNi0xNzIuOC03MC40Yy01MS4yLTUxLjItNzAuNC0xNDAuOC03MC40LTE0Ny4yIDAtMTIuOCAwLTMyIDE5LjItNDQuOGwxOTguNC0xOTguNGM2LjQtNi40IDI1LjYtMTkuMiA0NC44LTE5LjIgMCAwIDAgMCAwIDAgNi40IDAgMTAyLjQgMTkuMiAxNDAuOCA3MC40IDk2IDg5LjYgOTYgMjQzLjIgNi40IDMzOS4yeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTI7IiBnbHlwaC1uYW1lPSJtdXNpYyIgZD0iTTk2Ni40IDkyOGMtMTIuOCA2LjQtMjUuNiAxMi44LTM4LjQgNi40bC01NDQtMTI4Yy0xOS4yLTYuNC0zMi0yNS42LTMyLTQ0Ljh2LTQyMi40Yy0zMiAxOS4yLTcwLjQgMzItMTA4LjggMzItMTA4LjggMC0xOTguNC04OS42LTE5OC40LTE5OC40czg5LjYtMTk4LjQgMTk4LjQtMTk4LjRjMTA4LjggMCAxOTguNCA4OS42IDE5OC40IDE5OC40djU1MC40bDQ1NC40IDEwOC44di0zNjQuOGMtMzIgMTkuMi03MC40IDMyLTEwOC44IDMyLTEwOC44IDAtMTk4LjQtODkuNi0xOTguNC0xOTguNHM4OS42LTE5OC40IDE5OC40LTE5OC40IDE5OC40IDg5LjYgMTk4LjQgMTk4LjR2NTg4LjhjMCAxMi44LTYuNCAyNS42LTE5LjIgMzguNHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEzOyIgZ2x5cGgtbmFtZT0icGF1c2UiIGQ9Ik0yNTYgMTQ5LjMzM2gxNzAuNjY3djU5Ny4zMzNoLTE3MC42Njd2LTU5Ny4zMzN6TTU5Ny4zMzMgNzQ2LjY2N3YtNTk3LjMzM2gxNzAuNjY3djU5Ny4zMzNoLTE3MC42Njd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxNDsiIGdseXBoLW5hbWU9InBsYXkiIGQ9Ik00MjYuNjY3IDU5MS4zNmwyMjQuODUzLTE0My4zNi0yMjQuODUzLTE0My4zNnYyODYuNzJ6TTM0MS4zMzMgNzQ2LjY2N3YtNTk3LjMzM2w0NjkuMzMzIDI5OC42NjctNDY5LjMzMyAyOTguNjY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTU7IiBnbHlwaC1uYW1lPSJwbGF5LWFsdCIgZD0iTTM2Ny45MjggMTg3LjgwM2MzLjU1NSAwIDcuMTY4IDAuMjIyIDEwLjc0NyAwLjY2NSA0Ny4xNjggNS44ODkgODIuNjE1IDQ4Ljg3NyA3OS4xMzcgOTUuODktMC4wMDMgMC4wODEtMC4wMDcgMC4xNTgtMC4wMTAgMC4yMzggMC4wODQgMC40ODMgMC4xMzEgMC45OCAwLjEzMSAxLjQ4N3YyNTUuODEybDE4NC42MzIgMzQuMzY5di0xODguNzQ4Yy05Ljg3NyAyLjQyNC0yMC4zNjkgMy4wMTItMzAuNzc3IDEuNzA2LTQ3LjI4NS01Ljg0NS04Mi44MTMtNDguOTY3LTc5LjIwMS05Ni4xMTUgMy4yNzctNDMuNDY4IDM4LjYxLTc2LjI0NiA4Mi4xOTItNzYuMjQ2IDMuNTgyIDAgNy4yMjUgMC4yMjggMTAuODI0IDAuNjc4IDQ3LjIxMSA1Ljg4NSA4Mi43MzYgNDkuMDA0IDc5LjE5IDk2LjA5OC0wLjAwNyAwLjA4MS0wLjAxMyAwLjE2MS0wLjAyMCAwLjI0MiAwLjA2NyAwLjQxNiAwLjA5NyAwLjg0MyAwLjA5NyAxLjI3OXYzODIuOTg2bDAuMDc3IDAuOTY3YzAuMjUyIDMuMDM4LTEuMjE5IDUuOTQ2LTMuNzU3IDcuNjQxLTEuOTE3IDEuMjgzLTQuMjc3IDEuNjgyLTYuNDkzIDEuMTk5LTAuMDQwLTAuMDA3LTAuMDgxLTAuMDE3LTAuMTIxLTAuMDI0bC0yOTIuMDM1LTQ5Ljg1NGMtNC4wMzItMC42ODgtNi45OC00LjE4My02Ljk4LTguMjczdi0yOTEuMzk3Yy05LjkwNCAyLjQ0OC0yMC4zOTMgMy4wNDgtMzAuNzY3IDEuNzQ5LTQ3LjMwNS01LjgzNS04Mi44MS00OC45NjEtNzkuMTQ3LTk2LjEyNSAzLjMyNy00My40NTggMzguNjk3LTc2LjIyOSA4Mi4yNzktNzYuMjI2ek01MTItNjRjMjgyLjMxOCAwIDUxMiAyMjkuNjgyIDUxMiA1MTJzLTIyOS42ODIgNTEyLTUxMiA1MTItNTEyLTIyOS42ODItNTEyLTUxMiAyMjkuNjgyLTUxMiA1MTItNTEyek01MTIgODQyLjUwMmMyMTcuNTI4IDAgMzk0LjUwMi0xNzYuOTcxIDM5NC41MDItMzk0LjUwMnMtMTc2Ljk3NC0zOTQuNTA1LTM5NC41MDItMzk0LjUwNS0zOTQuNTAyIDE3Ni45NzQtMzk0LjUwMiAzOTQuNTA1YzAgMjE3LjUyOCAxNzYuOTc0IDM5NC41MDIgMzk0LjUwMiAzOTQuNTAyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTY7IiBnbHlwaC1uYW1lPSJwbGF5bGlzdCIgZD0iTTcwNCA4ODkuNmMtMTIuOCAxMi44LTMyIDE5LjItNTEuMiAxMi44LTEyLjgtMTIuOC0yNS42LTI1LjYtMjUuNi00NC44di00ODYuNGMtMzIgMTkuMi03MC40IDMyLTEwOC44IDMyLTEwOC44IDAtMTk4LjQtODkuNi0xOTguNC0xOTguNHM4OS42LTE5OC40IDE5OC40LTE5OC40YzEwOC44IDAgMTk4LjQgODkuNiAxOTguNCAxOTguNHY1NDRsMTc5LjItMTg1LjYgNjQgNjQtMjU2IDI2Mi40ek0xMDIuNCA4ODMuMmgzOTAuNHYtODkuNmgtMzkwLjR2ODkuNnpNMTAyLjQgNzI5LjZoMzkwLjR2LTg5LjZoLTM5MC40djg5LjZ6TTEwMi40IDU3NmgzOTAuNHYtODkuNmgtMzkwLjR2ODkuNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTE3OyIgZ2x5cGgtbmFtZT0icmVwZWF0IiBkPSJNMjk4LjY2NyA2NjEuMzMzaDQyNi42Njd2LTEyOGwxNzAuNjY3IDE3MC42NjctMTcwLjY2NyAxNzAuNjY3di0xMjhoLTUxMnYtMjU2aDg1LjMzM3YxNzAuNjY3ek03MjUuMzMzIDIzNC42NjdoLTQyNi42Njd2MTI4bC0xNzAuNjY3LTE3MC42NjcgMTcwLjY2Ny0xNzAuNjY3djEyOGg1MTJ2MjU2aC04NS4zMzN2LTE3MC42Njd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxODsiIGdseXBoLW5hbWU9InNlYXJjaCIgZD0iTTY2MS4zMzMgMzYyLjY2N2gtMzMuNzA3bC0xMS45NDcgMTEuNTJjNDEuODEzIDQ4LjY0IDY2Ljk4NyAxMTEuNzg3IDY2Ljk4NyAxODAuNDggMCAxNTMuMTczLTEyNC4xNiAyNzcuMzMzLTI3Ny4zMzMgMjc3LjMzM3MtMjc3LjMzMy0xMjQuMTYtMjc3LjMzMy0yNzcuMzMzIDEyNC4xNi0yNzcuMzMzIDI3Ny4zMzMtMjc3LjMzM2M2OC42OTMgMCAxMzEuODQgMjUuMTczIDE4MC40OCA2Ni45ODdsMTEuNTItMTEuOTQ3di0zMy43MDdsMjEzLjMzMy0yMTIuOTA3IDYzLjU3MyA2My41NzMtMjEyLjkwNyAyMTMuMzMzek00MDUuMzMzIDM2Mi42NjdjLTEwNi4yNCAwLTE5MiA4NS43Ni0xOTIgMTkyczg1Ljc2IDE5MiAxOTIgMTkyIDE5Mi04NS43NiAxOTItMTkyLTg1Ljc2LTE5Mi0xOTItMTkyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTk7IiBnbHlwaC1uYW1lPSJzZWN0aW9ucyIgZD0iTTEyOS4xNTIgODIzLjgwOGgyNzQuNDk2di0yNzQuNDk2aC0yNzQuNDk2djI3NC40OTZ6TTQ2Ny41MiA4MjMuODA4aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiA2OTUuODA4aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiA1NjcuODA4aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTEyOS4xNTIgMzcwLjQ5NmgyNzQuNDk2di0yNzQuNDk2aC0yNzQuNDk2djI3NC40OTZ6TTQ2Ny41MiAzNzAuNDk2aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiAyNDIuNDk2aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiAxMTQuNDk2aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxYTsiIGdseXBoLW5hbWU9InNlcnZlciIgZD0iTTgyNS42IDY4NC44YzAgODkuNi0xOTguNCAxMTUuMi0zMTMuNiAxMTUuMnMtMzEzLjYtMjUuNi0zMTMuNi0xMTUuMmMwIDAgMCAwIDAgMHYtMzMyLjhjMCAwIDAgMCAwIDB2LTE2Ni40YzAtODkuNiAxOTguNC0xMTUuMiAzMTMuNi0xMTUuMnMzMTMuNiAyNS42IDMxMy42IDExNS4ydjQ5OS4yek03NjEuNiAzNTJjLTYuNC0xMi44LTg5LjYtNTEuMi0yNDkuNi01MS4ycy0yNDMuMiAzOC40LTI0OS42IDUxLjJ2ODkuNmM2NC0yNS42IDE3Mi44LTM4LjQgMjQ5LjYtMzguNHMxODUuNiAxMi44IDI0OS42IDM4LjR2LTg5LjZ6TTUxMiA3MzZjMTYwIDAgMjQzLjItMzguNCAyNDkuNi01MS4yLTYuNC0xMi44LTg5LjYtNTEuMi0yNDkuNi01MS4ycy0yNDMuMiAzOC40LTI0OS42IDQ0Ljh2MGM2LjQgMTkuMiA4OS42IDU3LjYgMjQ5LjYgNTcuNnpNMjYyLjQgNjA4YzY0LTI1LjYgMTcyLjgtMzguNCAyNDkuNi0zOC40czE4NS42IDEyLjggMjQ5LjYgMzguNHYtODkuNmMtNi40LTEyLjgtODkuNi01MS4yLTI0OS42LTUxLjJzLTI0My4yIDM4LjQtMjQ5LjYgNTEuMnY4OS42ek01MTIgMTM0LjRjLTE2MCAwLTI0My4yIDM4LjQtMjQ5LjYgNTEuMnY5NmM3MC40LTMyIDE3OS4yLTM4LjQgMjQ5LjYtMzguNCA3Ni44IDAgMTg1LjYgMTIuOCAyNDkuNiAzOC40di04OS42Yy02LjQtMTkuMi04OS42LTU3LjYtMjQ5LjYtNTcuNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTFiOyIgZ2x5cGgtbmFtZT0ic2h1ZmZsZSIgZD0iTTQ1MS44NCA1NjguNzQ3bC0yMjEuMDEzIDIyMC41ODctNjAuMTYtNjAuMTYgMjIwLjU4Ny0yMjAuNTg3IDYwLjU4NyA2MC4xNnpNNjE4LjY2NyA3ODkuMzMzbDg3LjA0MC04Ny4wNDAtNTM1LjA0MC01MzUuNDY3IDYwLjE2LTYwLjE2IDUzNS40NjcgNTM1LjA0MCA4Ny4wNDAtODcuMDQwdjIzNC42NjdoLTIzNC42Njd6TTYzMi43NDcgMzg3Ljg0bC02MC4xNi02MC4xNiAxMzMuNTQ3LTEzMy41NDctODcuNDY3LTg3LjQ2N2gyMzQuNjY3djIzNC42NjdsLTg3LjA0MC04Ny4wNDAtMTMzLjU0NyAxMzMuNTQ3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MWM7IiBnbHlwaC1uYW1lPSJza2lwIiBkPSJNMjU2IDE5MmwzNjIuNjY3IDI1Ni0zNjIuNjY3IDI1NnYtNTEyek0zNDEuMzMzIDUzOS4zMDdsMTI5LjI4LTkxLjMwNy0xMjkuMjgtOTEuMzA3djE4Mi42MTN6TTY4Mi42NjcgNzA0aDg1LjMzM3YtNTEyaC04NS4zMzN2NTEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MWQ7IiBnbHlwaC1uYW1lPSJzb3VuZGNsb3VkIiBkPSJNMS43MjggMjU5LjUyYzAtMTIuNjA4IDQuNjA4LTIyLjIwOCAxMy43Ni0yOC42MDggOS4yOC02LjY1NiAxOS4wNzItOC44OTYgMjkuNTY4LTYuOTEyIDkuNzkyIDEuNzkyIDE2LjcwNCA1LjM3NiAyMC42NzIgMTAuNDk2IDQuMDMyIDUuMDU2IDUuOTUyIDEzLjUwNCA1Ljk1MiAyNS4yMTZ2MTM3Ljc5MmMwIDkuODU2LTMuMzkyIDE4LjExMi0xMC4xNzYgMjUuMDI0LTYuODQ4IDYuODQ4LTE1LjE2OCAxMC4yNC0yNS4wMjQgMTAuMjQtOS40MDggMC0xNy42LTMuMzkyLTI0LjQ0OC0xMC4yNC02Ljg0OC02LjkxMi0xMC4zMDQtMTUuMTY4LTEwLjMwNC0yNS4wMjR2LTEzNy45ODR6TTExMS4xMDQgMjAwLjY0YzAtOS4yOCAzLjM5Mi0xNi4xMjggOS44NTYtMjAuNjA4IDYuNDY0LTQuNTQ0IDE0LjcyLTYuOTEyIDI0Ljg5Ni02LjkxMiAxMC41NiAwIDE5LjAwOCAyLjM2OCAyNS40MDggNi45MTIgNi41OTIgNC40OCA5Ljc5MiAxMS40NTYgOS43OTIgMjAuNjA4djMyMS40NzJjMCA5LjQ3Mi0zLjUyIDE3LjY2NC0xMC4xNzYgMjQuNTEyLTYuODQ4IDYuODQ4LTE1LjEwNCAxMC4zMDQtMjUuMDI0IDEwLjMwNC05LjQ3MiAwLTE3LjYtMy40NTYtMjQuNTEyLTEwLjMwNC02LjcyLTYuNzg0LTEwLjI0LTE0Ljk3Ni0xMC4yNC0yNC41MTJ2LTMyMS40NzJ6TTIyMC4wMzIgMTg1LjM0NGMwLTkuMjggMy40NTYtMTYuMTI4IDkuOTg0LTIwLjczNiA2LjcyLTQuNTQ0IDE1LjIzMi02Ljg0OCAyNS43MjgtNi44NDggMTAuMDQ4IDAgMTguNDMyIDIuMzA0IDI1LjAyNCA2Ljg0OCA2LjQ2NCA0LjYwOCA5LjY2NCAxMS41ODQgOS42NjQgMjAuNzM2djI5My41MDRjMCA5Ljc5Mi0zLjQ1NiAxOC4yNC0xMC4yNCAyNS4yMTYtNi44NDggNi45MTItMTQuOTEyIDEwLjQ5Ni0yNC4zODQgMTAuNDk2LTkuODU2IDAtMTguMjQtMy41ODQtMjUuMjgtMTAuNDk2LTYuOTEyLTYuOTEyLTEwLjQ5Ni0xNS4zNi0xMC40OTYtMjUuMjE2di0yOTMuNTA0ek0zMjkuNDcyIDE4NGMwLTE3LjQ3MiAxMS44NC0yNi4yNCAzNS4yNjQtMjYuMjQgMjMuNDg4IDAgMzUuMiA4Ljc2OCAzNS4yIDI2LjI0djQ3NS41ODRjMCAyNi43NTItOC4xOTIgNDEuNzkyLTI0LjMyIDQ1LjI0OC0xMC4zNjggMi40OTYtMjAuNzM2LTAuNDQ4LTMwLjg0OC05LjA4OC0xMC4xNzYtOC41MTItMTUuMjk2LTIwLjU0NC0xNS4yOTYtMzYuMTZ2LTQ3NS41ODR6TTQ0MC44MzIgMTcwLjExMnY1MTcuNTA0YzAgMTYuNTc2IDQuOTI4IDI2LjM2OCAxNC43MiAyOS41MDQgMjEuMzEyIDUuMTIgNDIuNDMyIDcuNjggNjMuMjk2IDcuNjggNDguNTEyIDAgOTMuNjMyLTExLjQ1NiAxMzUuNTUyLTM0LjI0IDQxLjg1Ni0yMi44NDggNzUuODQtNTQuMDgwIDEwMS42MzItOTMuNTY4IDI1LjY2NC0zOS4zNiA0MC44MzItODIuODggNDQuODY0LTEzMC40OTYgMTkuMzkyIDguMjU2IDQwIDEyLjM1MiA2Mi4wMTYgMTIuMzUyIDQ0LjE2IDAgODIuMjQtMTUuNzQ0IDExMy43MjgtNDcuMDQwIDMxLjYxNi0zMS40MjQgNDcuMzYtNjkuMTg0IDQ3LjM2LTExMy4xNTIgMC00NC4zNTItMTUuNzQ0LTgyLjM2OC00Ny4yOTYtMTEzLjY2NC0zMS41NTItMzEuMzYtNjkuNDQtNDcuMTA0LTExMy4zNDQtNDcuMTA0bC00MTMuOTUyIDAuNTc2Yy0yLjc1MiAxLjAyNC00LjkyOCAyLjYyNC02LjUyOCA1LjI0OC0xLjQwOCAyLjMwNC0yLjA0OCA0LjU0NC0yLjA0OCA2LjR2MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTFlOyIgZ2x5cGgtbmFtZT0ic3BlYWtlciIgZD0iTTcyNS4zMzMgODc0LjY2N2gtNDI2LjY2N2MtNDYuOTMzIDAtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzM3YtNjgyLjY2N2MwLTQ2LjkzMyAzOC40LTg0LjkwNyA4NS4zMzMtODQuOTA3bDQyNi42NjctMC40MjdjNDYuOTMzIDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3Y2ODIuNjY3YzAgNDYuOTMzLTM4LjQgODUuMzMzLTg1LjMzMyA4NS4zMzN6TTI5OC42NjcgMTA2LjY2N3Y2ODIuNjY3aDQyNi42Njd2LTY4Mi42NjdoLTQyNi42Njd6TTUxMiA1NzZjNDYuOTMzIDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3MtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM2MtNDcuMzYgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzczM3Ljk3My04NS4zMzMgODUuMzMzLTg1LjMzM3pNNTEyIDQ5MC42NjdjLTk0LjI5MyAwLTE3MC42NjctNzYuMzczLTE3MC42NjctMTcwLjY2N3M3Ni4zNzMtMTcwLjY2NyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2NyA3Ni4zNzMgMTcwLjY2NyAxNzAuNjY3LTc2LjM3MyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2N3pNNTEyIDIzNC42NjdjLTQ2LjkzMyAwLTg1LjMzMyAzOC40LTg1LjMzMyA4NS4zMzNzMzguNCA4NS4zMzMgODUuMzMzIDg1LjMzMyA4NS4zMzMtMzguNCA4NS4zMzMtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzMy04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxZjsiIGdseXBoLW5hbWU9InNwZWFrZXItZ3JvdXAiIGQ9Ik03NzYuNTMzIDkxNy4zMzNoLTM1OC40Yy00Mi4yNCAwLTc2LjgtMzQuNTYtNzYuOC03Ni44di02MTQuNGMwLTQyLjI0IDM0LjU2LTc2LjM3MyA3Ni44LTc2LjM3M2wzNTguNC0wLjQyN2M0Mi4yNCAwIDc2LjggMzQuNTYgNzYuOCA3Ni44djYxNC40YzAgNDIuMjQtMzQuNTYgNzYuOC03Ni44IDc2Ljh6TTc2OCAyMzQuNjY3bC0zNDEuMzMzIDAuNDI3djU5Ni45MDdoMzQxLjMzM3YtNTk3LjMzM3pNNTk3LjMzMyA2MTguNjY3YzQ2LjkzMyAwIDg1LjMzMyAzNy45NzMgODUuMzMzIDg1LjMzM3MtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzMy04NS4zMzMtMzcuOTczLTg1LjMzMy04NS4zMzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM3pNNTk3LjMzMyAyNzcuMzMzYzgyLjM0NyAwIDE0OS4zMzMgNjYuOTg3IDE0OS4zMzMgMTQ5LjMzM3MtNjYuOTg3IDE0OS4zMzMtMTQ5LjMzMyAxNDkuMzMzYy04Mi4zNDcgMC0xNDkuMzMzLTY2Ljk4Ny0xNDkuMzMzLTE0OS4zMzNzNjYuOTg3LTE0OS4zMzMgMTQ5LjMzMy0xNDkuMzMzek01OTcuMzMzIDQ5MC42NjdjMzUuNDEzIDAgNjQtMjguNTg3IDY0LTY0cy0yOC41ODctNjQtNjQtNjQtNjQgMjguNTg3LTY0IDY0IDI4LjU4NyA2NCA2NCA2NHpNMjU2IDc0Ni42NjdoLTg1LjMzM3YtNjgyLjY2N2MwLTQ2LjkzMyAzNy45NzMtODUuMzMzIDg1LjMzMy04NS4zMzNoNDI2LjY2N3Y4NS4zMzNoLTQyNi42Njd2NjgyLjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTIwOyIgZ2x5cGgtbmFtZT0ic3BvdGlmeSIgZD0iTTUwOC4xNiA4MzkuMjMyYy0yMTYuODk2IDAtMzk0LjI0LTE3Ny40MDgtMzk0LjI0LTM5NC4zNjggMC0yMTcuMDI0IDE3Ny4zNDQtMzk0LjMwNCAzOTQuMjQtMzk0LjMwNCAyMTYuODMyIDAgMzk0LjI0IDE3Ny4zNDQgMzk0LjI0IDM5NC4zMDRzLTE3NS41NTIgMzk0LjM2OC0zOTQuMjQgMzk0LjM2OHpNNjg5LjQ3MiAyNjkuNTA0Yy03Ljg3Mi0xMS45MDQtMjEuNzYtMTUuNzQ0LTMzLjQwOC03Ljg3Mi05Mi43MzYgNTcuMTUyLTIwOS4wODggNjguOTkyLTM0Ny4wMDggMzcuMzc2LTEzLjc2LTMuOTA0LTI1LjUzNiA2LjAxNi0yOS41MDQgMTcuODU2LTMuOTY4IDEzLjc2IDUuNzYgMjUuNTM2IDE3LjcyOCAyOS41MDQgMTQ5Ljc2IDMzLjQ3MiAyODAgMTkuNzc2IDM4Mi40LTQzLjM5MiAxMy44MjQtNS45NTIgMTUuNzQ0LTIxLjY5NiA5Ljc5Mi0zMy40NzJ6TTczNi44OTYgMzc3Ljk4NGMtOS44NTYtMTQuMDE2LTI3LjcxMi0xOS43NzYtNDEuMzQ0LTkuOTg0LTEwNi40OTYgNjUuMTUyLTI2OC4xNiA4NC45MjgtMzkyLjMyIDQ1LjM3Ni0xNS44NzItNC4wMzItMzMuNiAzLjkwNC0zNy41NjggMTkuNzc2LTMuOTY4IDE1Ljc0NCAzLjk2OCAzMy41MzYgMTkuNjQ4IDM3LjM3NiAxNDQgNDMuMzkyIDMyMS4zNDQgMjEuNzYgNDQzLjcxMi01My4yNDggMTEuNzEyLTUuODg4IDE3LjY2NC0yNS40NzIgNy44NzItMzkuMjk2ek03NDAuNzM2IDQ4OC4yNTZjLTEyNi4wODAgNzUuMDcyLTMzNy4wMjQgODIuOTQ0LTQ1Ny4yMTYgNDUuNDQtMTkuNzc2LTUuOTUyLTM5LjU1MiA1Ljg4OC00NS40NCAyMy42MTYtNS44ODggMTkuNzc2IDUuODg4IDM5LjQyNCAyMy42MTYgNDUuMzc2IDEzOS45NjggNDEuMzQ0IDM3MC42MjQgMzMuNDcyIDUxNi41NDQtNTMuMjQ4IDE3LjcyOC05Ljg1NiAyMy42MTYtMzMuNDcyIDEzLjc2LTUxLjI2NC05LjcyOC0xMy43Ni0zMy40NzItMTkuNjQ4LTUxLjI2NC05LjkyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MjE7IiBnbHlwaC1uYW1lPSJzdGFyIiBkPSJNNTEyIDkwOC44Yy0xMi44IDAtMTkuMi02LjQtMjUuNi0yNS42bC0xMjgtMjU2LTI4MS42LTM4LjRjLTI1LjYtNi40LTMyLTEyLjgtMzItMjUuNiAwLTYuNCA2LjQtMTkuMiAxMi44LTI1LjZsMjA0LjgtMTk4LjQtNTEuMi0yODEuNmMwLTYuNCAwLTYuNCAwLTEyLjhzMC0xMi44IDYuNC0xOS4yIDEyLjgtNi40IDE5LjItNi40IDEyLjggMCAyNS42IDYuNGwyNTYgMTM0LjQgMjU2LTEzNC40YzYuNC02LjQgMTIuOC02LjQgMjUuNi02LjQgNi40IDAgMTIuOCAwIDE5LjIgNi40czYuNCAxMi44IDYuNCAxOS4yIDAgNi40IDAgMTIuOGwtNTEuMiAyODEuNiAyMDQuOCAxOTguNGMxMi44IDEyLjggMTIuOCAxOS4yIDEyLjggMjUuNiAwIDEyLjgtMTIuOCAyNS42LTMyIDI1LjZsLTI4MS42IDM4LjQtMTI4IDI1NmMtMTkuMiAxOS4yLTI1LjYgMjUuNi0zOC40IDI1LjZ2MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTIyOyIgZ2x5cGgtbmFtZT0ic3RvcCIgZD0iTTY4Mi42NjcgNjE4LjY2N3YtMzQxLjMzM2gtMzQxLjMzM3YzNDEuMzMzaDM0MS4zMzN6TTc2OCA3MDRoLTUxMnYtNTEyaDUxMnY1MTJ6IiAvPgo8L2ZvbnQ+PC9kZWZzPjwvc3ZnPg==#iris) format("svg"); - font-weight: normal; - font-style: normal; } - -[class^="icon-"], [class*=" icon-"] { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - font-family: 'iris' !important; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - display: inline-block; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -.icon-back:before { - content: "\E900"; } - -.icon-broadcast:before { - content: "\E901"; } - -.icon-cd:before { - content: "\E902"; } - -.icon-chevron-left:before { - content: "\E903"; } - -.icon-chevron-right:before { - content: "\E904"; } - -.icon-close:before { - content: "\E905"; } - -.icon-cog:before { - content: "\E906"; } - -.icon-compass:before { - content: "\E907"; } - -.icon-connection:before { - content: "\E908"; } - -.icon-consume:before { - content: "\E909"; } - -.icon-filter:before { - content: "\E90A"; } - -.icon-folder:before { - content: "\E90B"; } - -.icon-folder-open:before { - content: "\E90C"; } - -.icon-grid:before { - content: "\E90D"; } - -.icon-leaf:before { - content: "\E90E"; } - -.icon-list:before { - content: "\E90F"; } - -.icon-local:before { - content: "\E910"; } - -.icon-mic:before { - content: "\E911"; } - -.icon-music:before { - content: "\E912"; } - -.icon-pause:before { - content: "\E913"; } - -.icon-play:before { - content: "\E914"; } - -.icon-play-alt:before { - content: "\E915"; } - -.icon-playlist:before { - content: "\E916"; } - -.icon-repeat:before { - content: "\E917"; } - -.icon-search:before { - content: "\E918"; } - -.icon-sections:before { - content: "\E919"; } - -.icon-server:before { - content: "\E91A"; } - -.icon-shuffle:before { - content: "\E91B"; } - -.icon-skip:before { - content: "\E91C"; } - -.icon-soundcloud:before { - content: "\E91D"; } - -.icon-speaker:before { - content: "\E91E"; } - -.icon-speaker-group:before { - content: "\E91F"; } - -.icon-spotify:before { - content: "\E920"; } - -.icon-star:before { - content: "\E921"; } - -.icon-stop:before { - content: "\E922"; } - -/** -* Material icons -**/ @font-face { font-family: 'Material Icons'; font-style: normal; @@ -3999,31 +3864,206 @@ input[type="submit"] { /* For IE6-8 */ src: local("Material Icons"), local("MaterialIcons-Regular"), url(data:application/font-woff2;base64,d09GMgABAAAAAL+EAA8AAAACKzwAAL8nAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbEByB6m4GYACKRAgEEQgKhrgAhOoNC5BqAAE2AiQDkG4EIAWCegcgW9i6cYGNTeWYWW9WJTZx5/+lBcptJ9zO7BcS/cMV7NiLwMYBMLYTVNn//+cllTE0DTNtARGn6vYPcreRFa2vfWw9jEzIp2QiZu7DJLQ3dCTe9AiyiZxCa7h2DGQ2oZkQddTNZphKHBcZK7/poY24XFSiEpWoRCUrmYdOnPt9r6Ytb1Lvvfd+mr6458DUAzmmCRNwXGGCyIgIWatjjDiYM30SXpT0UguRb/nfy4+SpHUpb/tvZX9WmJKKxPXK+oMKtaBqtQwo49aDkbTHlSdf8n/nHr+vTZqLSVMYsUTjJgzKHb8zBQSKURGBAoAP+LPpZ4DHA3L5rIwLmUByuSk7pq6urZ7GrCGrdI2uchWup2x9v2ZUhtIDWl6HLse56neRiEbEI6KwyfwmWC2K+jE+e/YdU5DkBxVQiC4VC+SuItxVFApP5cNGMUl2UTiEp13aTOg6UXq5A98aZ7O+iG7b59eqUKdGnRoh1C4NdWq8yzT75Vo+tKwqVKWpkXUSgHZ29oHylKMc7VPmJgXATV3682UacVo7Lt06DAsAuZbiU9ghP+tEkLuD599HHrZFGEgamEdBYMWF2eRmCqUSFxzf4Y/nc7NBEQhnfsgPEI6EgEDeC8gVVMDkA+FKQK7/PpcKcmkSFQ8uz//XWgXbbW2bsEBbr578tLWH1q7Yht5bxdZ2Cd3tNtput4e4xu2urdvu1izl+foMbH2FUinVdjNBtVmHEHP6KdURMF+8viIwIn0R2N/5Nyn4jUgicj/AZICOdgXSCpxI/+edWn+v/fBe6WFpsLusWEWwldIAJ/aFJPppouno51f6lc7+xU4Kw+Uh6hQX2g5RbO+bPu6C+UPlfS2HdAgFKza2yXD+nJ3zCK6svn9PoN4YPXeeHNSbOwes2dAdowLuQRWrAs2BfeAE6oCTR9Sf3zz2wIIbK/xQTq2Zfc7ccyQZWjZKgZYDtrwIiTuaaeMjV9vV5yt/7a8gsHxxTIEFNpVwNyBpDjgH+eHB0RofHBjhH/5wf3p4X7jV5yQ4gZdFEng4lv3v+y3bhHPJrqRKVBEKhzE7mysN5t0bY/n2RwMKHE63qujzb6pWiyFNLeGIzdyL8kVpo3SpzrHaqpr/ZwDM/4MPYv7wQ4MBQSOIMoIozQwICQBFmQBBmKK490AQlENIWm5KACj6GCQfAVvOubpcOdKXQi7KLffa+urmyiuvqq+q7/dNLVv+i5Sj5JTlGIouok+hM64oHfX45r/lPL4ZkPRooZ0dDSxpSOxqdboQO/4ZHjCc3TNErQ4gh7RBDilA4u45pS5WKXQuylQZrnLl0rWLyq2LpnBpF2VtHqL7pvNsJ/oHSJhuQqGWXScGlEgO4S0sgXmWLUvc2o/MCZADBLqvtkqnVm3jz+IOmd847j1gL+MEoAmA/j9VrVbQLjdEXfZ1G2K5V1T33G1VXxmJP4MZYQYfsAYkJQGSAynJMulIWg6RGAy1IMhNWm8KWZLtC/JeCLlpc2qv6K5pztwM/wzkFh3ElkMkBHkyd5i7F37/b3afFvZw9v5WraoxLyIiRkTkxhjV9/nu+f89/zOzz/Pe2V/38RxLVS1VUVVRURERUbH9/7V86jDHTJ/HRRCBKAqxhl3tajV2H2urjcqzcAVzEIbUx+uWsVER4eV7WBhFmbAxvf+ROfuvV8/emLZFq1SRpRtERiDZLySR+5slLUUiXLJaimIuybo6Mbk6InZqkuxva6EjWWV748A2CBEIfnaA/Hrrpo0eeKgC744AIf9PsaOkVKiTapc4Kb2q/FL9aqo060/ZXO7TetvKNOM7Jq7yQpWjaUnTdy1Tm8O3Ht4m28kMPD+wECZJoSV2dQ7HiiaGSEg0ymoZhSHAB6me2Xb60HH2yfQoujnOQyGw+XaJ3fOuImlsknk9U4I4uym+rxhcY7BoZnJ9+P6Z907n6w/lZI4UjC804+QT5TsNJiM2CwIQBICNAelralEXtYtkCg8sqzRqnVyWTQdlSpqcweiMxBAgUQCOCEAkHB0KjqSJhGMhAo6IRRIDnumEQ2HLQqmgJtRMBjxmr6vHUx1RaIRuCJlr9QLDrb2sWqSgE5WFa1NPa2IMm3PEBB8F5Yf3SrtQTbAhPYKCQAm5dYHsKHHZbZ0RPCAF2TYxgypx+esZLGhRNLIxBZLJjEve95A2FfOrZiVRMwCECHHA2tMJS7x1E0iaAEdLBIoQ+EglLObDwxE9TAqT4oK0Igbwbhqo4Hd/xguNr3GEqRgATLaxflMJNMQ1eYg/g6ux1tTkxGqvjwNgcQGrhCbYTB5I3T4YeA0FuhBKw7VnVHLfFe6CaEtsfS2q7lGhL0Wzj5UkrlY5XksyR7l+RESmBFu+RXF/RMHcca7EpGq8voRfFUpuTLgz/1ZBf3YgNqGKjhlFQ68SiwF9YT0Jh0IV4bWjTY/Y1mjjgjTGpMQ+yf7ZSaBK1IKM+eNE/T3ub0J3161sEcJUnDjCTWnXdopHEpzc0DvfYONNx/fBdDyIaNOltetPAhY4nregr2fbRuVeyEQbEbnZDNJ1oe3UnfPFwXFK7091cbSFtLwdHSd0yK4f9fFdOdm5YvFAc6U20kTaaiQC0NXWgIzMJo9q8BQbnNOsIT1dXLDA13rCVx7zW6zd2qAxfiSSI7UxUY/WZ3K86nKhsEzRd8yt/oUnWvMzJgeh+yEw3wfAnVDMTOdwECYWgjgJOKIZeWdW5yiJRjyIsm5GYmrO9RKtIFozveks0J1xbWkTnBML1BHj37ADVe0AVDIevxwNbwQbYCIQrpyAbumE6Y//+IqagyfD2ejzBsiq4o3BpAi+B5yYqKHP7YeaHW3TCarwNRS31GbWXTA8wK1k6+BSLjUuHj3naPT4eEZCylbwqhL+w5zmNS+g9WOKbONgqwh9h43KOVphZW90otiXqdyOT9GVfhOT5N8KLZdJhNyvFzm4i3/c1GN22uCyb8nkc64R1m1cYoYeIGE4QMAvQ0FJ1CdVWrYvysnU2mCVLhPpsPHYmAXbLjw6saOJ8d5H88+hxuHUxekPDUQaAZyqyp5YV4wcv8Zqw/8OMbaDirVjxIvAikIxIxjB+R+iRyFpCKS8mw9sFn7AmQVlcAi8ls9/SiJ2LhESjxU+JAXuLCqyPIixpRHbE8b9xpwa5wGAcxvx4LjdkALG4PrcsVPFaFAElpr2c3RsaJpTvRLnmuppelKoANkCVpN+Psog6lp7nOWSoIWrY5z3t2Am59iIGnm5Cmh3hpjZQwD9sAO2PoFNMAsFPKuacJMgKm1ySqz3836ngihb7A0Mg447L4GMd75M8sqE4GCYHRwOn2C1FrjuKFsiGke1eHtXZAvvimj+XcHm3hXe7ArMryBDvawDCMqoldUVjX+jesMQogGO1fXDLKXHxmGTuHEc9EA6/CexgILdN/GHOb56xKoUBbAmmMJm63xGlQdF1cE0bqb5CzOjqNN8kmoP8FJeNP4Kpj0rjiwRM7M1mTbVq7Chcp0pMPcfGJOtBUF5hr4lBEefj0TbAkheJSLRpkGnen7OORjE/JkaA1hv8D4vsBkOsaeSVeJRNvhSfkpT+twj7AYNe29eiTe8lMB5WtnjySlI+m9hmfN+lWQY6Tkd6IaQDMSQBvewLUY+ZV4rvdUHqdESdaI4E8+fufUSa+1k7m5XvYb7ox+fuj58DqY1ZmgkW0gwIDitHKQRHZ0GkQOEDCsIhuAIAfNOzFhXi8RIKhBJ5K55ZFEp++i3VuewNS0HHWmbvGzCy46ZIucwdvqAq4SdCHxGrVR1WWZltk5nqFnngX2/v2po96fFbZXV7FB32WSajzhZGdystgtcJnLacjmZCPG7wksVAZ5qU+HEu1ZTox9CHRKcpRrBwEQZED92BrZVQ8Sa8n2GFViL+gFnmTvojIR6svEm4IxLK25AByHROUjPVCzHD0HqqY3Qw5yfgUhIJClo821HFMY7eK9foohUSZ9UEVYLyKLDBm4wsNpwQIoEweFRHF4qVG21K5zPQTDpzDhEG9Ht9cgXe7YFp1lpUk/lJu31jMDoFZxY/ZQu4kSbjpq5M//wQbyjsYWT6C4pmdf6svHk1DhOTox5RZPAIFU4E1i5CzJreQU6T6Er2BFxeE4ZpF0Q7uE9qy9gyOXtPeLPmhImMsGeAlhEr2wXfRaGQ4kUHhbQZgE52tRuh5rgN8ghUGOH9h5TRpzEcOYEIn7iiF7SFweo2QDsCUabtYSpdnKOHBN0PadANTe43Vm10oyJcWkxdB51A50dIXRjHdKMmt4GUVxq2gWxXYSJhmDeY6Qvtp1cR5oqSauJRRP9wada+wLOJ6L1Bc7BhcFNopmcifNmelu4E+w1P9hmDce8irLIjZN7e0+xORxr6Nb8x3HXcOJiTShO6liB2zJvDzc6Z/KWaCOPwAk8c7s4w9fVlGJe3u/DcahFTTOWYQ5Nk5Zhz1DgUtQ/XWCGhyMRWP/iBLBwFBYIePoomMSxth/vGMqqwrnnSbVeQDd0urN6dxaP5D1EC2UMqsOwtUjIS3PK4GFQICb35jFwMtZxObiHMmr1JWm0FJA41tR39ugOYubN8B7AsJyO03fuCn3ePsINzlwDsAcFT4AHd7+ocln6qkVjujStOIAIEVk8fBxw/yncAZeS3pHuJZTvHFvQg41jn8KsOe6E3prc5MZ07GiUVp8EjS8v5VmOPd9uPsqq2Uj9jUO1aU9Rehns1Ga1FsqaFC2JybbgEMaIp9xldtJgRmzTv43VHuBojO9vqjebLXHUs2Yg3gzDyVrdN9QQH+AM4RLJLV5QlZqwI9m9NPhpSJinYiLI7jyK+eDZYO2cQ7zQ2saA38tdd/fQu1qJ1iGtFTcW4qhfOxRtR3alQC9OU2tizjCLSmsO76osvDVWSPd+QMIIRluKL47Uhm/16SHAXlXjxLnJORlgiKdHiNamQMxbLiT9Po7SImvXNODYbVcU2zLWUBDETOBpoXAn8lGwnO/7Ty1slqCJHE3Tu3bnnqtqkyPraMNfOsSTLcSRBL+1uzkt9yLEJ0ZKEsUOfLTqheuH4+2Bu80j/1eZIJsReT5osbQhmkGsijFbcx62sh/vCivhLcP6XIHZPdRtjmJWRq3LytUu0dNY/zgt0y2evff1O0MzR4gnzQZor4w3Ldx5/d/v8fXen0/IaiQB7h2lg3mzKyW5aXsueODS8jy4UJbrvSyWC0sot3uvUkGA7Le8VDx5AN/fcjzSqTvsrO9tRJqg6fWh+dptTNvrEskDZ2Xg3uCEInb2OJRt12Bv0jSvSvH2LMOJpJi6sZMWXKgO7Hnp7wwX+GJwAgcbHNtwuxgGOqQYH4f9SfN5hT2T8zYZZZP+k68iP7UlVoh6BdOmGUXpMbySM/4Dl+e+rmwcVRzxtiz/HkYaaY2TnqXIpSnnq9JtsuuqqSCYR3qMJzxsxkPjzvng+FVCUi72Jbzkl/Yyr39tBUCcBUsEqy23um+bUSp844J/3jitYhK3ZsAurjQPHYtVuh7Oq+wGzPpwNw4YaNuALeoq3qlwO5gJflvmU4NckZRF8IDQ7T4+7uTuYugVnwMfsHi/dRjgfUoOTbKz3HZWXKZZ1NKytaK6XCveK0Ps4q3F2d1nIvtwuZBNceOwC33D95XeiaTI2bzA3tJa4GftHqBRkzndsLACe1MXSG2WEc0NgxsJVLnvnWYMXbB5wf6DrlQZ/9pPY3dFewm+pdsF9Z2SjI5RZaTaPgqMuHyl44ljUOqsnQELJmxLceSbJ7ICqN7hqZ1TTrQXTO3/9xc76fc655zI7XfWAOLxp0eDZ6fYjWuL3hpom4O71uFkja7zg6mjS6wzWnc4eXj726feOT64Lt/j08RVsoAUI4JRuY1jRi7YUCCUIYjLJcTYprK2rR4zKq6JSrW/uqpCZ7Vb195w81W60J1Cy50uzThbECvoPYlnP+BDwtJnKkzvzq3hg9f5aSdh45kqlkUV9ur1+lRJxbTbDYtdGIcuxSNPpRA28zmOhhqIMpbrBcph0y2SSBDsZ1HRurtF4E3z66F2d9hknohvFuPSFuA3lrikU1d9kT6pVWZUCcuT7qqaaRzJB9O68kHpBLWNN5YI/Q0IV0Ys6SGoqk9PCbQkC8UqYRzQ4CZlJYkqaFb8VnLJ8E2FJdirlE2OxYo2YTvGPb2vYo+SPsTR7uB3r8dRFmEToueaLA6HTPAsg7xk1HU4ecblU2yD03gUwQwUNZqZbQjZpG8SN5w8erRnGoUWSkWZCbdN427dAewbHif0pQF0eu/52qFx2hDBflzqWRempfPtHj1tWUcGVsw+/EyhCZICfdzKD0LFFT7f40rdulsi7ddaixsBfj/WfTQx9l6ShG9lM0zvHQWUqva7t5j0ZUCvLJoapRqJWyxiS6BQxIMe8Kwn4ka0SFpf/z7BwCQqCEM411ZUT83LyPt4OwHidFbki7wiE1PQqGaanBnaSRjBuLvt/akZA9zNbo8sS0K32lSTwARLWyRRYNbmefdPqwWmEA/nu9OYa7wXyX+J8yyaBxGmeOTTGPVF08EjQ9VoOB7PB+XdSdVDjBTSsQ+bfI2auXnYvrSUUQoEPaiDx1FYktZbbGkW6K95y5Ar8L6A9QPJ+A5/wPQ+o3Z2a8EM+9HaNpyGaVNTD/1wljcq4aT3kKLZyYe8FbDIl/79pgLSnLdnCMnKELu9u2qhC7F33RWdO+ondWit5NvfgjzVzeUdya7fkegywGVuproc81kX+Tze+dcy9MsEk6f29rVSLVOTRiPrwLzZtfvy+N7cyDvr9eVU6S833IldybP1xQXCaF1bEDLP7rs3aBc4if2uWvrPMCm/2e//vEASZYKr+C+JR0fGGmasxbY47LonvpUhR2JOOOXU2YNlYvHGwckMKhWqrjhjveNZHnERgNb5NaHvWBSeWb6xvPuMh4S9/ZbsvgGJyg/I3/cDBX5Znq/ycC0Y1H57/8DgXY4Z/nNRpCb3zuT+U/KBykaMW8KowbOF1Jc9WCZHuCjeFT5wWtWfmy27D71izYSwJ0Wilr/51Q7lf6uP5onJ9FUi9YQ7mfzT9mW+idY46qFv1SDWZDMt2v/Zx0GNuNdsfgoIsmEc3hEfxdHesYd5j0xDIMpBgRKDymR1uZaaUc7CzEQgXSG0PpSImDQXnrSQXAdam4yCoDeNa9oRcEAnx0pTdqRB8TdYcpMdJdu+CYaxVYxMUk85OzvFA6aGv0Y1oNtdIQKUm8o0uQvnBuFviwSyiAznqRw547ZxvGElT/tpWhYHQnp9ymrhC/y8OSgA5FrlDiGAr0tKO7brTxLkelR69QjsPrOTE2OjR9kzg/x1LpZy+HRnucX2e+zfMPXC8TDOxCNHeHQHDpvh7A1NY9R61JZjkmcuLb3c2dYW8gM1C42OM8MBEzvLgIvtBZdGG0v29dY5xUV52GJ4Ma3b9MzEhtwV90i1od7puxsauS7hQobSlmVSI+VUP/Lzju+pgLKnuF5oQlnTNhoyFRrgsoFELFqaMeVifcDz5UlbV08mNUVOrj+auXudlRurFw1bkFak3rU1JNMx/ZVzzIjMeGrmOEnO2uAHCNlVHodLz7FG1DTyeKP91xIL8JY7uTGQba8sJUK/82gjLHN8fL8piDPNYLV2KjYHM5Xqr+CqZN/02HmqIpJuV577JjZdvELlM9N4vuZfgVgJ/hx+ZlGe3B8OerdmOKR4Gf6BopUIb/MMpHhl/BvylCVEcFHss9ZKreKVkjQ4e4EpB7ybx0eLEpPEf1bFDDs8bg4Szz4lTOdmY2xszlBuUbwiaj3PFpUKjWkzkIu6VmxcuX4YT05dOzg2ueJ4v/Nv4P7g20dfuXz+wV8fn7VJZBbIIr7kw7OVfNwk+U0exuWEAIAY8YDIU6HFSpuZWW0VVwlD1bgNJaBza7rfgKOsMhk2lMyOZOK9YKGfpjYKCDuv5FncBAwlTeqtKvMbzIfAk9rbM8RUiRM90dN6iZVyiajMeiPI0yXB9muFEdfIUgSyKan4FSJmtXWTsh4v7XnrNwIKKre0wa3un+6sIB3e8Bb1G5klyddx5NRv1EtWPmeTFeezbtyXrhjryZpppNBA/zb34QCDgKp/MPRd0pno/Kpfnwy3Q3Ai1SBaFT/GRBO0N+SezESMVtlwqlsGXmqV3QDudX7RIRyysUgtSt7kQyPXwqA/vUWuvgoqhwfjfAaOwcmayxiUJgfkYgwCpwmIhVFyNEAax2PtvOnYYxet1/OOW/tD4GKoNziNNrL403jbKMIugUnlcF47/H6GMvJYPnUTbAALAu8NrIQMmyXnEHf9Q/tkJBYsAE4jgyCJoStl+50Oe2DAYmY3NJD6wLVo8sRnyRk99+/Xt4bTMs4DBqU0kIrw7A19kbPN61aPEeDLmjBGnY77ylOG1diQtJkLyLgiBAPn1CrRSiDe+40tU+nUBdLwBB3nhDcIGvnY+wwo0zZ1kU6QhPzQGdPXVE9akqmiudJ6N0EXcFWMtKQ+USU4qkJxgXJHtjkVstBay+cPGg0DSX4IdLmiPzUSD8jZWtMu4F6g+jKqCDiEsBX4AFNcbD/hFdf+8yeaEgIB28cV9ClpteFU0tywGpLX28shPiEql0+xof1DL1cj32KpR3ueaEXhvw8SAU4bm17s+kf5Mf1JHz/7ZpS/DR5JAMBKDJ5nuv4T6cpy8+1235/pFHNO6aSoARHFgseeFC1OsLkkRhQKJlpFVhyL2iZqq3Lgm6QWVGfOUzQcq9EcvbBPhf4edyhsaMBRwUoKUlZ7oclzabnS5cB9nIlaeMfxmie5L7BX713ztLPBWQisQapprFALB8HMk2TKtsenLDzoYM88G3IH3+9mJ3jzckwzVMhuQwrwN490fQ3KkB3M9UWjjfU2VwURrjhj76jvDjSIkgiywQf8hHzQ1+lki31X0eIB45GZdejfnhU5GTYlXMQNZJKx1D2gQwAaZtyXZAJ2uAE2N+PxGRjgdA6LuYDuzEjtxqEhAxyotWaJnKVNHAJUkaLUVcmiXxo3jZjof8SLCLGtWcPutfe25TBsrkVsa87wyJdUj9AINrauZc6MRaoX8pBGy609dxCQm7oWqvnbBwrYAHQp0496wqbD/Sm3ecoZnGVGNKvpFZZwVQOsGXmrISOFqtHqwnOQYlYsL6BXQBBUtMzdwRFsGS/LvbrbWh1A+oKIX3cLg9lomdPetQKJZl4+mei8fOYQ7KM8YMiMpzjd0eNXBUm7eJf00lzGBfQ+vUUfr4GWRGY6TzigKczAgISjh1tkz3FHQmpYmXam1X1ZONGeLyzgq9Fs5gobuALaWePjAPv21YksLGRO8tuTxgB9mURAHO+k23KXx2glmjpBdhwM5bt1O9vcga4bvufvxu/EqHQ6idaQaPMvMr6j7Uh3K5aWA7U2mtNzBYPTIGoSM3kmK01WNREBDyEzVEsEeC1HnqpIDBDkEz98xEm294JgZLotlvkcUXICTUSgCdT5jyBwiyveE/ALAbRDjNXNVVBxihBLdCmV5IRUSn2dXbBeegnZl/nfrzhSeTWMCk93phputnUOurpOBW5GdqRjDmAqk5DrLwHfQ8zmzfmMqpwU0HGxOQSoHKrTZBKuxD0z3ygJpwrDMLQhVi6cUrzvW9/rjQ3hEKn0O2e+g961l3akzzC6JaB37GG8ktDoG/m3Y9Vrh+mSYDxKl2+J323hP/pp7QOUFSea+9C5nNZcjsuCOPyn8YTmPNXo2AgDnYX/NIwxhOKaFHGWEZ4fD0xZc8UThZHPmpCgHz+qVGhRfZ1tx3BOtGMmZMYiu9UnF5qK0DY4rqraFpOr9JGr9nYj45e9p55W4uk5R79zv4uCWG2VclNdxumRD4fQXorbZPUakgluJMih4UZ7xeN0ZdjHHUmFI9RE3P1xosdofD6co0QNT65GPAV94cJ8IOho+58WvweCiQ6VsaSbs/mVFKWT+CVAe6JtBxeizZ1KYN0dJUaMUvbZNXj+KVMfBhgY62yto7ebJieDno9ZknK6nnleA4U6k6Xgybk+ITfW4Yh8iTPlMeHjjA8BmChGxCd5ns2RXk2GGlx3KJ42vAHFonucH6doBVaro9T9LOaSAQOBv7W5SlhPN5Cx7EthInP3c/HxS0vA5a+9K1Et34uKEjow9S9tKXq9M9lDgdJ7ZXdqnxi94acK/ZocPSAEeu8mLtuIa3hQ2jjsi6Rq7L1yiQRY4vgIKwdLyKTnwcD0OVJwdUviOUPX8YtFggjJMp8DoS3khSc5rt+rkkylkJowjgJyOocmbrPCNVA4ZAC6tWlsZQSs5K2nC0raz1nZla1MLfzOelCP1tWy0Rf4fqbqXkeExnqPWxHOyLnQ9pC8Td7Yv7pkqptHQ7ZC8AzsjfGCUE+fuuWmhOw5bmFy9fRR0jx6LMtqhKvpAJrJ9WNKdjr7rlU8miBFpJwgixiUSCWQo+IQ5YUj0fjIHvPCF5g4an1sE36BADQWcushTgr9AencizR0oUN9kyThSAFZBXKqnAAXSK9CRt76ehGHFfhBEU9pCBEmtnPJXPUTpLOrzyYGGTq3DU86iPYWr7FZ5Ms9jN8BAoAkUSqFI2tHplRnn3nLDqM67IgWpipZ++7CVNa+CM9hkfY0FsUoPMDhX8JQCoevO71l+Hvz+K+w/rJlloGsNNMWpz22WoNFakBxBjjo2nnAM/b5qjJSvXgb4hj+RsvbKXUkPZdCkYtGOg5hqzR618qVjryoXMJxuK5hVIRj2dT368xiCx32qhVIOkf78verXzxzCM5Rn8DMqXBNA0OsslcVBWK5O5aNfJXsV4IuJrMsfZ4S0VqtdVReYk6TviTRwMAB2IHKxCUqqzTwqkapfyjRE8I9Sy0Ngwrb1SLUR8GgthNJP9Q1u48JHI+ZgGrCbB5ufbIpydPqhj4wYBjaLjalvBHZxu+fisXZ1aTNNUwKJEMidjQiVTD/PJwVu14bM3o7UH3wPYliDuKAgXLayIX0IGse2RJnZVSkvRbKII+7vpBX6ER5QjrNzpnEDnMB9pMMl2yIYV6NuZP/oXECVVA33m4e5FEvJyfEpCm4BlHaOhd4bq1pcOAyvBZYgEY88DnqnpQ2mZTQoZZI2sHr0Cvspgd0suqqF38RYl4/S7A0H2Tb3qLjcIZXg5J96Q/wrTHY2nxHVyDPe7PsTxpro4wCGuHJY9ORl7hcyPf6qENIMozBifKe5I0P7JtfflqTrq8RFH3ULDMN7NDkyR8acvgaO5DN8SxOo3KYafovMTf/V9Qc6P9mJwpC25BwpIXk3z3RvM+eK3XsWqtG71vij/bfcPa+b9IVfDTf6YyYxwTiJusUcx2VT2bkDRTMOZJH2LuBd5m32t7bb69eWlTek6o+tn/mQ057wkc5B0eey5PfmSpeuPTCS+/w4nXv5Y2vvP6Elzzziz72hg+efMnTr9pvdbPMwtZr3+iSbe3W0raW93nN5jv8MPb3PvPV7/3ia7/9Bz6qnx3rgEQwbq1HUWxYUkAKqo2meifKP+gIQ60dDcVKJfyPFlhu6pWAldOX7yL5XT41X7YGkVQd1ELMPUJsRg1VFBPHIksBXRMsGcOnpLxYw29EW7rtJL6HJSeHLfSoS3RhstvquE5oW0w0U1yhth2kTLAV0Jpkl3uPtvATQZPdKZf4KtzDppfQ7kmKpznIRYVsaUxM/aRXubLuhy8aVUo1SLyET1PKE9Y6RMJxRkeiOTWqoPVDfjkBlKypxEXH+nigG6veA9pWlLwbzMJylLHD7hL1H6ACDfmrswOVfpyLNYOOD+OZezS8UZgDHOdSzbzja5ar6n5+qSjeJ4fm2bg0p0RctE1X45VcBVfBWYl2Peq5GdpN/Mxmj4JoHR8lf6SRF8WP9N2hJ2T0eX/a1Nylm3sM3Gpk33Dlu8uhc+vjHSErKUmMtnwE42lJqmpepxL5KNrNsOXiipQN4/Xg9+uX2GGcdtpU+aViFdinvH1zeNV54rhazZkVFT56wIqd5aXADjFgEwWzxoKpQQ33ilsIdEBdkJTn440Rp6ngJtGL06W/YdxeRZsvNtGsR4H8OOrJKVGMRb/J15PfJAgXZWpxO9ZHGQha0qKMZScc80InhdUJzck/VYpnjhkdFEkQvrtmbiinzFjk4mr5ys4s6K9aTYYcV5n1T1MmySwujp08ScH1/+o+JB9SM8HzOVYLxfTha09LU305YglxfcfweHQpejuE8Jjp27BboII38g/H6F7+S1rOUUstRYBrGdWnMHnj5BPkq+Zu5GyTLTi8DI008cEc0eY4iUZsL/u6wnLmhSPpVPWUEPVmLGLbR2QCpjzcjk0DoQkenTFuJKvWnH8yTUaBh4X7cWzqlYyY3rAVnWF3YGpEF+ISz7AIWS2dWBB68idcQsYgKO8tZOLB7w+fpFLjvMzo/Af+2jzcTrOb74NCsQa0aNX4fxCYnuTbm0ei10QRpC7rgLTnPTxBNQymIJosYipEGGlMrdlCPz8RHs90qgjVqTlQy0JW1bFy22LDlS9LmHANwRbWDWmuZpyapM6R1QeNALXaUZiTD/DYLheEhdl2KVoLIBj54jCxg9K5uUbIsEq2P4VbHjSkA6hDp7RiLp7pHY7qTa2NQ/jWmrg6RS0PsSjPtXk0gtkVuqbKI6d63WJQpNZWaKWKpTJWpwcef4N/EWdTQNGx2a6dFeghuSLyVwJYTKm2G9MljEXhHfmAWTSecYU/K6gacNDBOwx+gjeZocnbvp6L/ITlneDNPeeO34+dJw5/blOQYObR7gvSjcuEAEcwgjxdEFZKRD0WFYK2RrRfDZb0MHsoluioakGPmar+W4P3m01dMJx+zsElxoDmZ6L9OSXGf5EnwNKxM7XHPzpCcL4K8VvPsGf1ecvxjwi0pfD3GEcRgKbsMsBi5zxi4CtS2yslKSB3UNlaGgDLLwoX0AEFXlPkSKHwsTzJblBLG8hBzYkhpoczEkmeCsqHn9gzfrfXye/RzNig8urPoNJrOBGq0PImKWRqeJWm0vSjMDmz9Kd1aFgfNzXe4dNM2zjaAH3qECO3IwhB3Lei1+gff6OwPf8JoTDdFyn0q/PE6EQYOrs3B63HW9YMaC1uGvcD+j3dBxu2fO+7tclfYW9YGeOGyoptMH6+LaVVsaPvFzcBI6xYmJal2T5saV7NxI34mZ1BtgB11FIgqTrSjvNOV/QqwZGXDw3QvAs/VxCgUlFiHaeyOUNgBpOKqVTeB2x9umgjYFBcOb+HI6I8NLYv9/JPRv6FWqdrzpX9TO5/1nFO3a/mbpZbtQM06pYSim0OWHLyXG5Ux/e25s3uy21LmfzdB2UUZL7hjFlOzXX/5xVTsBHZLqtPdna22yO1bZvv3ZahhhpuvJkOHSIabG6X8o6ldCQ0xV31O/qiWKstPoSaGz/SMdlnOb/j904UX8TRY/3HU5dMNdEON30LEs24VL3o0HZVe3xDPu7ffDCf49YUktYu+tu8r3iNdzRgxhw0pNltiM8V25fF/ajC+I7KJ4q44dkKb3l8AO6OshjnI3Uxw3WptDco3LeFveQKYJS5vI2LuJ8Q0piacdSIzUMZRUUdxB66rzPbR5Bg7y+1SJDhqF28kwStpHENXeerePIcRTEXo5GFc0krFCt6yfPkNAaEHPJE3BJOkn1ySrE/hk3HDem1UjVYTO9g86lQa5xg4StcEYqOqc2Yl6J94mzUQM5AWvTgAqqNhHCtg/3Q6UH4HM1L0/TipKwaSgbT1hOymLInYhYgYKSajNhCKGm1CW+TazS1eiV3RHUhqJ61u8IrIEjLaC72GQyqz1kGQfEFzAFzrvsi9czKWqQ6WCXL1C9zpZXn3hL8+TX9WWyydY577Fcs3lSzhkIevjUm0/3mkiH+9wqO7GiOfpwTWF/iT/ElR9EvqSjm22XOVQfpYqod4X58iHrIjqgWTtKnyH80tEdvGiHakRq0KQDNhhHf0RqZEOngHTr4J/60bakvrpbKbtiNvNP866FkUjiUqo+6NTbVPkhPF6f9nprl4bYKqpVcG3S9IPUbUG92olBBtCXj9uIjUwFt5ZdUEhMSDCeh0+nIlF3QVfmeMvE9O3zMYddaXL895SlYp4ft9bL9u98GjOxh+4zDKHjDgDy3SKbJD5nXUpYsWAfqceZa6Fn/QSAu+OvlSZme5pvEgCIOtWDuHki2u8tdQOiFHICZC/zs5vQkJyzVNgzdP7wwgLzCKlr3FJYkA14v+E17Dr89xRf4jLBpHTNpVFP1f/0q1mn7tnHpRodfLVv1eu/TbS7J2ueVbWFIf52ppsoVyS1LxrLnBhKQTCo6clhNEwNcxIdNCWdyak8xXMIj/ABikBvzPbzC23Cu/Cqsr0JnNzurmSmY/fM17W/1vk9/9E8QJXHHxK1c6Abv8us2iTrsozfiyq/+1by6XxQgbNl4ARriSSGDLPIognAGRWzO4UTHtKdT9eEOPsGAYJoXs4u34WzVKqwn6zOsrdfZkzmr511a2ea+x/515OJFc+e71k0e9Bs+T4KrHH+Gla/orf1/LSek7N9SRyjQRUCKifopCrK509WuNNewjdoRDWpVKJVuCi0HzrzviQ8/tLzFbeEtrIVGPaNYv/uX21VKR1prpYRiqqxs+N7nFnjM+7PPfOqqT3w8MnRswQefSQhnpLRQJkwGcu30FREXsUGcGBDwHnBrRVP2QAA1XcCwBCBYswUMewASM8ic/5Ca1eciIE+MDGVyzGixEM7ZkHnJFi0ptGZdsU3v61JONAJOYswrVuGjevW+a7Pmx2r76x6KgwPHlB57JgnGKU38y1NELM9TTv6Qeet22LRjz2q/FOhAnuHMcYGHj9rv0JJ1TAOMV5x656f4WM7RBbEkzykIWk6Ycm3kQiBcSKonI0GbNSf1CS6JwyWzt7DR8al1G/7rhRd+VU0/+tHfq59LSf8ZvP1lCv/Gn/mu+C/f7Y9DmR1z1GmnbLveRe71oCs97KzrPOddd3nfB16Ij/K9eDXfj10+s8dhXzvqZj+vbi17cwJu90B9UubjDTIf73GJ+9x/3cDe38r9xGzhU5ckrf/XT9jWbHsET0r0DcnUJ1k7M5+pqrker9z7/2g9NwxgDY+iBfu8BUvIxIsdAtYUUfxmgnzBERxaZG9ynyBfXG4YrJEK/IHmzFm43XCVZNPvKMnk8oPyG5jRfAZAYprezagNBV8Nsv6WFEIrLeZjkwbuJhVAyy+AU73gJLKoGDqBanudm6BQ+Yw5hTvSAVRY53PPENPNSLWmxgZ57PDwv53syisqN5ziklCalWjDa7DHRF8JnFsCzJWSGguecmCPhMhsAmgNNCE4YXIDlvUJCXAzbQtfi6BARQLSDq3b25WmJ8R7snLEnDTF3+OHnihCjA2ZM7MaFVaIzikrGS+UkvyeQHZQ2H2iKGzgGiICxdQGmqHPl4RBgEGfkgyuLDFKyfNxUWxz/Fp1bqRjL7T+mCTvIcsa8wqNllaSJiwNhWtYA0zBUYYkr0APBZUbK/IUeGKqD++x11O2Bmbl4Xg3xFGBw6qDyWYOYLMBj1BXxb4rl7ymYgEjOkjz52D7QtRWmjdAGjN6T4tjShxXcSEx5yVIEw9enahVXSoDGwhdRol3oAge3Elj6FWlr74XijZPqMeUaDgaPK9k30faOI8yJjKEfsiQBc0W6T10eCHdVcwS4hSaaR9n2D2iYHTfGsxUJn1pBOmJZNdQENtcKdKaaPNBZym00SW/THbA0KeoeTcTgDCevIsCnSM3jhFoPZI8huTzFq/RPaYpDCe/Ui5C5ZX/KKWVSCdQCCkpBT3BsbS0SoQzWdBK0WLqIl0V7z5Yapi9PRaWSFF6UCApXBwS2h7MwxJTGqk/09770/976Ke0SU007QM9vak1w+wWCUCOgkzOhkgGZs8R34HuYq1AGDxYipcjpuYdUVvUzljmGBvl9qQUVCAtPC0otxrsdUAcPKwo0U6qRduGpQfPabJabq7Hi2AwNYBJMvBAxTNx5nlO65HonIdzGwjl4N+KsCPlYM9tQiWNr/sdfjgs7a3JCjIzGQkcmYZmRXMPb6U5tPv06ImSsfEgN4OpGpiWvywCIeSZxB4oRSIDayjnizjlxJqIiZEgztUuuM4bTeNlq9itrZqJF8LZILViUgL9YaNy9kjFj3ZThEtUSC91dtRvVqBLt+krekoNZ6WWiR9xMNIqwZCYvYk0xKlSkc5Bd+K8yeOvnuyCvrzCXBq4cXUEN242DMWCa44l5bBrSi4937lVwWylT9x8bCxjChk1Mb+43r7D8IewjO9tx/eVQCcdo2kpnIkjkq6c+w26bTHxp6oi1qATUUQcF7GWmsgSHpxbNkdBs6zg0wsU6lILsDYMQHq4T/B9v+8LUk3hjTHM7vAa7oPx9bJQFvUBH91AWuYZMzk7R/lA0nknOjaIMXpHwMpUXh91w6GSlymQFExWlPBKwAoL/7seRWauSxoDcVoE2YNu1ru0EW6qZ7IoZFEioaDv2zv9wtLM1kgPE41tcjLeXO5iwYMq1H0ONgGum6/gBy+Ix3IiBrzyFWytSfRKZLRmJ2bRrOwzFaX+cI6KtbGjyDnf5Iq5pVKBCbt46LlcBcyD5MlLDHu6qWVPCG14qPurrSOkrF3yJTUqL93K/Ebd2FQuFkkuaxQNsC+nfJNjgS6xQtXhwcHf4JQujSoXRetga6JZgrhw8UZPOZekApf2MqwFE8x4WqKMM32VSy06nkgos77vWUTuwku4W8zRAxJr0P3eL23mQ2DEK1cMw8ronnC2lRpL5okCM5cwPs12YJLDUSZE6iFcxLp1SecbGA/r4r/ob69pBSGuac5WLyose+XG0bOBPS2OwJmg5ShOybrAD3HjnHj000ttSJ6LexF12Li4iF7IxVWJPmcFTshnZ8tdQibT7dkgQg8krvmxoMDzCd6jV66T18nLWBFP7QAez0St1VrNHdX4XoR4zzs9DHQ/GTSXDVYUzdXK7SCzHRIg2izsueFtuSx5wsxBQTnxjHLScmYONKiV8vlGPzOfhXZW62NPw947fXc7Y+QFfHKlccxoFqaOs7gs65tDvECVKVQID+w6pJeUmIrrT68MbeikfLEBSq0TMFLK0DuInsJrybD2GzEEg0cUNmdJS0zcTkcXPdQJbrYdj4oDCpC0m3GaTrtgojRFrMwsxHJF2eqrVkDqwpXdyerb5mX3si9zJOwJHX0lvV3hn2ioJKetafOpu5iWidOMUz5Dy5GzEMTldQbvwzsaarXK93rgDSgiXHDnLm9QQ1Ssq26GWuvkURpPmTA/ZTHoo0alyhtf9Qxo2Ync1HzDaLtEICsVOwzzV+bMqMZXYAUZkN1lCwuIOzXkmcLifrWmTMSDQA4BJIFNObFJ/WnSJUfNFfi6F7GUhGRyziDyNmUJaH4eYdszMArlV2nV18sarl2XiclFi+DR2ceAD1mbYt+whcteczYjo/eZrUPLlCdmwvkcY1lwgPHcI3vwzHkkb0O0LBJMW/RJqL80xfRPywGyzslzyQcgNW2dLfSTbbTTFcAJ5DMgyc4zR60zf/01uEuks4IU0smC92v52aufoO8TxCWjay1II+7iDpJhRQMJ3WVWpsE7XdeQJBoND6oXZT1cH4dKWBtx+LU69h1jAI3Hy/o58VK11lzFnLT7VWxsC4gNEJw1ja8OXEl5lkrWu3X0uE2Crkk2hICsq21+G7YMbNwI8ukv/bafa4FnzlrthjiiW4g+jC4Mn6Z0W5vym9aPfhNeJjOp3Rvzj3IRfno78q3TdB1tTiheZXhn1aSzmabKPcjebGqslZ3VEk+YEr/Xrpja1ZKAi8Twgu8CxF1Xe1R3i5aKj1LGb7vfDs+1YrGQpw8ztW++A3NwCjMrdivyxvdfA2kPD4I3ir+ao0xo/th9hpvcMG4SHhIZEiiO/WMdFkEVlaIWZVQFxV++E5yBgLnSBCSdXVWkiHvMqB0IcBJL8QiWvUYHcGsIAy7a9S6vuvBJeBYvE3Xttn1w27/atZ26Vwvqg3K/2i1E8WrpR8oigc99jEOPC8FRI7sKDGuBiB4GKsgk62cTD2nlAIuLrfZh5Ww4HYpa3usOKEUbNVUXDsoergIFDPIN52Xl0YHF0zRToaa6N8g8/cpd6U0DzU1PEWZTXeQ7NeNH732dfVssRqOSz9Y9aMUuUf7p3Kr609Q2hKhDSFN/sWB+ZfbHox+lXRMZflnJdGDk2qcVvSACrmzSUQX5EZjOL99y0joEJ9S1H0qpWk2K4AgQ3h6hceoVXalGUMpxYwgoopH9bhCWw3rp1Z2QaK/KschOX5haOLK6g5L6TS1ZHuY3o3KpBk3ZzpNzlBSteqxrhPAmOTrguDQCb/pA84+Pf4DYtjuNHqToLWziUypitIV5t2fuGlXJbvAlxcK1uiQ/LrTnWdwganIjG0euKNgiU61oAjK2H5xUxd1GurLRQHUUVEYmCTKxQYCKMnAC/tSkGNRHtTEO6fd0wAueExkGENYv/3/rcW1UH9hL2QPCNKiJ5egHxtBINcm5nMN5TXy8anIj5QY16rd4AOaAQBiiCmaEhPtZQwWZYkGFEhFXbWQ6CTRpzpA828olshg+USWQpWSKDKJ2XoeuSyxobrBYpOVp2AjayQn3wZAb8ocOSV0++oeyHF0DFiILYTgxgiipsepirg01ukE66GAAAyfRtnaBbI8JmKw7D8Z7RyJlbxjdLV7HZziFxPraSX64AM9pDIyQbb6MduFQ27Kn1t4sSBk/yyueRQQ/Ek00/K5TYA0547RoWaEAqIHS2WTaSM3lAiSi5m0fZdvESttoCylPpdSjCH4CzaAx4iRvfeSaFTgUxYcyqHmIhDiA/rwdFUTnkD0vAKU8VXAwn+RqHguCAeEvcDdLKdi2yIGZxSa4g3pwAuzHn9DUpPshXawDqAzPAywCEUniZSWOU8ZMg76Nbemn1dEXQYvWM9C6GsKHRte9ci9c1epes+ZgfcnPNnAO5jrhZsXL/zQQinGrUTI8pc0PJlQm5TYsCdoMGtLGDYQIl0OMYdlFcrvoRt50jjqJkVrI+dU9U5a5TLLuBKGz6JknM6+LJGNbTqlZI0XFZAJDCABmP9RuFTgccsqJZN1BA9mADVNCHpe2R7FuzZ4j6kn+NygLE0ugwXXVrrAg1YByV2NroTFfbD7AMJ8Qi3XBPnfoYaXV68Zm+KEeg3zZoBECXIBNZx5K/G9EuE/u7cM4nIk/vghu2/OTuds/89ePoFdf8vdn1F8e0ae+FGdQvKJujkGOuviP0DzJ6jnd5KVRqQxxYr5Wl/Xy4KYKHENdWF6vzVxemglOr0P90GFq47TUsV8R53p7/4K0xBiJrXj1ULazB3XWadMqppOdVdSTyVWGtRPFM6NqQyptGHJbzYfa72bnRtDkzEuoAnW+RrDlb92jLimEOrkkfVupLoCCrOeculwe1BTxG6NvkwXT3M14UG6nuN1bWk6pK8FSx1mLFUe0t1pcQ+HJBk+nVB7dppAZulOtXo5B4bdACEGQ0jp7hRAIhmCgKehwMmsYlwCz2r6BFkh37eLU30KAzZLONNefgrjlJulWXZiS6goAkHlrDO954tuPomxAD9n/51h3L/zpOVsoBuoI5xQOUmm2rjtEVIzauxpixjiI2RQr33n6ZMv1WrjBAO11YKiro/JVxPL16HA3/nP+Gux/y1qODSTXBut1NaoMMzrVJewvNtTIlgeEeN3ILotIsli9irEb2FqeiNo5iO5f6l6tW2/bkQGdXvntunWESVEkBdZdvx6jNIPG5N/Nk2NR4pi0Td0MrGe8igB64/ZZU5noHjdaJZffTJaBsxPd2whN7ekW82mPR60vJVrNqE/KPHRG3TlqpMkSxD6R6K2IL2yeqCXx5mRwYtmOf1YsTVG8nD+wh41xirG5OpB8tOMnn8annklHa2JD0W4tLVeH3A+VBSiiNw5Vlfd8ro3o+2qhNT0do5jr1nNWAOECpn1gm2dKkxoCKDt2MT9p9lWCYrfaR5FhCDCjncqDeg/AGdehfK3SSRG/7XEMAnG4rihqoEExXQ7M4YuQmgZDBdGpgOKGWWXzRhD4CccwOzeLRiYt17QDUiw36usAlbvrY3JVIEU8kX7jRzDmTu3iYscX7JzaU/k1uxCOqKaW7L/WdamJPplw5IxDYnbHtwN3BnLKkac8X9FqXs2HBwNl2pfSvpKcA//TQb8vZX1p0nVIznZth5MrAa2pK+GHiK/DFxxL9exzhQOPi7BeFzNOzqwHB1fw7mvvVzyYRzHI2uQGK/KHJSz+J+R1mav3OPyt15Lz7FjUDZjLK/qNIsX2GyzWCUsAs+tUGqv7B0JJ4fhkRBJ4CcFPI3aFMgeiXwEoBohqu75vEATbXBCyAUVVQWDyXirypBVlPLnWrYmp6Wiqv81uPD2KxKoXqwxkTU9jh6nPl10kCnUW+RmEu2iABsf1EFaSyvjJz/ca+QL7oV4cVa/ssSC/W/38IL/RmManQC8J52tXAA2Y4PNk/SoCN18lfBw0QueEknUUz0lHbybzbTFBl4EbA2CpwKyXauQMLxeyS4LiFRzcsLQ0bAWznr4y6xdClel1RJdMcyMOE6lMuIrVkmB+EruvKUun11hR5Ncf3gDLTrZG57jjbMghaJBvKVOSlbpWD4aUayboNo4Fbao/64wuDzikK91FZFxBzWa9P+7Gncqx3YY/p/4B2MleoxO32ja51JAW+/bvXYXcTeat1RWzXM9wDGEhhECRwXC6HyS9ySkWelQJs3rn+Pom0GXJktLD8SNwYvPI8gqOZG/6DsetBxho5VviiODDg4e2Eel5p02++Rnxyc7amtKTPRMD4Il/HLIsWu8Vu9gUjiIQ44IM/z8ERws8FoISVvlSGEEHkkD+lofHYw4zQOeyJhhTMXCU9A+HCmRc7wERvUEefVj3ZtUsu6IgZHgMw+KAB6zQAlaBa44M3AzxL5vwA873JMwBYQSCL4S1vT8G3SWatJmVPZwOY7aA8yrhjIOGqbBsIGelTfJpyetQj7zrq3plDUL9IeM5muHtPN5j2TV3d2oD7X2o86oKmWgX9PLDpbhbND3VBEbUFXiJZDgK0UrZjtNtQFCpbiaU85kEjobDuI8FAXLME52nQ4DNERbE41Io+lfZLfbYcHoKqZpCPiRD2kTAG71NxiliW2YEDx3NJKcHQGP2Rdz5tQIlPj4ar7fO7UCtwrESP2hE1l5k0mIFi1mhPg+z3oRsm0ZWbnDEEJY9EzFSEByzlKn4kAFRlXFOqYMa3SO17B5nizt84ug04YJel6yllmThWPTTsEFN4Saq0yV/jT3uUDtMaPKv9WwTp2puAzH1w9smJHW23yre++NsOOw/4Os/jAHQdJtJJCzVrDlXakeorPbxJq73YFcyICLdCILUpTh7uRB+If125KDrDM3c3/wGi2MKERCJJF3eHwdx1mqUGaUI2vKOsBdMcD8KuiuY6eb15vorDVdQDyQdU2BTyY1DQsApJwIvjXlN5OEoW4JzSBu+4CepCY+VQBMmWVQIl5Pnh5x32jplDYuMSuYkIYndqzGFhA+ptNKSfhv6jv18663aFO0dB8ZMNhJez64CJM0GNMeilcX1Tr23CGEo2hwzmiu0u8qIQP18YcqH8UtPrbg3deFwc2WDYnA4+K542PfZ5nK2emQ+IVpbXLB9KWmSigOiE+BZhtg3ZXD8jvOBiU+F1xz8Tu9aWRE1GnlyLzMeOzLgSss7SiMzJHk4x1J8LEoGL8epV0t2TOlUbP/lqWdKbV1O21HVsHpXpckNysnV6BpWyII8Xy1WKmxcGzk1IYFEi+AMgNFViCz0CKfZ4DUHBvHjvCpKmIq8QTgs2o7eTlQPazAnkYZBrnIzaUCLICyKsG2EVDHOwHLU5UBevlIYYZL+cwFxBcZkBjG/yjLWVVVk/HKYTbfgEB0WJVQ9iXnsHHUTP5bk5A9mjcjW1s1b0SsRvkssorfnnvWcGFlE+4+z+C0cwziGC2NHecNNAzV4qU+D78XTapA/G/76xfzKLWuYz41rIwOZW7vkt+zA96c1vh1oHupK0vMDxF2Fo7oh4Mxqqv9fB3SPuSvzelXsow5qpTSHsIAEh2w+5ydoDSggYRCSpmuaS8MUYARrsNyZVzc8YmuAe8v4N4YM/rJ+1B7ddEUAIU4zrK8WN6MdSrBQPwQgYVzx7Eju/4LeMQGfwYQEFqwTJeNjZF7C/K6jGvtq3k+WsalS9yS2iHoibCZ+x8gqlkKnzdygnKluHKA5r50HWNqOD+DbLMVefYCTM81OBzi4AAg/HB3Dz+PoQbw6kvwqyPDBOHoBDS6khXGqc2EjmI8EyIJMZIqhZHF0jmLWoKNtrqJgeRpgblvCEc5tLcIXcjiwgB8ln3tx/D3wn+GfcEOdCqHXDSnK93pOYwjyE+fqYznSsz+bly1EYw1jdWxfqyEeRJ6FtiI7yYj8FrE2WopWNRTHDh/naJMbbn8n24tp84BugL63MqTmZtN06PxgAiycCCzNUvEW4WzzAEhVGtRJlBjkIJs1HpXbfW44b77wHKmIV9AlAmRsWyIcIgkgb4Hf5/RMCDDu381AoEBw2CCM8JM9w5HVsBbYPjXhc+IYr8jwqkQ7teQDhqMYbJuP13vF6IlIkvWo+/DqY5EJuekWXptkNu8o19lsYUSnY904HQq7l1yDE55n8wVh3r81dLZtPLu5OSP/DP/U8/5C/XwXJv9NaNBQAQz1iy5Mk05ea3fu2CNP3q3Ite34/7OQ1meNPA7kZYloFzY9uQ3SoTMhSZxKnVkR/tXvaUhP7dEb1Jfo4M4hUIOahMfp6ID6r8oEgzKao+2MrNDDvfgezojHVTRNAdqD4DwLSOVRAbrhppoWLeqJ6MCYG9mM0e7AhBBBC52KSB8tKQSo/75SBr4gxM1pCh1j/zlcQhPlZNhLszWS3MTQ+zsI2S8MMxOrUEG4Kb0dhJepe3JpxRCocKUVID2tF/0u8xP0EjHmAPVKEio9eA6h9XHkO0CsnsPpTPopZwqnIwKOeJsmodsbCesbzADYWO6z7WVimSQbYa8VUf3zwTOgeIGSgo0KeT/kL+JwpFkkSJApLbcdB5oK5785UybiNHNwPjlRuB53cnx0i6kaUcIySqDlZ4GUVccRxycPkW+XMgoSTQubszGC3cZUzUfxK68iAcyOjFtQyC7H0MsG8H/DBBWzJe4iIQRkYFVStxEmqOQfXJISw8peLTanQaMxhXf36/DPQSE41EQxAVezCopsCJ6B53GQDx2mA5RTmm/Uza6gPINtHc9xo8bMO+ZCJAQFlSyIjphmaGP12hscGO0G64M9OJYNslG73/Lhe9nRSLk/qZicivcaBdq9zPSkp25AnYkpRSKeQwwS/aoemU8Sz6h9qsMBDLJfaTAOlZ7enym1pI+ITRgYNP7kbNCpA1hOO56g5L5wXhZeYx1zr/Jx9XBLUR+b0Ah9DCPeT0rufhwYJv/UQi26tH+xy/YqBejd6HEU7sdLIcTGzgBtgZPP1oNAeBh+JOz7soIxOmxmM6KvL1J1iW8Y6+at68F6qly9oNAwpAMGHckCHIsq0WIG0sFLBKaEAKFpHcRtnqVoS6gV7iHgVi+R5ZaoiWLPMqO5hT8V5yu0XCPLIYANQAgIWX+43NiPUqm8OxHqiMFhVMsFtqbwRONig+PKMLjeDMe1TxmE9lJcekBt/Lb95OBEoOIJsqLj3SXEYJnNOjGYkSK1hOCRrUClmMGQeqint4YQipaKkayhNbBGaoyDcMjr15aGzjgbfr5FdblbcH7Vnhv+uaPYgud7VYMk7Oy1lLY03soiFxFzag/HK9eXoYI6rhTNuFfur6zcLqxPFYpARiMUhS/GIjAB37UKHIsq+ex9v8ZZp1L1TOKEIZ9UVJoIgkrzeCx/Al7DoQYtLkc/RfAnXW21BplmPVkEpzarD7gAhEKeiDRWJsmtlM/97MVI8UcRTkXIMglr3ENWDb3QBPecwLPd+7h4RabIeAxmQJ6k3nCmEvpjOVwA5gDhRQgNmjbfZAt3w1m87JsIVXvDoYkSo2OP7ULKqNWDse01RSnJNQxugXa+WVHTDCQw+IvCUE7nwFXvr6DV/AZ5+PzcTEQVVtGuiiKk7eSpXVKC4aFmuDrb0LFZEGKHWA1Cw3MZXJyxnQbf9efSOM4IwxEKzz2E6+e8aLyLUdVw2HsGHAHnP2EQyvBj5kGTwFKy8ELgiiuVOjzusxu1jViL1uWhr/AIAsPY+uA7aAVWy4vriJlat6aUA7z1XeT+5XC6i2gNK4gGGF2KxK9b6MCToZobX2Lk/Z8WYieBwk+PwzKMXkrhOSf0eAyM0rH9y3NHzl69cOlr3cFZ4l9KGYT287JfptknKq8biHNPHuXHr/hOz4iSnRNNv92Y+vZWcXPHGS7Q7kw8nsklPE3Trg5dHXRElgWY35Gu/8h/1ssNRL0hf158SWzWL4mM5XLkSicgqseBC7bGyT8OZZV9w5EWqHNh7lBaOCSPwwo0WeUGbnX1P9gSBAyj4NznGKZNyJF0eER39ObcLJ0HApP25sM3HQZBC6AXIvvCOfZF0IzjHGQqcOa/uka6csqoJpVm5AiyEOUFHtGUDXeJVydWjgMNvnYz90SyPqGdSBWB6a24eIPGYJtUm5yqa0mK3GgBStYzmOqucopP4XAvfB6vLZ6AS0acg2aC8XF59DNDIEsoz36BicZNXZY9emsGe2ez3Gsj8ecFE9B+rlDJDwJ6inf9zoN+Y6mLDeRgXqn6QjhDz5NM90MGzaFZn/Wv6YSPovNRMW4PUFbvJMuknet3cIzXkj6EvIoIUmq9eAeIJsjY5WSNbvMocaZr8pUWjnRT6gBjy8QhVpnwToDclCwDirRrSK5BkTI2ObsCoCLnEEe/e7YuzGYnHy2qCix0kpiVaKcAKemZmptBF5sUDXxNJLAD31/P+Zth/FXM30LDE0U+We2hh4Cgk2OCqgalpEBkdq4dXB4Vk5mHw06ztmPnjf3q+BB+rrBml+Ok7yTBPYJGiFpJKVDqWyDpzvgJBaMLu4EmJZgUvkMYd9zoJVj8sPAtnWvE5oPG43PuNMmELue33FxzDVz3250hXev8+P7RfP7pEX/rOH7p+RFhl6Wa6Eeff2FKu/VTiy5fgrdEK521UV80LcXuX3Vv481TfcmDuBNfuAUSX6mj4mZkfgB9H+zt5W5PD2QXgHSopjjkKWf3kMmJAo87uShngOlert0qMSCUKNG+N+dsm5Ue5J2dF7CwNOcHDFmM+wzcLS8NwEw3h4vYY2lyYxQmyNqzqMH47SAcFfxH4uxIEQSpmIUBA8a5c67e7isgYJEy967GLgSax2kyubUHrmlvvTUT1YT9ijmVIRw6TOYPIhM9lQ0JUqIC8PJz7XX9MgXiL4e6Nn7rKjwAUstWxSoyqHFlajU7z5qaRJsoq0XrnkRO5c5HjyN4gKi0nTwedop5hz0/MQrbYrrJGPSGAY2PXc+daxeGGUOmwKW+TPErjBcISycSUu/9bJbEWQ5dEOl6aDmwSDtmFQnoRgImr41xopUogBkTWasP0LzzBGoxGMm/aW+YMZJzd7GkldEEu/hY1KXNxqfVm7Pi3Zjj77UusV01XsR0H5IXrJ8Nwiyqe3AtpW+H3R1CeEWZGJvaM2P4e7FSQLO/tJ6vAgmmB0jRweFEjZG+b37asAMqvk2csp6coiVKR1IBAiWcWSnGkTIhQykIUH+wB2ST3OmXShlNpnFZTpviFnEbeRJVNt6pmcLkUMGWgPDbUYJIBPwZeapf5h/rTL8rtVjlHlYNSoEob6GM2z174pDCmi+dCaohBuMiX5JHJachWO0Db3tDKKJkA4hHBCS7GTN+ec80Rtf9Yhpnv7p3cOy+X4fP1/+SfTKs+au1U+fgjrePfcjgiccKuHM2xBxHBxkq7xapOg+pegVTRmPGpkvpJIsHIhtGhbOWNROilxFdUUM2zlda+JY4pzVxlMY1fYT6vJ5f/17duqyfmL37P3gmvpAGH7Lj8dz2MX4+hl6cNl9L4lMT9JyW/+ECpxOqtsUE3w+KcCfcHpXiEfJvXVbh0ply65QjeJvxNeNq/8OmTSRu5Z5ZvoQj/v5glcWQeUd4f4rsd317yKg3TKIKg3mQ69W5g3gFrPpzLGdlz88xOxN//2yidIrDt2adY4ZlAntW60Cu1rrSUPw1Vj4TcUujVED39yw+k9w0bL0z8IKDONUP8TIQnud91yRvQFz2gchNKTPedae5Ko/mKftoTLzmBMbdmdFe9ANgrl0fnTckF0dNEQmYflEPxtx5XRna1zNk/g5ov4yZd+J+XJ8g9noexAWQ9fBT6nUvy2UWOopoIrpleD+4s4Ezav+7HbMlBYGe9EvAuSxC4IHMvJV4xNmrzZsrvc9lpWuEXTwjAU91Wfg8pzdNjTCnglz9BPU9bIalBTjXCWCuG5ChGdfeyJImQ4GYal8EcRwwYJSxYIuVNa8bpbzeRVZnXXBVdDlyx5JdyCog7iJkuQJGutmAJbtE0HRz5YJfIeEgQ6Mo0apDf0/wEwH95HdNDjezSWKh/gT/Ai6ne2Nxm7CO2l/QfLEMBNRCRhbI9ItzdJLEFlaKM1Abb1YHiGCI2FknqdHxAl5OtCe1T2syvxR3cjfI04MIOZ1oq0w6q6ffT1FvTu/sWI9HVvtXY60cBFMD1DGnliOU/oi6boMzVPFhOC0x7Njxj00uMWYdGYKEH6YQ7EBJFG3bgFvUP0++f9/UxMzsJH3i8W1bXn9sa9peTh7kQ7M/T/7Yo1u2vfnEdt20b356cnZm8kxqQI3wpmhtDpyv3KC5/x652BUchnEfyJQGEIbrJURO/pnI59uGlQ8ynnRCuiu/BfATJiIV+Gtvio0a2WnjiWen5AfdO2nUcqw+KUgYW4AKcwwghubGH/SGbkxRO2tkBC45KHg+qVnITL4YOSuYLBFQ9OnKldcmFTs4Vbr6xxh42NQClZE3xBC8S6THOoqcYiCgxWNerIRGsUdNDQuCsXDNt/0r4IrP2oks8JPLr/b65ZkYpUofOIWOx7W5wC41hyPzP3LAAdn+s2zJ5JCNfQgwVg8kzt1n58y3ztM+Vq7MsHeAMfn5LZbq3NRqP/etHTDupo96mnrbcV7vGVWT2t5gXKlGpX8FPoj2uV4KfuJ7xfa7d7BDVb3VDvoN2/z5t+2Z2Vac352ZGMRHFQ3jSHFI5ARkJtnYJj4uOqVTiEh3tIsUjXOrCk8GoeCYkWGoYk9yIShZ+NDto/gN9iJJwGnKVu/wvQ3bl/ZKjetJZ0pkLl8VhrkHOqzHEF8lEgG4FM4AJcvy/6X5NVpmN8AhKGVSuIShorJJwKKsM+ku9kdGFTVFc46CT4O/Yi+SqhcRxIDjMVENeQEKjiacA3FZ1w4Z3+gD3oilLC+hy0g3rLKxQbB9RjnPqHewcc8wk5LBfzmMYz8P+lXNHfkFe7f6fwpBGbkROrq5wgglJ20uBaw/z0glDekY0d6Y5jnMsCleYEbDQVVv2REclSVL2066IgOiJy93AkTBXg889MekV7Av2JKw6Eyfgtu1MTNXao16Zt0TAvy/whWusveIRZoa4xr1ivubPvG11hPXguj8XbGLNc1gGRgL9QhOwP9b9lmOwys9s2sMmkLa9B0ian4iqoJ1RspepLesprpg5bqJBimdVSfUZNXzQ6Jw9T4DTZXZVSZrqjTekW0fUDeKYMMG7zadaGYa/qubSG1iX5J1j9CJWRYSjEiaKGFgF6HHl94pA6cvDkIP1SBAPkX5Tq0KluacixSf78CLQQqw5xk3dHYE+YiVKBre4rZefQdhDFRJ8+SXOFUv/gRf8hO0nZAap5jF//qXZNUjJE+9JTAOmZ0hM9wT07pF8CTAqNhKyT4FZCi7jBBO9yamDNl4Ft1iQliK+mY3YihuQvLkbdyH9+9hTNY1814DtaVSFOmAkIjD8qDwBVXPUS4YscIkaFIvhngPjOG+TsZWPV76IIQSNEux+0qDMtDLLs6ox0s96Klmpb08tbKFEmpTm3nPnQefZBG28mIT2fO7Js9ux+KRGMu9j3W3htDCqsf3TrrJSF7rj2chaDQS0AlvpuArnA32Auga00aF6DjOgvVLStnabvLUALbX2yCh/B+LdgieWsccvwXhla+9DvVZWvH7OUIKSWhmN9HEL+YHq47gR333J1W/BHy207QVDjGX+xpJVpn6fEDmyUIbxR1h0NvBQSnGw+FRDBnk1iqW5Ytv/gxZQDvIaj8GSubq/6sC47iUZeV6nz8Pm0ESNkAdvbp1qYaOHLbONfnzSFOf62HtnrK404gmL2uqP9VlPZYZlUX7RST4UgkTZZm+U7s1MmckKVsobBoBwJIEncEzJ0GI8JqAThfu5ArHHjqPowDsmeyCGdSMWM8vMZjKklNSMz6hp+055AzWZhvUlNRsYuQGvd2sSbrMyOIsCWjBQ3tKddjaoGVfRw7mqKlo2zydVEmcEMHAC/lXeqvHeS+JF8810lcmnoVxdWg6lxGiPK84f5ynvI36iBs5nZtHXD7NRQ7XS1MihqfGoXLGlYDsuRWQGYNuuifgeit7BjO4nafkGbAmaXty3PmFCcczx+xF36lBkX0yFuTQMrdAM84gdn8DsqbXXTuNPN3uLBBGpipekQmKp+s9qJYe+h7E79860b5Lsv5N2yZ43WUC3K/gGe/FXRoz7ZHGcMpkgKGVEu5mkY87tSNZnvputaQXlBQ7nE7BJYX17VAsAep9f6WFLxK1lbV6aA9Svin5IWeM3beKR+D94KsDMk53j8H8r/jCFG4SnM3o91JAL+L3+aw2acfBUaNrHbVsTYbGIm22ACnQZIvA0EUWjinrJMdFim3AQQC9PPH4GIKXl4N/V+9e/3z84BrlA0UZBKbUy9+59PjNr/uP3qDr5++3etdy/4LrB1/SL9cLkHZpMfvLhBo8T/DRthm/XmpeN4mPhTMY16hi6K06gM9ZX6pj/VhZn3w7A66bpkZG1U8JdqKXxeek2eFr8P67qvFXftBYj/+I3y9+3Ptecj9qm2N/xKb8kpOdR5yqd4Fl/94VtN/VpoXuoFdtWuN25yoy+N8is7XqqyUXdD9npKUJ6yHStbUhN/+v3G6G99ij5C7ZLW7QUSQwwb+KwH+oF9vX64Vir5FfsPFvjPaoohRYbMCYTr6hcUvNCb99/0G33GzzQD7dzJdGb/58OB38MNYtt1faWQ0msNg+SRAk7VCB5MUD7qcF5tkup29ELed5KqtrlnYW5CDvwnxmiiBCmdEYRXWAzRXoHS6/LK2Nl7rzZFDOe/m8sbUMosXl6NruVBlOR7Yqo3ZRWKy6yqTMFrQ4JFEu01tRnwmNzDTBuUVK4TlEtBX3qAo6vPFa8mn49OP5amS3vD2S7nho16zvo4zq923yyoo0h0Mla4xGpcg+Gf+cRkX4UPOmA78SYUH4F9ILg1OXEd8THPTsZ8nvlF6ZouD1Fh8RF1oysthbrvMuckbVHp6S9YLzArkrx2Vjm17Ake3JteMZHJqW7wjJbtL4Swf7X11lLuOi8CvAneM5v/4+EJR/GVftIBRQyHBjbH7wKB5GX1uLdblXU/0LzDJXQv1kh+u2Q1twF2BvWu3z4oj62QP0oojRy3To7A2sPn90Jpa3q5uAy/v2X6NpS76C19Y+DmxZuhBOR0mSmlaO767fAIedHK0zsnioCytC4xZPMDVzhKQnRMFup7mcYlcS386UvD7IsYz6JhfqGjdcjiU8KBk9ryvZOi9MxkfDwL+6SBrEYfmCe6unAiArfuhm1r7xxXiFcrXLxaE/4WQSh8EZcQIMpgr7EuE+6adntLxBeAQIZ24sSAjXHvvaOo+2i13L2KxQhcqQqU6IZQoIMWpGiteoNWOV55lI62erSvs2Mc5l9fGObdKb4LDy3RCsfNuVwOLIRT+XeZXy4Lnca+SnBclG6WP9BHzhdRImqYWq37FsR2ojqr7S3BfUgRflzfoEejGM9SJxPvW0+jmGrHQxqgOEmmANtqRwTbGKCXiCW/6xk64X26DcLBEat/J7RJRcRmHe2w3cbmlzQutnpSPi4jayR1QmEAgOqLSPjn9ARiVbD1JVVahlWWg67sO+njwxkatPSs64mIVnqHBc2WrfbC0ULtFGF0idMZRzEkMPEGMgVUXdqzp9z9EkeIzCAPY4f0N/K6aX4vl9XgvG5UjAh2wryxe9+M8ZdXPx8tGQ35h0w3t4vHav8FlrwfI6HLVTO7B007nVmp1+0cpes6suQqBnD+ptdr0VqZq6hxapUnN9TJQPzlEmOXd4VHY8xigs8xU0y/daA1/KA1k3a75LQiyFfM7+e+kZog9UP/fCyuNp6CkGI82pB8Wg0JwkcMEOLJsxe6X8RpnHxL9gRFzQbrI/Aorof7wbj1uJ6yjCg2hJN3pqWG8AA80SEAyoBHOOMRXPbUNr1IbmmJjq3KTUb7S8vyc1PPWzLn4KqA/M2VwyH3j+afVzi5AHo5FSYcuf1HSt6DekUr7QidMTX/bCoszej1oXo83asyvhxIXwfmcxbnmON5vbQAwypSLQlTlQoKazQSohCmLlDk4mVTeSK9xTL0aWfoee8W7uDwOY50lgdQBhBZZxB2PvbYaNdRbb7U4Yr3O5ChMLMNP8ft6CHNHTcKwpdwzqUme929s32ls/NEs9/qhHyN1YJXORxpYbrlAjbaXwQjmllABxDOSZ0zXOfZbjO2d4nW1jK7IIUDf+a1cYeS289fX16F2MwStapm0NvpXsxvjAPdoJ+UMMnfgJcQDc2rtWlKj8g78Irr4dtaLvRykM+APMivK0Ya9BjeONoRmLmaxMqcYVLyHqBchTF3D8sp5PMUNk8eoeger3L/I723TPE07zCHGGDhQdiSxEm4OBMH3n1zunlXD1jSNLGKKRHJNvCXNm3rHl3VWBYeBneWniENh0aJRs1VGnSrnRp13JVDm+hqM1Q5U1xiUqQXdKDBewq5oAz4XquyBdYF4WOFffhKlkN4ljXiZDVdBO6kjU79HIm9LlhP5d5OkrnivpQRngIdMtL1tfnk/WEui4Tb/YTqfY8ktdtuPGW8fR8+zF6Ydb4J033jzG+EQt2fpU/PUj+AXj3TffOBrlL3N9vfAsgkcYd1kuzNrsmsxLfkA91QfTdF5CGb1PanQnbDuPJ5bUYjVCZA+4eQcl40dlbRqCiAgYqJ6dFRhoEJQ3uScybto+gG1Gn8aZ5WV2TcJMbnAo0Mo4pvsbs7h7sqLmZpEuw2ZMEC7n00It4WcFPD2pLpiEwhy7iAbqwAI05yxfnbtWhTt4KsrTXEBa0MeVUC4DoR5rLjqkgh7FQ5uysjLomc6AMw+cgaZ4s+dXGElFKk3vOSaHrGMYMGjcbUZvY9E0p3DKE18+xki9azHM5ekGDhFNHaHf45nmRPznA8+1oi7T/ctySAf3jNYs0n2HqQxwUgyFp68Y4QAycbGk9HTMsmRQKPPGz0z6bXBVDCYAYK4ZXHMVWdKuFCR3zIp3NLHq8punyQku62eST21kXl+U2UApeTVFD818SXrjnHK6uGalk830W+WXZPRJwbUPS1nz5XMeueDJx7xLs+SIQy6xL+GMI+UdW8o50llXuexKR102qxz3lYvsAZ33ZbX2kLN9BPHd+OOLtSWznZeqTGLWriw24kwjzVQK1/qXpdiKIccTGCYiQFHL6HGlVIwiHEAqeM9ionvMzQAiA7StCtziW3fUM0CwsTqox3HJ9QXIpTPGuwKH7aBAnzzb5TFhmfj2f7AHaJiRZ+WDzL/1mS+b969g1NPwLIxmKEmBwc1I1/D6XTtwyODp7Kkn7SCpYywGn0VoacukIvuNgnNs1pfHMmHtF9OQLGhOdYRRxmHi7NgmBqzDAEfbgLHDU5YhsPkkLMCpsnYD4XowVrEr04uqXYJ1y6o5ObhM0GmcNwCWVssJD840UieKS8PhwK5XkWdmgUeMdDGAqzBiwMUsFWRSTz8EqEG/9bAOBaN+qGRmLaHgqdOySu0ika3teGbWxPERdp4JPVbo75sxC+Rp1usdMTZz/+x/4EzO0bX25jS6cYYgpev2V5ygmTeAGFFrOyIj0VJpMf7Q5Elcb47zoTrRB/CLwFJeJo89dvEHRRW81fe106cEV1tuZy4ISDDqVM1YWRzc6fWwILwvjqhY30F5s2Z1Mj49AHYVa1C1YRgR1ZZvrtSfzeWMbftDriKXDXyU3a+fw2/k72wXuLSsTK3KekahVbRnO206Z+hy/E3pZEqzB27hJC9nAPOO/ehDprlBZA8JHNzorLsMKKPaNOACIgGXyC74c424NQHp01wPGY5RjDxtXt505Jl/dWrYD0akbbhAhBvsDe6noKh0osH+Gtd8S9l77w1GRpXSv8dfhG+/TVBexSRDAuu02Khg0m82ITjCeTxdvzeuoiNif7MQzIgHIrigl44g2KDYRLWiwf02rwDY/kC3vvHoCkBx4k69507lw3Z6hRSX/pa3D2fQ3wpRAze6v2EIXGHhMGrr7uwSwc9NL0czQvrOQFtwFjD6sWUj24W/3GrgTtX+CnHW5d+HEPz1+DIJRHYM2K/3ctutvhSgnOun85g3yRk2kRMcqcJkBtfFUm5hh0ozkKT2zwCxcXMhmmNnhXdCIZYVZNjcab/XjQpQ9DgUJlwmnWGo9UyKVEoBesOkD/VRB0lYFQq9UxuWW+zGuvxxLSlMo4oICnpsLnYuusRh9/sGv+FKuYqo/mzTZQut5G7iEZ0T1uF0fHIlf7zUUuUpO/NP6jc+21h9kfL23E/RnksTjlnJj4mvL3o15Qkf7Nh3Kjpljrr0jk0t8CC4A1w/DYAM3s6v4a9NcC37AC/Jy7jaQPT8Cik/ufXpJ7c/zduHEtPZJ+u1gpntWM4AZHG9HpNZLIsnozjzlCYkdpnKLTmTI1N7PvXUtX5tN5zeVL4cq8/KfhpDX8oPFfv00ERi7SgzhEmKTALJoyQ60SlCmlWzj8R6GW/oLwyiqNSModRDIOuteXYuuTk8kXm66PSmvZWmfZYs5kgyOQt8mVL9uGbl5oeRX0DOpDxOFcLj8eThdYM1Sje5eDwteVjqTK7y7zqm6Sue9X9/8c4K+fCCE5FWwZoPj63u9DR/rPSyPqbTQtrWzLtDIY/WeIUAzVpL7lf/GvK5rWGxkPyh1Atbdk5fqyUCGR8DVrrWOLPAD/gz8syayyNHsMy+IjiXO9AWkZx5Em/2G0O3kFvOpwz+EX9ruTpN0vqrHn+Z9jvndUp50Udg/yU+mM5IFpfGlGn7cpR616P2VTusS2NoxcK3Vdmqy2GLvSw2JMCwZEP3MlbZa3nEy2C6t96sS8XBiNE2vjXhWEfvCYZhQJ3egYEWbWk++I0wa5YeUiUHml8qGJHpgUEE61sndo5T0qKeQMDL6IK2PaHWdY3Irf8F28QX/lY2osIN440oJ9NGNeouI5ylrCLcN7R40IeDiWdUwMlbWJ55G+j4M76OUw1ECs7rtrAFTDkZ+GbMSBS1VvqFYpZOO18qanpJLeiUq81AKtPGAzdFQvaYo4fXD2vUKE3cmu/nFsCYvtnSZ83VNURlbs/UBgU9c6UXfdiidGRS9jHt7ZvVvHk7yen+XcdVltNbMSqmUl4S8fiwlKcyVKxsJmy9RO6mYzMpy0jt4dtJ+pCr3/BabL6oO13ts3Je9rBl3fN7O+9wbDD0AqZ7GebTNkmbBWWXwx6THuVdcgxMBH+R65U20QbyjGKLNbZp3y+tzWxPi+fQkpa3pGebNNpHN0YpIvCdvYI270PNphzytu0j964O6eNs4W2/NoDJqveKFvxTLlQeAgMc3AXeJuIcQJdhgCzAUvAclr00PtcB+HXXogSLuf1unJM1VKvJCu8IwV2N29zIAoXD/iYaxn2c3Ug1KPNwU6RlqndLIEAkWqQEWkWVvgtOcJs2ltjpbqOaLKtBmJg7VUvt/xucdn589IFNMFSCBQj3ZA90tusPbCmvOxOaw6Oj3JmzZW4DjXTyWNvcl0O1pZaEmumktnMgbTYXPBWgjiCxKxCyxcp4BWTwCQG+V85G/dUKK3CUVOMT+V93lK7qBgE/qpELoqmr9aZRzM+o3cqxqCbiXv796NGPwmkJp61/e6+p78srJX7Rj1vFGuGtpHLz2/vMk9wBYaTkmXkjO7+cyONBestRJV7WSphaX7u4l8fBDrqKquD+ymsFF/Xxpbm8mdoMqmjTc9+EV1PWxtkdTVvshdl4Zhh37X+bKXDgpboAkF/xO4WW3yKIefV5dWNYMNHSHtlEO59TCyouy01asVoaypfyD5CqTxjBbckFPnjU9m59Dbj5H23kO358hKC1J9XRcQWvWs4b11ZRnuRdM63PcVEI6Cn6bmeLvLewwwvVK4vxP46gTp0O5K2LSOpHE/rw3NaNesqpVhlT91zkhVLbjlrQxaO8FCs1cuLpkHprqMF4/EjbKyg2OdFlc31Rqtq2OKpDAE1jP3NrEe+TEMqbKAP14C08RmmU81hdmjiZBEJcGWlLCIWz7KWJ7Tnhw6N1ePAPffsOltOpjUw0ym3QNiF0AK1hUKdk6vrZzqIZBjkMlu/YfOGcgzbWOXU5kaFaYKT0XvE06PTR2X9D+6cu3hVOttd+UFpVOpLry6uX6rKn1PD1MD5k8v8wzlkoF2iKjJIhaV9eXxa0/XAsHQUkaAlGuNT48r5983eBd+HBnp6KRmWoyS1DAsKUAzpwiNOyOewxLjqYEeAGZhikhOVPqP31czFCzNy+PGN9aFRkXkJeZFSosT7v4jxLjWnGQIxslOKoiaXzBBEtixByijRHi7bc3OpLURGyBFlE1KXc6lz4TstmRp8v21w/XBn8/zIq+N0+uszZfxIf6aMiXd/ff/J0j+o7a1YFHDvm3bUzRG/guH0cZ1hV3dSsRddlF/kyMzJArZDMSBjJZQkHxOTRCnUYZnDYoOKbcEnOKNNHTmqSAgSQbCze64UyAMvd5GB7gQtxHAfWYmFBwAQTRPA0TzR2FAGN57RvFlgAikXhjz/rQU87KAz6Ozr8/khV8tmJcpUZipvo7ul8lL3j4vDJYa/J9I76i//tMWqMwilUivy7Q4re93+fvxkZOXKAECPOvNLmzVRHflG4/9T79l2QyjGY+ZWrXVyqVqul9S+lI0xQ67FeLagxxh8tNuY3SZBhWZYwFT09FbnP+xaT9WZzPtrI+ti6MFKnFpjrKytQRWUwFKSuKC1e50Zw0nyiFJRkWUL8L+7oy4dCfWGht8Jgdol78nt5c6k/ehff0yO2tKwPnK+eFbdHsyNISZRSnvc/yh8IJFyW5Zerp+6LAWSCqTGKAwdhhZYwsgchwtjwuzNAGhMSs7mpURIZ6pyzlCIsxgjv/A6KgRzyIF7EAp5nsQcvkvkBX/msHJHBL2QKfztdnmLIZv1hrHbV89sKg9bWSNPLqpIonF5aQ1VnFhYF1QYcZTXSJMxbXFwMdLj43c05UG/fHldSPOKXNUQQcSGCwLKIRcQrY7RJWEfUcD/RXsXxwkEEmG7QRghr+I656ga0Xps+Pzukg+FRupYgwmHuamFZDEmZlAlkk0MbZmb/AOH8rCF/RsuRC7E8i0YshCOQTOJA8RQe60cFRGz985mKX2UjMigHiYv1KKipEiRVlMQVuzSFdOf7aXNjXId1Gc6dBwJGLbLNtBhhcMQhAXB7LpZZeK0H0F5N1IqnaSIm1RGq7O6uqOzpftC9QyXWm822gJ6z6Wx45G+lpTNDQzOzovhOLRgW5g0LO1Dq3bbNC80xn4QMQlaeaxbBkFReYyGtprUWC+k1LWb3Pq5Zd3CbmH472b/9OFzWc1hObmw8c0m1seEMawEQQSnFAS9gD4s5jBYkROYX8U64YQqKjGbyKD1VLPQQ5SP5Bab9yyqoIa74Qt69qikpv1DJYqBWsbq90mux7CLLWjg68L5kgbv7Px127xbLypqCInKkkw7TP3y+QwdZFnCW2Gyca0pUe4baXgCynNV2agWE2+aGS3p6xJmaMd3hjW1txzp8Qu9H++zTeYW1t3RMRNNmU3bLv8QaydK8FdVg3ptKoyLMROhuHaK+KTO/caT6hUWaelNgnOVm5TZykyxeqhHUPNEU6uYOYQ7PM3jeAnL+LtSBnpw2Ww5qXo/f//p+zSvx3b9r0m6LSOn4T3re1rz0NzTdVK69lwLveZRABGaoGWQE24DRwduHC1qn/SMmsFDbbo7veCF9sqxbzRzfFdudnUdXBU6nzLjIkRns8EDrU56ddXtWdBvg1a23xehRUa41OX/0iu5KfMW5/Anjbc62uU/fQQYvLAz8CdU+aJsrfHpPHeaPfj9yQ9sKCQHHZ2/IKifk8BqM2gET4PGDKfcM7k6HtDpxli6gB4YR6uegTxEPpRc9PoiUGUPZVodbIBaH/3ImIgH/v+8K2D5ouEU5juUQEHMwjMtqhrk5jtLnt4cuoSyrw/XUPiIYdbObI0Lf0i3XfaCO48P3LTq1y3bm/ktKC1eQuid/lOr8iEmY7fDQIcJnlkef29sHNYu+XSb8D4DfnMM3+B+eid/5tHmCPU+vEky3bG2iE2YoNNSEDKTcKGXHIrbLogR4dGXgE3QkFWkR1DhOqdZlvKpfzqvpKnmVOpUvUTGRyREWwRKRLL8lG5UpyDMpyMYoJBuVqU5gBsuNmMaQCXZlZ6wl3hLbGW+XXJYQyYyjJZ4IJF4fo4/Xx+p7BKVFb1a+cgrMkYuyERlwwt3jYILVSHfDw7uQywNJZVRSqZz3152pO8sL1CTFu8Y2n0QzWMQLH2WaF5EI8K7PMoLbuL+yfchtsl+3LquEPfc68lbCcfKmfKIM/vMhO2bGlWy+T44ExLPKT4R7YwDmTQ/4p1zUKMXB47IjD4l9F4ExPIc5yCb8Dmdnh58xIhqJiMw7LyrYkePNuY6aGdBfnshSEzIRiwLkGwy4Aqaarlwgz2Vo9/TW3fXB+HvSKZDO73F98K3tXsu3+Fv2jQ2vXTu4oWb/2Q14w8GHk7+1eDO+RU/7fEw2EHqQR9uhK+jY5bAX4i355vh5P735sKAWkLm9rw9HyhZfaA2qOtqi8/ROmBXc3AF7750RGP4VF4dmkZvgWcyL0fMU56yTdw+TtnBo8Ccu+wmY6t3KRMRAVwOf73rm63lRWOTlrNpA7/cv78hWC+rsjjaVmmbUR6lT8brq9PUO+a+c4G026NylpLQgZsOGmIIfwvMhVzoigf4HiDjdbBkdI5djMY+NfocBPWYY/TaKP0KmPa4V43EPQn4kYIGqln2hCK2DXZnEdSVoVfR7sCh4gN+WzEjMcbTT43HScebinqS/Vjx6X2ZHT7Zk8mwRiM2/Vhp19t4RIiMmaJu7NdK5XPLIvbORpSrw5PGg39+962WJ38Ma6ND1LaM87921c5gPrqr0slZgnfO63Q5HF3a5cNfQEPCLYx6UZA0QGEaOPItO9/TAjFOCABfFsQEBQ5J57MJ2DEnjIBeimGWFd40c5g5WxA4/QWJUvxhfMAwdgfCoB+pUFjhSx1YlmlxarPrAFxkzf6rt4VrupAtzGGYKZx6cZXB8fn78fe0ZrxWP+rLa12f7Rt8tSr+uUCjMDIMx7Z9tChvmMVpBkF1hh6JIGLG43nnVybi1Db2nzLzrLRp9p3GT3skUBmDAoo2uF4tW0U10bO1EclniYQlG9KqwRh1hWPamHobpWQDCMmPjyOEYPVvjDMjrUd61a0dGCGXbMDX55029vY/gfIvln8pN4uS3xZXUtaCDvxNFhCC/fl5CiqxCloKok8iemzqaHIY0R2N7l0d4mqUmKExNUsTvJ7Kx9Z6MyuDHxEZ7WZlYWXF3zdQUV5BnSmNUDaow/fY+vfJKcF/Mj6ayNxkDxxmyU0w1tZGxCh/cSOh8f2iISEGfRZVUh8tf+PpfCac0FHA14y8RVTl8mB9DQVJE2k25rXYM7JoZOReysM2+PbxxyS8//kiN53UBL1ZZsW7dCt/k2aKMm//jB57Olvf0iCdOBmRTk9RS6nfynAnTLEpJM1yLKMjKXNtnClvVVWh+4+J8IC7zJa1p2bevZc3X9yq0FT092V9olkpSqBRJtqZFSds+YCVMDQO6gZRfpl7+htWx37w89csASyc2p9Y3pybSk/5GgN3obT56xWbkpsoMURBirdVh++UXxa+/woI7q6ul1yyWrUdsyPZ520vyZsb+vwLb/3il6rXNFbwhWHAJrn3zod7QTyDv8dq6Fqpxz5pM3uHjw94nZg7M3PK1+ajZhgvogIcapQRqglrgnEDBbTrJc4AbE9vTcsZsiswSxplCVVApzlLXRznvYNl5J7o+9oPTDZ/wWo123+r6Q7zBZRANFww3sGEmgDWe9VhXWZkLm3IUOQaOFzSV5eAznWdwDswO1Sw5pjld5DXSHU7Wv1+ShfRsmIRECCiif86Ty2Ds4TwYM5myk6IKZIKdNdlZU4ssZLU6fIVyRbi6PdQfZgmNChsM/VdcJ/dCUVGXZVS8dG5PcTDALRTEmQuu3GgLzeTn55bHxpSUDNoHyMd1lwFv5J879ZfSHuShI8uj1D30JLHq4WUb82RsdMn0wNNFy5bpgpYVPT0wXRJtgj+o3rcFBS5bslGzdJsvCE+Zlpy/XMiJZkfJIAhiMrwJItwioxN0PMHKAIjg/bMBfuzPkvYlxp+MJelpqpoTKwP7ApdK719TYjxjLvg5AAMCewNXn7GYz5wB0aKNI36PaBWtHsYprLOkjlrI2hyp2DpNnLsJhmRaNiLzgD93jMo8KwD5D8Ooe1u/efppcfK+kMeHWoj+G3yQF9c+OKgiazOlwdL+bRR1RBblL8IU2JbeU6eGhlqdJ8bhAGjcsndvyxpDS4vh3Ng774wV7zh+fMfX0WLGZIYYLRfhiq9IK8X4Xt63r0WldqnSeX+L78/+OlVEijIlQlWB4SUr7Mjewsv45S57pSwrurUhNLXMWGZoJffxLo+YYf7OBV3qXPaA+8Hb1zeq5j5FdjTmOZ2gAw1YxOy0n90v32qUWg4zclTTIDrnef3+gCHLT76k1Pl0S4IeC1AQRRgxuPjdnzFAYfPh7cMzc/UXRbhHLVjs9L7qvaB5RNNbSFgW6rN18PxsyljXWMrsMxsEN7HxUqVmzA7K5hSIQOkWMBKig/DC6YKABGHlt/ngCyFtwTPBbSGu4Lbo6JJfe4M4MolFrOXAaXKl2apt7jdn/ISMNj7f5dSZjvY+RjzyqbdcSyoaAcXdin/fDVxEHFeVn6e6C7fNdcsNvlTFDVnk4+NgKKXpYUatgQEz5rAZPfx4VOjuw6FRj79bSTDHgfZZakjyKqnGdNaAkq1HceKM/LOdL1DqMzkICOHSim/ffneb+AZ/ffvGhyiN/z2F92VPIIsX8Y22F6IkhDOerjKqwQ3t8p6hHU5RZVYoFPef00ykToDFfTdvNCINCqYZh4PaJv/TFU53y7+jqO9WFgUCDjELDOKe5LnjJj6MmqA4EOSttbXrLrrbBe8O7qur6yMyQhEZf/3mTcHzrHqQeGbrmT4dOrTUU8Pjnrii2e3sESgCjAiMdQhYcMxjDsO9OOIZ3z3iRPZZEOBE+ZOUc4nQaEzkWf3nP0WUJ9z/LXt8WFRFZ6qSzr/+VH1liORr8tT/VqPDyXp9/jKTNzlhKD65qNIavKymdz40obAq8ONdp5EqNeop6tdvocSGLiDvwR6Oo5v0UxMylFcR2YgMYUlwTnet5ZqO03LxfQV98THdyiMRBaxY9nLBJRNfpY/uzYIalprZ2dqau4ZVLcxSFV02QKoJUEQIlcOLvIBk5a8Va+kCWoBgN0VuF6i2mi3Hmx22GugPKm9sIeG7yBU2SdoVULEMUbtKXeH8OwqsJR6yZx7ZXUfMYlmoH5q3gnWI4oIf+esg1bILToTr/KBFKiKM5isrZXl8nEOYZCrVsq8Kj5odol3rx3xMiqZHcdi9yIgo6XS7wZaDDtE9WGBp66Tb6tctN+h6FtXuidQZPmpFCEECqncRRZlqaQuzynC3tmZ21lLzHXQYm7mFzthCZ/Ij21Tss2sWPnAHD+qNAIYl7wcxHGO13fzvOEmJlblr3OczVx+XdsvG3iR9/B0ax3bpVtbvD0UcwnExKlpy81j4ZlFjNFkRiZqgstJ4Wge35/FpWb4hq2aSshM6sp1kWZpBDAWGEJj8ckJEuceK4gbqP9ZEPhZO5BQIJmCO7ayvX21Blozh+uGMMOT347DVLyERiydnTyASAYNgN9sFoc0leMar7U5kF8FsFHt6RMIuX/6vQhQ1c1AeF38fN9Il6//2fS0KnCwjRVrJkz7TazHBISh++R6x/Nwv1tRqnppoamvEC/3yhoY+X4O+xx41gv7vkNdmR3mHPka8GztzMcuJnQgoMKzbZHfIeQaXz7Fxy9jZZsc67NhuqwNGBgcG6njew2DGFW24Hq0o9agKWYWmIjllw9nqau/Mlq1eeYl/FqcNZBVEbIcyh4mUs1pZUHTY262bV/x7pMWy2Wo2Hwjwc7IjMnxb1u6XTeE2ZNZOQav2hdK90ShR+gQle0JaGLplVCIRRe+Vtnoy9u7fMJV2i6qllih1rn31mymvOKWmIGfb63MKctYNXAoPPOjduu2iV3eWtjkXCSPEqRajbHa25ZbcPKqVF/jfCNgxHLPoxAJe9JedoEpiLT9Sb0ShqDeoHy2xJdSEFD4Bkf9Cl5Tb2ZxfeoqE0q4vtLJBBVA0qhtJ1L8Ut4PNlXSvEUo2dtUzX32l/5XQ1eSGhNveserX/jIhm0ZU5wZtL2bOGYsSiL9k9hWxrk7cs7vujNosr5arTwxO56MDdTalaENl8mefXRuhUWoi4Iz9ziHmD0YITtsGg0cOijbQwY7soo86XSgcSj4bHhX+BECsDyXrIQ5BBPYEHmL80Td5/RC14oDY3f/x0c0JVkuTfzmVo3l5MRopFdmpzdBu1EbOfXTDSENIw8iadjts9wh9euPGzpyP6/A0DWREcSqzPdRhm59aHPSU4ZFT3pUrvdC1y+esBx90h5RP2enuYQzjlUH5I3yTxWu93P31nqWj1S3VhMDSynETcDdrTW7k8rQ3TKM7yivKcREQeDl2GX73jdhaCsEFUPFQ1WnVlPi3FrQ3wbkhizEOpELdyxAI0lY1iR+Mra7q/HYjt4WVXqpp20h9MNNc3bTKwHGNmwVfW5qyFdsfVyrcIQvJEMG5zQQhY713o416S8tef+ENKPtox/aoB8otmLQAgcbJuM0tmZF4JBclgmQuZl2W0OjmAoMJIqVdAgYSjFTVsgRXCi0iuZuXCl5jRk7JTAg+ceUcTI2aGnVIF1Ta0VEatHSXBvFF0TX2xZJMLW8qK3RZePXqD7mcFD33x9UI/zwz7/XGjHA1jd06WfF/v5gU4xZPEv23TQnLfJrPORnMYZaFpDLAYY6fFpHIs5BUKhhxehr2V4RM7ux1UE92GGHvjbCACEqlk0gURSa7Pa7VtMa1Z1NjlBMGUY3wLb4ZII6Po/EUGuedT0Hk5D+DXT/Zx5zszxvXPm9kwZgIYehzfsQ6hte7ImuHh9eGwHpRI48CV4wiXxHqU/ikY5IZ6EYGNZp6RKbwHd5KL6AF1i/ImLQgzJiKZ93nUO/e0aLQPxtWHRZlSmKlk/JDGqZQ95Mw390PvTNTX3+159EjwV3qNlNn/wMT8ZNHDo8pJ/3+CeXk4SNj6sfK814eGf7xx+ERnxfWNL0cNbu9rOOq7MgRvx+RJ4+DYrYjvHcvZj6sjEcBbw+hZ0zkiX0MozSZzoMfzAkoSnW2LVcSZdzSHYHmrARHYYDCp/MpgLdNiy8xgSBcey6cC7kEcPc3BFHkS2Nj46D/mm394tTeixcPHxno7X/9dZCmd/PLxGPQPLvKvP5nPdv0p/UP3Cu0vpf1nrXw3gPr/9TEnm+QZs6N1ahbggZqLuRKCAmZC7EDkfwIq2O8WT4FPH15RhlXWS1WVDT23c0Pfdc117br2Jd/+0jHA2iEEWvkRI516u4Tol/r/mgB6whHczwaMyVPJkS7MlzRCU+WMPWSuifj5RfSLsgTHtQxIjYS2g+LDKIh8FlQyUUVlSKxA5H8PKgVPt09hd6q8+rWmLv8bD+r7mdXWephi395397WwlVdYWxf1tqsiu7uh7q7K1Zk1goWR7ayLSlo1jSRIxATRY8i6tx+LFQzISI2BF87NOx1H5Qa5HTyWtGQESIJCNNPOFtVclF2kX31pZW6Wy23dCtfEtuz9QWLLu/fL05O1NeL+j+LqDZ39N7k40kLK8ZNefqufvJx67HJSdGkGpSut73cbIZomZsMzzMC4ycMx0BPVP8kclvAZMoJTdFUyFK+yoasy+rLksuyGUm1/bbOrwh82OHniuTynSipOkxnMVlB09IVxUWqZ6NS/d2KksSJn7OYFcE4fEVCvvJbWeIPRbS5dVi4v8XCDlFpF0AATaUKEaGSQZFwjcr4hnUjV8A4WRSsC7gE1klVAgA8NhMzvw1kaRABZmJJyYGF+DrCImLCfKAApekiM8wNGfalBSvTHCrqlKZ7/MXv8/MvtL7D09MYLy/wiU5ZdLlOtmhbAg7HMJ81aRQqTpECVMOQmoqbRJ2ppG/ZceCJRUjKHOWRkUtFiM58V97ZJ6pZrVDFVBWhwP0le+ugoMUwL9C2lbM+lslvjDZy+IRsUSrI0eGNrpDiiac3SKNGM5XbmVnp2UrwamtYJbSloxmOQ1wU7jkz/5tRSlSoVeuO7jqxrVymwYsb+EpoupgHmhCWriV/S7I1WSU7i3JUMEC3MiePtofDhXkTSISV2A6t1Cy208n6uuzTJk8RONINQFNgpRiIlMn2VVwAPnbckQJ0iktxBM49FN22umhBnlprZSJlSlmkhZllmGbvx/HKtvl8zceaP+DDqQFVgISZfcl1l7/Jm3mMzcsXR0bUtUzensceg7RKK0q8lEBNasao8PLHlborfb0P1E0qJwYGJiPCJwcHJpSTW7dqbsGIV1auFI/UrZChPIaacxUV6HiU7vXzq83Xn6nYAwdlQO7hKjSAsvsP89kDRkgrFSPyIF07P89fjMnNsiKhP4uGxEQ/9kx0lrV/2jewiymuFFcwbyoEUQXmv9fVglHpU/rqanO1nvOMt7AGqQjfQsQLNpyPbZhkMmVyQjKYbOs8BBRjiFpjZitRMHJ7ur837VEMrUCc1q1gOEaBQmkFHQrIjMs1K8kD0G96CLrOkMBfD0qI+tgChrSEQXxBchPNk4iAlVsgOakdo0gzNshXQ5QNWMCsBzGsY8Bm9c8bwSPLpozKZ9KmhF0I3xQSgg5Mm3anWcJqN8PPPIPETRSjj1iiXXJRQnXBcEEVsf4sNafVxjdxMpAs5AV9OAmzjQtoAY9X8yO1+PgqvbHS21sFbYcGBxwqF88D9iGlW6Iw+nK/mH2yU+Bcy8ufUaOvELlFtHiDx5gWBWO6Tmm0227LIwQ0ZnLVHaiD99Xm86+lFPV3lcAS6VI4pmEXHE56ARJBEFgPwgjQYoETMAH11bUCQ06q9EpwQEnOkitYwE0BqdCr/JpSWXmc9O8Fhi25Lw5n5qU+szwk6tdf5rsCcgP2xSz/JSZH/8VNLYDjMOcXWcISxoM8AJpDnH+aZVmW4RBn1S4CAH7oNMKrThd5GsZ+P87GvtPiEeERh6jyYdTWgpXibXVQ28z9ceni5X82VzfGFlVVvaaO9vgW5Lt0xd3uOQXgMQcmvDPwj1ur4htSt1hupFS5kyrdmo4baG3HFEILfydNtW2Xs4AF4eU+weAxc94rxZneuWs7ecQgm9sOQ8Qm2GBNitxMpH5i+KQKB6b60gHiAl4QQDWyrRPpDOOxKRj79C9PjWml4QVrWhX746Oeis2MQbEvodXo/dL4VS30g8kRPQn6lSijNBKtHtSR3dIxYgYhX41bxs3abzLUpK2XGqMYZwpTfv7mDmQzz3rDvmgHpzEHaK3mdt4LmtHInswhzDYEp7anvQlzaCMOVSgUrM5wji17ImF+yt5DFqCo5/mCxPqXEfwv9Zy6QFowMdcJauZM6hl3/swAKrHELwjjWY2cjtGFYtMuKM+6X6wHj2PoHIuEomFtMSoeusp8yoCNSEA859YG1HwmU13bVymyCirlnOKezq84iU9LaMl5akK2R32lmjFcUF3Gl3NgZZODTyCdT0ej71VySqruVFhWZBY2V0FPLqwRYSmylKT37Gos9IAloOP1EujBB73bts54qerk68VFhnCEsdmemA4NbjTLT0+/GhXF7tLpXz+Z8iurk5PRcDsrP/EFpCmJUh2WU1aWo9pyb/OKL5TwRJwBsYzrT0cln1bC/uMmMjYr3SiG43Y4ThIj1qAsOmw3EUT/dpYIZJqEwKKr5BQqGOaFHs5D/JtaEEQgUkQ/m/9stKJX1ExqJmg2Y2uMyUFDjxFRserSwgKHf5DabBwb24jrt/fXYUMzZ8A6nw4riZIReSFvn8AQ/rN4v2EbcqR+ubxtYcSwoeObFOLcDwW4Ahmku2PPD44yfVgQFni/CCXTeYIW6RNO+OvrwbMfm2yhGJGLvfhHlmgiEN5jt0fnbYQhvNHO2f1ahBE/jw/BqSAjE5p8EG2TeQjAe0TP9B4RBifCjVDjr0SDCevueLJ/e934hYRcBPf6iGDiYjZsvG4bt3CDAnbSZDumOo5OgHR4mVqCRUw7fVP9EmJyGqlRagGE84Kw6jmxlqABrD63aix563PBW6s2nbrqLUg+92dZalb5aAOIrZG5SI29IJolovEGRvgESIdHtezpEIdvql9DAC8sNkEnKySYao7ARz0OGEfy7//6w7xWoBUwUgw1bGsOXNObo9SSobBvpnmMNEcDPTHEiPCdk0xmOhMXuUWagF9gqq5FbtEOJNP7m5I+ZepIwuXhwSPgBt8muMQiG9LBHhni9enxEq6DUxOOQAM097bv6/yScRiB+Cs8dbImXlQSJQeXB7X2B2dxI0uwmAZfUNxW2EBcXhm4kixCWF6gP2uc9IutXxqnfvuttLK+HmFKpPb0NYl6vO+DkjjRBLaDDagxQgxjuS2PeEaQ176HYJJ9PzxVR22Ci4214fflZN8HBx8zzBG0sufCD1t4+PR3EYPxlwrHW74HiW4itG59tCGa+Pn2tQpuh/t0w+bgUudFR8kecJ5gQtmZeIIIYquYh0WY0tkhN0Iao9MQXaYkGJD3CsQpFn2oxffHalPIxjRjMnzE36qtFE7vDgIS8WCPbIwiJ87p/LrbOp/ukwpVUot9tzQTqUdk1JHUrDJpnzRP2it9TUrYaE4KhGAU8HPB7wrncGZZ7kgBef8W2sV5TvCChwnNsEfJ2HTuc4VPMQ6CvWYgkm0ydZabsm9639FUDoMuJHjiIldgin+edT3zaSZPvlt0DibneWGRDY6J3V7CtpJUEocRwprSeGVElObTTARX0I5h1rrDVt6JneDRRVzW+ZAvQzwh3hAh5EocnAsZ+ujkj696Y1pTfEJTGkkrTUwoTeN5SCdJHqQLGF6TBOoPK2mgYib/Fz7L5I6qRwQvDDczafa3a/jXjKiK2yFPo8PXLQ2PIkkkKk117gvh6FHhrnOiKHoPShjy7nuRaQhV/p7JufJiRcWiXFd5a6mxvn973WObNxuQgWvuC8RslbJTS8ciYxBudLM5nYDyNHuVDiOo0QmsKAJSGOmdDLkZkFe/XC2bTn0LdaLsonlgZH1oWKi7EGG95gOpRs020EHYWLF8PizsffQK2YzsomxO9r+NG8ys2vg9pneEhY4VpnoEXR5VwjYGNPdNCGrQ0ZXwKu6ewp2NNnJhirBQhYSkzMwfELCA7uxQcYU+YGz/ujVMqgvKYzUHYwH/7N8FMDSsMwqcEnuYDqncTkOhJcZA1brmKA7nDQXPwE3cq1odEMX2g3z5jBc6GiS2tV2oqw8IlJhULiMJlM4oVeERmojwH0/NNITek0lJ/dP/Cd0J3ax6Fq+UXJw7z4e9fvxC1evc7tWfxmLLllNIj5w+5pcsizjPUERIx4FDUKP5qbuvkRlqgv3Bb6Nj+Z/7YAHVuz7hhH+N+yxI1cG5sCLnxU4rPrGM0ZG8fj99odZ88ThOUr7u88Pz2SHu/JQma5++KfumJz/GecBswYzV0Lowthb+L6xv14BLC/sf+NCyntWi+UtJdOP2hxgfJv1F4fbfYKUr8qGahyJd732gwCur2nAQS/g3djH7POhnCSEOr8eDGZnAbHh3JZGRt94SHYiPaPI/8okyhUrJD416NloJx+4qqD1SWnv4TA39uuOTtYevllao7tkvnMyNbXom/TZsX++Ztin5xuB/1lKRBg/BCWpbrg/BjMEmHZ6USfPBquE/g0DhKzi59ytccvS4349tyIYZf2SvqBkTgUmNshEGQSpro5qJZy37+MjUKUaibDtZj/vl9Qhr3asWjIlcZPBT2IsBpsEKERBHhtM0NQnkGuoYwSz7tpsQPI/W2Tx5Z084iiEERUGznAX3fjwEN86nHwSDqGl9qW7RyEJ6sGHtW0rEi6AZgoHSlGzQMU42Z7pNm++I48W67d2Vulu65ZGyiLD/hBMq0rTaAG84l2vULbX2Pz5faemo1/vWm729b74VpdFqF5ERINqjjm3WytM2TIwCV61GjjSxbS6HNh+5TY1ZVPOhHpvSklm1MWtXZfce93V2ZW38n4phkA7ERqq984Br0RNxiM4mzk2d4KEjQQJFXniXPeJ1aPQDDnYsoAWtCnEDouSNel3tKUFeEMhxyotS8ByJhXUqy546z3o9W0o60Kvc5Edzz+Jqy6PPlO5ZxMsIW1LJgidKaGUJLZi9gykUscgYkQjzcXhe35iVSHAToVcixUiNnAOr8avRIUdardyvtqunLzAf0Tc/pXanBBn7b1EwUJjHJG+as0QWdulD+4pL+NQ31C2d1Pt2aYR8MiErJyt1eBQYcYLzBHu0txzqIrtNjP2eD5I12BclfekJOe0VY80W3n/QCpl8Zd9zE/vLa6bro2AaZZzUO7sV3U79yYzVqx7qDqNPvpKx+r6ggZaSCGuCLqDowPX5nzJ+mr++xwheGeLCHgRMRJBdI9dOhUdek0wuYoHITmCffghcQrLBC0QiSVnJkiRgpIdggly/IuoITYTzo7EIs4r+HbjPqqT9flIM2y3dNwvNj0TqFpEioOkKsAfNn4uVCALiMNayfF/4k1C1lo9gSp984AjFJZFkx3Ph0aW/lrRHrEiQgFhPrF4tbZPEE1cGxdWyIxSGe3XCx5Nt44zYC14h38PUqAxrQl1bacmgPqUo6ZNRUSH0LhZRIyJtNSMr22gMZlKEmpDRBnr+ReMuYM1/b07BIY5yiI5pJ1yxWO6hmH8JhRdytcyFhqP5Jh2eSp9mI8BJxcnO6lbUvBETRhuePeGuQOFY+9oDg27/Ai928LFF9SUtCBO7mBoec3Pqt0W3Mr7dYTu3Dq8/2HPySma8w/ZBTNTu2HDWW5GHows9EkNwgduvu7G7KU1nssR+qky+c+e+ocSgFDQ7i1KCEofuq1/NZOWn0u5GtbqxWxqWDVELSHhC8FrlmUzvv+9D3VgU2LInHFDYrmRPO/bMwWgjIBjQLTe2ttrk1i6aFrUmN/awbuLwzzLgTMjZs1kLZPpjx9o6sbml5uAsU2e1AYUt5Zzbt5GF0Pr5acVo2jy/gBb4UlG+RgrNev641kq+BtAp6hIEL8ppLfOw33hfiFZpeA5jNr4WhDFvr2AtBfAZm7xsbSvSjGIsMEceoiZgLnPMTO3jQk1QPKfaCqMaAFD5jptnzJyWf9UIz1mbytfZiWX+EvXRR6JopkYps8gmtYJQa5tPmVItFRznBYEB2ON6qU3rXx0fAPTSUtmNXfrcoVOnqqr9VtP7lkMGBn52hPgzIjQRWn9HCI1p1BEyZLXUy9ExaTo1igWdYxCj7TCIwW6z8CtW995XjJJh3SLXRgJ7MEkQOoeMcRNOl0quUK/DbAfgWQ74eqfZadVTAPq0skM1NbWJu3F/bxUrQXwfqKEmLFR7QRO0Wk8eyxIZaV9HJKGkiV2xrVNkRGtNJDp3ttubWFs770tWUV0/IxQoAxwm8vfQtnmiWDc6sqvt2upK10rudMzOv1XvdPwsrO3UWG0xL+L4em7yhHf199cjfmOvsI6F7W3Ds3/5nRGvcJaUUGISCh+VG2N9rSvcSg79X8g5pEG5P9x62oS5lSWmkpUcLjf7HspFmtPNzUkihcJhS2CCdFtLbftHxdyFgAjRvRZJRTo/eZH36zpjfTW+cwpynTZqXh3e+GL+nubmc5NajBUZwNICbpEuXyAcLzOBlnhOFAilJtD/DckQnuYjwG2wrZgmiiJolnwiYGiBw9jlOEqfxm2NgtG7jxPmfvbij9JIXbkFu5y65dfq7GB7xcwv27yZaQnDhUMJY69y2pqfFg0mCaeeumrlbUKbDRyHeEFfSEnms+Wl0O2gtzQJUsIW2ZaKxpWG5uZ9XLNhtaUJhukEmVIGpSW6HDXUxCBiozkA3KU5mnFFlkHE7ZywgCNgzka6gmWKKwXndwv5pi0wC/Xhaw6PLIwMX5LTofnAzcxZ4mv0em3M+pbGmB8aYlqDEV6AH2IaX+b8JDXUoUBbdMRwtKbjA1Hgqwf7eGpdlKaRKjnMfI2ad8E467byQRLxw84fvOiVXJdvEx20G2psWDDectV1uBxabT3XuCx07cRZukyTYGhmcSDSXyHYYVbQiuu0mhHUSK1WK+qYCFmkXtBHymwFighNhF5QIzpCc+4F4VxJVMzgHaV01uWOyWLMuJh2ESJRU8j/NcZfPs43x1cS45vna4SVo4ZPDG9qyHnu3gvJhhlxn2vGUN5q36GtvEHxZq29eCz76Bjord9zHQfNJt/jz4srNjwdnzd1bujs3L/D1zmPf1r1+5q73rPrmQ1xhXjd+zDwzaBavP7sDnq+01f002Nv4tqgW2e5im7SlI7g/Uyn9GLCVpuNpe3gWWzJx76er8jPc0wNU7scqX5FlVjyrwKeNZU+03/15yeYnZKEaas/IyR+6knmoGg8ra/9+Xp/3r5ZsBmz7S8QCt6q2twFu8sqWEFHeEO1uTqzmiUKllj0SQh45dapMHxhf/llzUUrXCjsJwo8yMpTa/Y+aR0XDnMb1vf1Vaj/GkLSLZbN1RYbaW0VoPyVgtRj22JCd27N18fGBvp1fHvOnoqtTdr09tXabY1N2+Lzk2KWBspkOdKugPuO/W75zr8MmKvDlr/1mmx1kCVUm5SWHBPU0ujJaNh5XheT9uRrVPKTiYiOfvX11T2pQZA89BOMq62KWbp0iUaau6Qx4D7hFL3zLz1tye3Rq2IZURuoybt3lfznXHF87F9ieeqrJxNPoOU7us3farD8uY8o1JilTI5TH5aHpaUpH1suQZn/DmRpj1X1ooihs47SLgWaOuTVl9iu/f/qn1xEm0ybObUB6fmXL+doDVzz78iePSJRrRJsNyj0i++3JKFqdK0j32PxXnOUFvp908eXM2RE3/MXllXDxkCrHIp+48upvMLwn+uGWYVDRT9sVPCpL/evkRuuV9c23o8zlg6KBin2wncY1NuipXAOCr7b+lPZl05GWetcJsMiA9QHXqVWqprEgaPaXnQ6XL0SUB14/UN7p5r/P7r2+12hvTJte+/9IeEMy5qFTvTpn1SK8vm55BHf289zRpkbl/U8yAp2pmP3ctXvqE5arLkhL6eyu+dBtWVl4wpp3GHVYc0HURsRWxtTqzdwrBFTvyRe+UcMZmz3zWpTuJGtpmhnNwmLbsxgzz0jMv6pkfNy0GLMrAj5dWW1VRCJVNeMhcNfEm+iGTIJU5x/vqTtGfHWn1xgcdlddfqzzqtkQsvmjtBLUlGKAHMaes3BOk9ZW75pa0cv9iTyExaGChHtgFQsVIapRKt9CcZVjBbAU492lYiEPTSo5ZCrNx0W0/b2gCZFPUOBCeVQjCwI83vipk/k2Q62F+kkGuEdfKjbbHPwS1XbHRcnLQ5OXyPeshQv8ZYEeTnvyG5kRMKGUjnUlih/4z4IMsNppUTZGCWO6bTHwBdiPNsOIH3yEVWX6+uXbt/w0Vvv0k2rAaBsVJaQOJmYIMhbbjXrA55xm1EdB2GTTWDOdbovobiXStCKb8PDE1YNFw6tgqNvJ/472zBfyd9+i19rQb9j7IDTZioaALwATHD9NcMgtX9/URHP6ombFsUpcZpNgbCarBPMCXSGOYP55lC16tTU9HS/TVuU5Nx2NIs76rN4Fnw6mjxlrfqy9Wdn3MERQKewLZAJi/U3/moDVndnW4pwaOPnRVvWJwbnXTtSbutNDFmx0VW8WdcYgqOOTO9ClootY8hcEV1oQyB0l7XxeMnOQXqwkT0xzTJiabyUyDA/CSjbRZCyOp/uts6vO5xQUuItLXlImbGpXl2lK81fCHcOu9psDxLtNPldHHIss2MMxpmm+wWSyvb0iLt3LyfpDEFuNwT2Vu+pUxaLVytSjMvpzBd2UTCTlrMAvmy11c16u1jaiBjuqcjr3sFzERl5eaxhXHPDBcOMwWVIGGvztn3ZNtdmWv/VIWQzFZ1XyGZm9iqib476ddg4B4f+bBCN06XEIXRF869Y+580E4zqKEBthyHHeEKSvSibG0578pqTn3VDeZ6EpjRnKAGFqJgR/byVtCZwGqk6Fr+UeLIF2TyR8TbmXcdYMWNQcVHfhXk2bjEOEAmvpXyC5em/7654vltT6m2MwDDh7ucrunfiATnV1Z2O5hDaOifzEItZfChTWbL22tbZ9p4pb73FI4XdUm2gqE73I/ey6oLKHwYlJC5yOQ/Q2MANd7LaBn7ZV3nNmp7vp8n7qsw7fNBHmxXpMtPECwI+eemT+UpkeLfhH/TSU0u3ZfXgqg0dVX0IavVsXpdHLkWTMouZOrUHnnWNF/Hgs5WFDx/bvs7tcDvWPdx//Ik96L0RgqfjQw+LdfXWBsPvRM2F3rej/Io36VtbHQ8//eJzz11/Vu47eOuALma1mOuo/Zy0AiOiYIxpqimQvx60WKbgyle3Bqqb6BhtgRWrFZwlWyzXjFGkvkMbE5Op1YUoWO3eaY2sFN022flOm+jGAoCSErn1BmTrXp2RDcswkyJLEVI0KR5w8X4il5gOtkDNfRnvcIcouQgQoiFvIYlc641dpNvSKjURkv/v3n2HjmiRJciWFc2yIAOA2GnMqYLh3SQYRoHoGdSP/ryRUYgcx4kKhkEwD0KIOoRsuZFPlNG//Pvfxkqs5MsEdEg1IF2QDqggr1AHApj6b5Yn+3zJCr8i6kag4jNxWxF4I6oSfqTuKag/BcLvtMA/UZyOfoONwJmtjqsPwXgjf1zAFmYTbMsLfTGXow7Z1ScXSJehOGmldEoGjiaZui9c4VOkJs71QmfUKL9aRNsqVhdLLkqWpVrGzsWd0CxZtuwuBrlfaPV7NafwNiRI2oWBI+RvNesiOV1q+avIQovOEkPl4UTnUUcB6wxAYLxYWdHwyGglVQFVIHG2cXudeftif72FFuhf3A4nYsstHRaQxrDu0LiGEmPjGlqCYBqiqOC8gNawY+a0uOrxt9oYB7gXIRjomh7zroGZ1Bmn08fc7hmZUVpSNgNVtDXjIaqcM4rkzPthBCIA6PFR0a1HDns6wLcPLYpKIrKYUntG/iKvKYhOLXCaUH1Xw7qp3DWmdPcHmegJpEu4tRQUdHKE3rgBoEGkJadhNIZH/+p79FGvA+b3Op98cj5q1GcJ8YbU+Eb9zylbW0crRp0OCpaNGtv8ZRpf0Os7mo/6dprnjKy9ED1CUaKb70OOudbg+PRYwPo42Dnp6cyysObla5tTwyf/effQh+v4SMbS+t6roI7OayitA+t+43W/3UkPCysN2TGckb//Dqw+u4xFjRJO3O87ZiTdB04fzWot1ExQslF+7SIIGwfu3Ln2VMVee7ITtrFVP+BBsVP/6KPDQ2SoL1RBl75NuID6HJLAv7TVKgPXbMC6azp7iZJT3tBW3zxBIhAjSxtk/FIICwKN5TZObpOLmMOcROu/beoYJTsC2vLFHlrDmklK5rfH3pc6uljO82xS8flYJqnofJzkskRETtz5oiQm9nwxh2Oi2IQV4U9JLBzv40jYs1me/MK2atSzLWvpqaX0P0reMeLK+U8+OomFj6ouCbMrDFL21tI4nWFLPNaDJXmk3Oerq6uo8LkLowqYj9Wm9yd5euUjj6yk4euwzRv9fP7z0b3PXcEHb0IzIaM2l6XJEQS4UHTl47Xxeg4Vfbn2Y3/7AJjEFCBRLxZYbU7k1FylZvWz1FUNLBdgUWBkHdjOnsCXzcj7R+gltJ1ejKtHr16du2GDU7+paiugtbKigEle5JM8XINRgDseSyuJMxSZ4tIei4FKE0JS/cV+dchwDPz+jjOZZZmxYmxmWOjMydMXHB6751HZDBpQRsMZ5G2HoB3VUCM6aCd2LYsQoZwfz+B1TUTMTjzVMJVNyCwa/1pdObhgX7Cv64j1U+FsZML7yiX+UDzZMJkdSvX8J+astizpVFSfekFd4f+aSUQwuVmhLjNV/ELAp2Y++aASJYZ/n/NUnKSrP7MHVXZ0VhGWdcSq5abytEF1fivQ4KqDt8abDdSdtEVtoTvV9ipt0ahG6rpNYBE+hu2COvvA0JkNNueybD7TovxCNdMD7kUof1O+I7anjJymA7dewpeuC6PXLU9bjlJv+iI9uf3dX2oy7Qo3bcPS3rzKUe4tL14yCtSN1RXkWwzNzYZV1Y3NpfFNaYQGhITI4iuofoKkNcV78po1TYHSQB0DW9zL+wy65Ir8B3RWX0T4vgZFV4NiX3jUq98XsixLyktCGwtSdbDsQGur12Le5IvenLatZVvav0ZQO3ftHqbX8bD4iGMT5BGDGCNbklNSsj5qQxSLMu/TJcQ2wG+iPcxlzPG93GBrRs32lA0JyRFQokpWw5lY/fHGB2as1paWfXtbm60299EK9WOLFQDIQcFykRONPKfgEC+ZkQggjHdwNmAvgkQEoELq9HCkg/cu/MAomPPnAmsUODTsFa3kjb8IILNgs4EElohLps2HpLAHp4Qj4cAUIXD7nDsVvFQ+bUyzjvzmr7/2+mVoyCvKLsXBExMIO9MLvZ+DcjcyZLMhhjF6GLSobqfvRI4JAsCGk7RadfrG6EQRUbDGbdhmrjFfGxYwFBn3lN5v5+cLReyE8tSiso82cSI1Pm4ykXyneBnv6z5vryzqqxyrhN4vni8qs9ueWfmugUzxHu+q992FCpCTgVtDQ3KT4SGI1pt6bwHDLRh5EMh/SdyG5Kn3NjOBo4ow9m1/ScwWDP7TLn5NjStEGuiV/rDjt518djpM3fLlfMaXzz8H91vVGtsVNm/7BW7OokAKy9ycFOQpP7AqqQQRAyeNKKNjDe9nzgSZdoabJeZPMt6I7Ei+5rT+lb66zue7s0N8m2r1aKKu+g+1M4yHaAw3q5Z9BniNJLkOHCgr65vbtClS4g3Ul5fnOrhPMpiAxpHfGnkpuQMvYJhO0or+ymUJpcTPUn++gH/Y3jdW6XMBj6j20wkchM3PXZ6Xu87+FirhD8u/cky/QeFgTfXsnCUUoSbmksgGuJTVnd+vxvyOjOGMoNJERuF0vr2k0/2rYcnLGXnR/fjV2jric7l80C4x5/XOhTYkIh2GSWawoiRKbDDi6goK0LnIzSlfKVjGoVEkqTwqtM2agBxqMv8+Qdo5/LjC6md42VGLmv/qUVs6Onje5HACeezE9OAuaUwocTERZxEpHW3IJk2u5jAGT8R+Z0obgkiqKm7/5jI9RGQJZo2mPHvy3q3EfOIT5iOKa+tEav+gbuchl2tdFrbm9yY1OG8/xEJ0mpYhumVURZF7byvSm+4JLN2D+0DbOhVkVkcEY8kbtiEb4XsvKO7GBtnRIBNJSugF4eiSJ/cWsi5uHB3tQnXbt9cpv73jpPLZUZkxIHnTWTaSimRAZj3LHbSAF+Sm3nYHUmxIZgEGF1tmctnzK+cvZGgg5KOwvKKv16goIZ2/vY6DIlv37WuBvbVFV0kKKCYLklyUYGSS0pShVU+8ZYrMeiU0qrxcTtVav+DIdtvEZUk2WYqWD/SLSMAiFqatiBZmU2Sw/+6f1B1LcAef7vve8cjnnckasXPF0u+DN+hGzpXEX6fzryMsLOBxGv8+XH3FPnlubUqVw6kkSpcgWOKfq3TsOXvkgR6jq2MKumu6WQQZjEhOSI7odMbAdt07puV/2nw6BlcNgwQT30swtGalRXUyclaI+x+01pEUngWd/Z4Of73x0RhdRcL+lP6UgMab6M7qrLuf0lwXi8czXuW0V5H2owJDrEH2WmNR2l+/6CoC7uAzm7coiXJv9Fx0QLT/6pIjyhWGA3Xmt+SHJ/9oYXXQzVWH3o6XK7pxghqjt+2yUeh2dW/jIA7Wj6y6O93PdEP5xOnych9rJV/8pAJoB+vyexzyT5OC66WddEo6aDYzNsajwYwDNCXDBMEoExhNPULsL7Hzume3MgKjP/Vi0pKkF3UGE8qfVA+ak969QfVJcPHLM3NTMwdmxMmaSf/i4sbO6M5OsW7tV+7cAExlJbl5fAgbX/vfLgemOj2VxiKWZxWDi/6uSy4uMy2IN970D0/3LXWZYjUL4lTW2ojRD4cy5mR8WGieLCBzV5RsVBZWve1uOnyIyr7KZ7TaKCNoaoJ69cu/DRwgLcA+Obwj6LlenP3CJLjgF+yiTLmHIUwVLzLa6clFSOQYgKEEM85w6CbfFEI1jeZpVc+FEycuuEiZjar9ysgFctw8Oem7oK5ulZXHtOA5KBiYaUccTYVl/f95K1ncsGE6jxdetqSiUiwzfTc1demSPq8xkSJRT0KrJqUma376abq0vMLX5Ei+uIJXq/L7VajKdfyEOGU+n0CZhp91wjwOz1tFq/vb1vj4mpnJgOH195buFvt+zng032J+aG/mVBPZHVReLz2eCTv3HL6/VSEIdPvY/dQzXKM6eTfcQRa73RIkMj7wa7YbvSXWB2/b/SxfG+iC8cZGq8NNDpKOu43fbw52OKwflc/mXnaji5U5FzfDXeCC+xUaoedkvn3VcGLCUOFQQiKEIUyVOagSN/6edLKE5/0nTrCkuLzQRKqf8lYa2/oq1haXQfNxQWsen/aevcwSQKskymRqVDPj9c6kzFzxEc0olbxdzI4RrnGQJEVxlw2l/7Xo0sUkkb4+k8HUZ36TmqTCbAaDLYwas6m/FMSEkqhdMXpBr3uy84+rsq07Detjdg2vbrR2lOcfWo6+ju9mrG/WJGJI1ohIKj8QgxmsOVa5Je+Z0IPIhA6G3nGVPtp68ACQP4WDkdOaSaZXo/PTgsfM51D7/ZJ99VyI/b2TvHl25CHW+vgbQ7G96gAkaBfWLmiFeXqib7uhIQxeOuCXb/1J7ZAGNAY0LNmmb72RyrP943jf6pFLn7SI4nJatGujLrignEkdpYiMfGrb49LjgaQ819toDOzLHa3ICeTwwhf5kLozzZZWVFj1Wvv9hacs6tUvLNhpQmg7QTSxC35qNU7Fn7I46iZ0UzsI6Xy64MTMNcHtynlD8zw/ZxsyameU7Z5hI8fKaGhYu0NzYKr+UrXW/PpJZWhFfKqy/YUIpfpdqprqhipRB+5IUxUuFKrC6njFsmXwTdgykJWGOZx2pdU8kjfb4K/rlfJDSlP/321bl8lFxkLdUDIco7xR9SlHFC0rnGsh6vCYwJjwbV+lTaZN0I8OqWkdChr9va0jgHCuDyZkDyR/2ouflOkLyb8lovU0LLksQZiyj9JJR5rEh/Oie3vLZCXAhmzxi7wLO9ybQ5i0OBrIwTnqVwfcqsyPU5pyTcrQpePN6jjknRGndnJxywYGe6CxOc7muNC4PzSr4EeHRaz74w9lERf1CUOlh/9jdrDs7J80W0wNIclvJqsf1Mh3GUDWKApdoJbvq3pVmhqA1pnt9U65osq4QTATjPZ7m/0dAi2AsKJwuebU8tRT7lGURY6x7Vxw1n1o4rgUnz4UFt4/XnU8pnX8ON5RftXB92JfpOfo52Rzo0fGZramBUV3DVFjVEzo9PGbSHJZMiuZk8Cxm3G+8yvy7yeZPrEzkNt9TapM3DQjQZ67t497Jjx0rbTsLG0je17GvawP8sp9dRrnrp6J8KIHiZ/5xFcrgbxVt0LeVrFmfXAKmS/9yHcUTAu38obnfLpCeVvqaz9GSs+jh4O71GYT8OGfnG2/rl4h3xud+oiCymrRZ1kUIWkmkpIjZjdeSAitbi+7GRf7eUx82K3whAKVVCFNzFXGxSRQvv8rUr5YGR5T+RfnfPneCjQWkIB55/6rVpVtK8Xxkg07sZZlxhmtlXEyi/6k8E7vh2cp5sPnV4ge0Uyz5RjVKTRbcOIQINEwvARz7/rM/uqIQlCSPWBX/9NZJrVH143KP/TmfpWln0v2VkIVqwurUmoc4+YjW00NDtkfc1eqBNlMHMe9kv+r09hyurAtu83ZZvxu0q2sTzs+/TROz3o1zf9pt8USG2MSfdsq5Z75Fd/BmEs7517JjG/d2Rw/EvUYCorr0qOOJLx/BXBw+ZvN1j6eLysjkaeONWPT/tMzWVLQCg5/EY8Wl5fAE6mZ4d/6/E+qkp70D3k3MRNKTYQzMlmZHOmM4GQrSfZtD5xUPsmWD8yCPEmx7QONDVyegAQ341yKk8ZclmeQ3YbdRj8nhmmMVWeHBEygBeQkp2wXEpFV4cNiuZzBh9AlPZzkdUlzKdiTgH1HUMeUdk5AAulSw7QxWhQ8Ia5VroqNCfHvUREcgPyWueyaj/UaCiSK3gcf6POO/hd9pcvzueIFzDgDx8y3aNKt7WXeuZMXfZsn7ACmBmSorgDg1IjDSDIRHXxMpBdoW5ZNGhA0gv8tz/vEIc80ykwMoTHGdHBiJi4OP11xOrwYZyYGf7eFPF+o+IftGu+tvyf9/ZZXs/0H+IfrXjIERUVvv22ol3r9ZZr169v97e0NzRF+r7T+G0BhWJawfJU3HPW9VClX/RR/xUF4nrhLBx75qxRtzyie53wnHT1Lu28jRxPBM81fH1ePHwVHl5YFO+9f1bWxS1BOHuDw2roowzVf/rzACVCQuqC9S3DBye0eQVjsokiB9Ob2NbM29pIRlILYii7FqPH6wG6I9VV41rrYIAWzLSpSjb0KhcBFCQckZJbFyoeYsW+NcKEp8Ju+/juXP34F/vI3b1jS25p4yy/DQ7daWg6/e/iI103cBVkl+WAIEkbIIHKebg/f9DH6eJP7dSPcebT+pZfqUZHO5nTsEiOf+5MPGa24p7unUAPo9m1Qx0qzpbHqhuWbArIDKKcWy4jhHq6r/MVUKKypiduMreq6tZpl4RVdpknSqLin8BPrj5yvBeTBm3W/FZZxiTmlZbmF69YV5sbWc9Lzmq6Y1sBtY379W3utQj2tjnMNZgy64kyeorb9b79SHbVRfIncV+Hf6m4u9klXukl64pIFfcwfRSOW92oaGuJVtkrhQ1l2v7J+w3ORRQatxN3/Ph/0bfJt6tuXbZiZEQTiy0x/eADnPfRU+okBPNhUvWrNpgGwZD3R4teCSqoWrQ9OmmO5KDrxkVaYNcwQPjF+3sEjNJRxsX8DQNZxqI/3WDbvt5SqemTCbEnWcB0Ew568084ni1uAGh8biT1eqLv3iGaFnZ2gHh9l/XOwrcxFlSyWXyYvwVZbwUO6bMno2H2upVasqDJsyZAzS4KAus2s+6WtYPX88e39J93Wx4evzawxNHP71sJxBoYQWWMjUw8BbC5m3k1LMS6bwIEkWNYiWqbdAU6j8zzMmHiE8fkABr/aDAQwg/E42y1dqkl8RuAjayuflxEFJAwjLrr+nE6bXQ/F/U5vU4jMLKAFhmV5t/mNk0s2nMOcoBM4+yarSHd9ayvR51ssL/yX+j3On/N7amQEJsxaR6G3FYtnYlxUAJDFxi5/cSH81ualu4Wq9qT2qlRdxtF37xr/ENuQlNQe1Mk58MblxsurPH/I29tKvPtu3h/qtFWgk4pvBNJhvOHAFwZgzvJOJ665etXrtBqrdp3sbChA5UGD4PW6bJkeyDo2LV+mzg9hAU6JbPO8k9ijjeBt3YUYs/bHEIeu8Jc24l3/Z54ixue/5YtRzK98W9sLYRpPfkbHeK4GQBNcxDEkNNqTJbzCqrT2VxMxLGEEJDA3ap8H+lAGPMhjXI+onFjGJoxnGJvlZztthKrVkNvIrftZ+ZZ9of8Ur/cHZcYwnPb8Hjr4L7Y+NmbT3bNAVHqbFTSR2FYUXt38+LTxzA/XVKwwxdVS8Io19GHmeJZgk63DWRAfAsex4yvc/DDf3ck93xbQqYk2peZMab4rDgxCQYHFu5xTJXJTtKYzIDgwKGDjyTtEl0ydbyxyFOX8hYvWNi4Jpl8ha6dL168vDUm8K4rw3TFrTX7eMxh5mfgEBvLY3FHn2HVbwylWSLhXPA2aw6iyrhMM4medgl/Uq6Mg1xKOdIiAVNH8N+tJLh8dbvOv9hcOthLCOawgCkDcQRJR117Z9VwEWQ6DKa+VrW4xGvPVt9xD3i2V1tw+tJX2qhoP8mi2TXCwjIk9wPHcP7H/d8GKqrrzUNg+BHZ46ykOwtbLGUZuzx7cSsblrQKxIg7tcsLDdoXPTSRRNiJb5ITz5BWiKVNy0UsvFSWL6sFr/v8F5WkRJggzm2husPVBcyZ+faXV6ne3kyL1+YX1dQP19QN19YX5ywhczhhm/vyJf0PyTk8Vqi44aFr77XBsCBcSO5webjpYgKqret4JSggK+ZMWRnwrD7xbpv9zasPaj85y9LLioGXNPx9eW6L/TF92N/BzteUfcyj89znQXf9uf7K0pErTvXtWPDlzR2NZVvoXDZGO8ujh4frg+uE17W3t7bt3gwm6hrcZ/Ra6bSgTGFhtg3pBRK/S4X/EWhDEwhoPu82h9/v1s1mvM6U+ApMLd5EjdF2/uu1QTwXIxYYvNO7QBhy6LQiro3ms8/7nWbb/kYqqKq9fvDOr+L+DVbrzjStzm8xSxyZOK/FpbbjtOOEIFgQBE4tOVFy/tCHbXEAiageUzONyMI0X5bERKnawBoK+fQ7N7SidmUFIgWbZzBlaMPKMyKiQQDPWH0PwmBeReIsfF1Hx9OcWYYY2FL4zNvaXPXoy1gjxz0pZJBMpe/UeTFIKqjnqovyZZ1ieM+cjs5k/9wyHO86F7kBn/pijdwHKD0OSk9V5LYJJqWUNed+vguKcpWpe1+hBHk9p2CndpSbvv/awWIgws2/G62vzFZ7U+sU2xoYDTuBgGJApMDfYZ9zQEFqRje6wysBFS41UlO78GB5P2E6wchvm8JRAoxIzLWDZsIxDGyB+gB0w2jHBon1RNirDTY1iwwkRHjHyN8kA7BM9cBOKqk7L8mOCcf229X2Sy5I/pB8rfUitUD+kfz8gsP4w71v3QEtsC5jcBNiFRaO32Tx2m/bkzKz4ULJrPvgX76VL9i3e2rXjb7TgQfb6wyN85hZ5hlsKOmNMX51pc0hGR0bn5uDEV5dq1TcnoazSdVox2AAiLkfID9QjogUEPirex1nZTn1Md0nUOG2uUymzF7OV0o72nA4WYvzAhMDbgXtVD//mY9nPLu+/4Rned1EY6/UEE73ZfOLSfIaumhonGbd2RHiGAkRAv3zIKGdZZhbNMuCdx0U8w5VXddbw7IdPTfaCWDACZcGo7GB5TFJTD7BXTeYeeLBvNCJYvvHI9YwOSWeck4kQzWLq2fAnwvM/KFAqZyJlEQ9Ejlo3w4BE5lNB/ZIZSfzSmOzt98nr2PnUx766LLY7MW5ZILLdV6GRsdua/SzoSQfb5DHxvbrHxlc8flMTsmL19Q5wD1i82Nva8uWMFvrlgW9imeeLkti7M5KPesF3ZIX5safE9ijPnzUK2lO5Zl1Lhx/zvTzu8NfYw0pKbFbvFtveAVz51mcbbuNxhNA4NsbVmUEBwsCBLPukFdmFWPb++2GGCgIsaQ0ONEGALWZhiPypj2WHyiCYcnPTqvB+66AhYC8qIXbRCbPNz4l9Y11gpGdpuZyhGew2pwGR3CT1b1YzCwwA2Wk75BlEAxLxYcbJo0vu1NAD1/g9saZxnEamUbITtk3wBGl1Mg1psXJQ4GyEI2T+hS8px+1XEggoRe4w5OYM21Y0CCTpTf4J2w8MohiVc0qgnGZ/XQxZ8AgT1HXTFVaG/uyr/2KXKoky8Hju+RidTxezF/5FkRWCYsbHxd27RVOZ91RuXbTGv7fPuD4tkKd7t2XVHajjeyTenfLhzxYykLJhWiCCtxC5bFh284tmY7WEbfHRzU94IMIYsXqYn/OzGbGAbWjHmEH0SADU8YdC52JhXq7bOA4MLlitt202KanPT1tyL11OZbVrbmYbWP3qhobVhfX1hXkKAkK/n08wtQSpqTg1KYqTUxV1Lb4WAdH1IZjhTPYsfucxwQWsoFLi/xuDYrIP6COpCc0EhVIi/8tDwJ+3uklLAhLQNuWnIbQd7C4xGNN/57TOhq9+qMjaaXsEiWLJJmhMP+2YBiAXY7UwoFJ3qiXrHPcq2VDXNDvAxQUHAprRyliH1chYjKLACUx1eTbNgQbFXlXctu9zrPEvHy10b0989wNdcfs7m0rH8TiceLz1/Xf3qhvo7Ylx9uym709Y45snjj46uiPx3SNfbw1iwAjH9f8Sid1Bw5YhDlJAtRjaGgwVOhUTmWFmBqnV+B7nuO2DakGt+VLVPy9V+IWeDw895N2+fdTreRwvYJkIcw9IzS8r2/h3662S5uZ9zWQfuVSz3Ug+lybG+tn+qTKjMKgwIyo7Ii2usSQp4wQK0hbsSUvWmBLSgpdXU5PwmFn6N7jYTMkW9CipI2l/oIrbCJNlyUp7IyVjXqvP+P/aWzWcPr+6r6tc2V3QpKQm0kapVcMzU0J8TPHjy3u1Sz6VHAxUnnolMuNRTWFYWOiq04Ea8bdN+Ssqynr4c78iVBGaPt44np6d/MELQ8OasYDgVv1vd+NG4oL/2XrIWfXsBwt2OP3l+RTcHwg7Hy1Z33g4rOxEZYm/2wjtmg6PzAzhBd9WbW2dycycGY2DpFKPXr++Er/OW3k9IYfL2fxfjDu09n85CG/fnP+tNbBraIHOeJH0nCFCNw9AicDq3s7fbEn5moKKNeUldW6WOiKzI7sAecRlwoUwdv4jCTSP2+7mx+1WqMls0wq92w+v7ciQB0ZtD0sKfyRi1GqFAYkAdUBV5LcSqRECtXTH9hxXvl3coH6qfgCzRwnKoW7gRLrOq0v/pVKXtp1WEiUdrL8a+/i6gIAu8lZBLloVW23Tcr9BZLNTk9Rf9aL6bHzo+xBy8oR5zwSCm+im1p7YGykk65fR6PE3Z8idyMrVE4RAD/m5qrKfCa7btLkuiL/RX1X5c0ld8KZNwXU3DsTUki21JKYEusSHpUF/+twnE8E1m+1rg9JvuM9PBH7ly49yIz3okYxHgibiCDULz2OUSICAt/QKdJi4zLpBkB39hGwAUYws/DsTJqdCUPDGZwp6kO42Hzf7d4Gz6jVn0xW+elCR/q4TxZmXLFtyqaEm5XkfNmW8OFmLNxASABjggXTr+tZ15L+VVEUl+U8rK8SUz8WoT6m5vCupby57OI1Jmd7U2ShJCExolHRumk5ZHUCmgqfo5TlL68PCmaU5y+mjMUvqdbcPzQ4MCJXZcdWcHdBvNgBEjrGRisYx/gd7zHEg9UjqcOpIKmwPaxiXN/nV+9yp/27x532W+dn5adCInzzQOy3Hgw3blEQ5n6nz8YyOb8FwVEWElrKWCBSYigds/X71+HhnRNaxEdlVf4WA6Mvyvco8iyUne+7++9X1NkahXscygs3Vfviqv0b4QtRnKr2sKc9ZRvc1hDZ0dpYwCgzmi54lIdQYz8NLiFraJ5s//eWDBLRV6260FdjmdY+4ZvbAe9tHSPO+GXENrhsaPjk89GR///Hhx6HzprCO1f1qoRTEZ4yFBSnJKY/fFnpOnA7oDQ1ubM+7Z7C80Dh9OZJKoCIv06/79dcVQ94awY7N20jqzYauypUWXBKUEFSCLSvfP2UN5nqyMS+9JIPai8cSIxPH8F6KyYBscySZk7wdX6+Kj4/fmKD9emV5eW5JCV3iPCqZe+VvATFff/jZzqyxrIDUnuVGmT8xYVNC4qaEeHjvX1rdtRYv54dfhmbrXIshZwfMRoZo11eH3G4V45T4AG0Rc6ek5Wlx7m2A5HZFwpcnmKg/clld69eLIKjztdzSFf7LRQi1Mkt1wTCjSu9YfrHUojpz/zMOy04EIit2mKaxS7t/f4bbQIH1UXuW/fGP4u7dsyxrE6E5m5VzYeGid46AOswV75UrjecUdaws0qoZY3FiYm0Q6IFfblyiWCv/GP2/hIJlXlG02rwWy+4PN8Z7RM/8/G7Dm462th4GXnut1R7px3M//tja8uXwcFTUA64cgO7lKVUMmz6pOmz9xFzzCwtFChkrdunEfEa1TpQn55qx47PbYyYcadyKqw94phP7Y//gSKmNMautCNY/Ysa7EEgKbGPeT/hetU4vocAIL0A03gkiwf4ah+auz0H9i4q3FRD9YMJQ1zsIJy5eW4iSGxWfjx0I6LniFZ/nJzKx8ub69OaUwUNR8WWyrzx/aJfLkBd9iebQhqWa4T9s8LjVaLn1bY2AG/04FIVi2xP1tvQTiz26b2zf6ALfOqFL/eae+nTbLz03dAabQcfuJdxl27wXL96auejVXBjO2vTIhn/6ssyWb27/cz289eAvzmv4Y8rwphWxn6Nuf2OxrPGvv7WncY5wcgZPesJ2wuLgIqxj19rsybA+ja0l7up4v6MisXkwaCwoImhPkNKlDDqaFt0dBGNrNtdKJ6VrbK71lue/VhKlAuNZp91+8nGFgi2RC/2Q1h2MLeCBJFHXrPNrv8xAwbJhKScdluk46Yh8pTizlkz9oEVOisCIva5LP1rkFnmEOQx3mlP5Z4o2d/WeQvgCchPKB+OFdM5soy3OVdtsDuhJBIo+CJqc8wCPOS6Hbxolu8iO10gv9B3p6RF9cu0yzD1Ou7Ww099+OPNse3tNbAqVEvve8PzmlpbAdSf4iODxPpSfn6QSMeZu/KMZZYxAH4FI/f7sGGTGGOvzx21WS/X6wzWpTJjFah0HEA5zdlC/856EjKRsHZgeLnKhyzwuWDInQYgu4/Y8wfAhnIcLwxOgrZD54pvsp+AAcsDQFGHFYeurr2fDA3giCSGbHAlrh/pGlyVHIWjUajJd6+rGuLvrlsKtq45b3V2v7+q+VnrIaLDaTgidfp13l2kc4ghXO2ZcSVVDEOyUludtBZ2gPPhK8aw2tqHb6M7Ssg0up5N67n+HSPEk7WWqWJN8FjZ9h7CBR3fMk9RB1fxPO7Nh0iS4e3RHreogNed7zRcQUF6+Mbh+2fDEed/o2C0wDnFIocIxUFiEhL84weWtESQSEfFujnb+OxbDiRPa2QTqD/l0/h1qaws3V5dnDgC1Wpi9mMvkqmv61hZ9HJAdIG4AUfq4LPrlvtnMK+/0bdhg2LnesKEvcGVMeMzKwL5lH3ZUF65b0/FkKlQq/IrbpLRFTYKmAOsOmcpekM3vndR0OFklqhIchZmFhxJUF1S6Xt36FdhcuHK1+N9/NqieC9769NrcNe+tuVvosVhef50vin4o7pbjO1Ij9WbyJW9/el5KmWNtbhQV97/lWHAfzIE1w4OzojaEaLHZRK0P0SaYUzgo2z02I35RpFS0JbCQLNGY6/sZB8Xv/78+yzFS+eVouX82f6A7dSR1lHRgIfOiJh/N26axyuLb8ImgpQkXqAVkPxhs66/GY2z4h7lnTaZyv16vzR0ePdKk/jA87MN1ues+lHbEbH02MuLZrbFeL14pNprqgQ1StvRFRIbZYvAIxcZ60LDzP0nnUkZYyvDgP1cHE0zPYLD/YxGJ4Lb7jPq2xKnCyUQ1xUopqzQ56fUEjTpefpgqavBWp+rUutQlqWppH6VOSntbzajr0NLY/JTNJjqcHsYJ6QaqZxJT1AndByTvw7cu/+I7pGSrs1MD+EmTqhMP+J8N70G2tQE8f+/4jz+OB28otcbYPlN/yZIlqGNiN9xvUS47VFpp+HTfwSTOnj1H28KmzjFGmwJh+pNPLoyOddzE+A5hXRBsPis2ptbILB2B/D8tMDHg/5vk/W6508eiq+jvYdYWdhQMkQ/Z8akn+8vysxQ7YMrnf02GlU9PlMgXRPeYXCBKlDsQWycePHmtBz9o0Lsvv+KoPO55lvTNJg+vnXMCfLlX5GuD81G/l3qlYsV4V4Bbm68g/261M8rvdawOzh9o2D9ZJkEPJABAQDwyHr0RdUT9+Rc4AAA+P9WX7h0FA///JksCQIhtLMDc/VwlwG+0dEuo4M+acS6G0RgknraJyVnrfRs7O8Y4o0BXmFDadQzGNPCKEFproX5l51xz97cGjTyLJgvCd+GXdYSmK2bIQbcBIIbLjuK9yMt2iO3slbfi86IdfTNdb+jZiOExAJgQFN0qlraWHMhMYrBAwvGaOyy5UdDkKvDcYx6Oacn93PPUabstjiqpVoDKtjiEAT3eBCA8U95VCEnzqg8AXjiZqK3xEZEBX/EspzYmzSuB2h8mWpd9CyGwcT89rEwzZleznLDAYdQ029bvCr4eQ7pPy3MYjGpBsxcCl/PMFgBtR9K/eMvPKUD+MtmgGG62U1svcBFUl8VhJztLweuAVk0ONbPk158/j16CafC/c+TZicuqk1xpxCn3jA+UEsSlLtmAwgrJDC+ZGbmtY+P6GKA1llP0ApqruMaiUcCMnAjMzvtEk7oJDAZAfUg6FMR3YTyyuFPvKATChmzKr6RcSMxkpIVXYSnhfOxEqlqXtNUCxbuEhzk+8wHh/xo2awhgfwqOGq9BdYPLweM1kaedbxA1WqEmOpagQRAzYb3z2BdngJixDUdwyLfAay+D9Qxm7xYBn8kip1Q/49xgGuLiSFiWNQ72g2oSaomD98fBkZ0KL8eoF6zBUHABfcF2Rwv7UFy3b2eC0uY7Ch1kqFBtAA6Szg/AmqkV+d7APNGNh99CvmoBSt3Sc0K/0ksnIKPNBjk3AL2CD7ETFpf5sq9o3QMgImAthHhnyYXQNytVd3JHoLzI26jslszGuNIgukvWYxr5JLB7WewvWSJgi09lZP2wYG2WCoi9ADrB+yUBEnS+ZIlI+16yVKOj6cD2S5ZR+vIPJQjyszL9ttttJ6tNNhuglitbjpXUKvXrt8kWvXTUqm3TLYtaiS22UGvE8K5dtVcXeu005NWe0m6tjQYOvtVG8J2rdeu3zWHZ2GTwUt1oXFF44FXdObhXRDWLy2qF3ZNg88JKmfQLpfurcEB/Fyugqs6S1VUcTeeSlSmoudTnbflnyAUAAAA=) format("woff2"), url(data:application/font-woff;base64,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) format("woff"), url(MaterialIcons-Regular.ttf?a37b0c01c0baf1888ca812cc0508f6e2) format("truetype"); } -.material-icon { +@font-face { + font-family: 'iris'; + src: url(data:application/x-font-ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBj4AAAC8AAAAYGNtYXAXVtKpAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZqQ39AYAAAF4AAAVIGhlYWQRXgULAAAWmAAAADZoaGVhB8ID6AAAFtAAAAAkaG10eJIAEwUAABb0AAAAnGxvY2FaymAaAAAXkAAAAFBtYXhwADAAuQAAF+AAAAAgbmFtZZlKCfsAABgAAAABhnBvc3QAAwAAAAAZiAAAACAAAwPyAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpIgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6SL//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAQAAwAMAAsAABAAHAAsAAAEzESMREwERAyc3FQEAVVWVAWtVgoICwP4AAgD/AP8AAgD+pVtbtgAAAAAFAHMAgAOTAvoACwAnAEMAZwCKAAABIiY1NDYzMhYVFAYXIiYnJjY3PgE1NCYnLgE3PgEXHgEVFAYHIgYjIyImJy4BNTQ2NzYWFxYGBw4BFRQWFx4BBw4BIwUiJicmNjc+ATU0JicuATc+ARcWFx4BFxYVFAcOAQcGBw4BIwUiJicmJy4BJyY1NDc+ATc2NzYWFxYGBw4BFRQWFx4BBw4BAgAiMTEiIjExRAkYBQoIDyElJSEPCAoKIxM1Pj41BRAFzAUQBTU4PzQPIQoKCA8hJSUhDwgKBRgJAUYKEQUKAg41Pzo6DgIKCigOIhsbJgsKCQolGxwkCgwK/kAKCwUkGxwlCQoKCSUcGyQKJgoKAg41OD41DgIKCRMBbTEiIjExIiIxgAkKDigKE0cmJkcTCiMTDggJIm0+Pm0iBgEFIm0+Pm0iCQgODigKE0cmJkcTCiMTBQ5nCgoOIw8rfkNEfisKKA4PAQkdIyJOKysuLSsrTiIjHQkEBggFHSIjTiorLi4qK04jIh0PBw4PIw4rekhIeisJKA8JCgAABAAt/+0D0wOTABsAJwAvADgAAAEiBw4BBwYVFBceARcWMzI3PgE3NjU0Jy4BJyYDMhYVFAYjIiY1NDYlBy4BJzceAQE3HgEXBy4BJwIAYFVVfyUlJSV/VVVgYFVVfyUlJSV/VVVgJjQ0JiY0NAGGug4wIlRDZv1dug4wIlRDZh0DkyUlf1VVYGBVVX8lJSUlf1VVYGBVVX8lJf6HNCYmNDQmJjQzTSI2DrQdbf6qRiI2DrQiakgAAAEA+gAtAwADxgAZAAAJATY0JyYiBwEOARUUFhcBHgEzMjY3NjQnAQGNAW0TExQxD/5nCgkJCgGZChUODxQKExP+jQIGAW0TLRMUFP5nChMKCRoJ/mYKCQkKEy0TAXMAAAEBDf/zAxMDhgAYAAAJASYiBwYUFwkBBhQXHgEzMjY3AT4BNTQmAvr+ZhMtExMTAW3+kxMTCRUPDhUJAZoKCRUB7QGZFBQTLRP+k/6UFCwUCQoKCQGaChQPDggAAQBmACYDmgNaAAsAAAEnCQEHCQEXCQE3AQOaKf6P/o8pAXH+jykBcQFxKf6PAzEp/o8BcSn+j/6PKQFx/o8pAXEAAAAEAGQAFQOcA2sAWgCdAKoAtgAAAT4BNTQmJzc+AS8BLgEjIgYjBy4BLwEuASsBIgYPAQ4BByciJiMiBg8BBhYfAQ4BFRQWFwcOAR8BHgEzMjYzNx4BHwEeATsBMjY/AT4BNxcyFjMyNj8BNiYvASceARUUBhUHHwEHLwEHDgEPAyMvAi4BLwEPASc/ASc0JjU0NjU3LwE3HwE3PgE/AzMfAh4BHwE/ARcPARcnIgYVFBYzMjY1NCYjESImNTQ2MzIWFRQGAz0BAgIBWgYDBFUDCgYCBAFqESQUEAEMCKoIDAEQFCQRagIEAQYKA1UEAwZaAQICAVoGAwRVAwoGAgQBahEkFBABDAiqCAwBEBQkEWoCBAEGCgNVBAMGWlQBAQIGJi4eNi0mDhoOLQcIPAgHLQ4aDSYuNh4uJgYCAgYmLh42LSYOGg4tBwg7CQYuDRoNJy02Hi0mBulHZGRHR2RkRyMyMiMjMjIBlgoVCwsVCkYFDwiTBQYBKw0VCHEHCwsHcQgWDCsBBgWTCA8FRgoVCwsVCkYFDwiTBQYBKw0VCHEHCwsHcQgWDCsBBgWTCA8FRkkKDgcHDwkwHiQ0FhIdChAFEzA5OTATBg8JHhIWNCMeMAoQBgYQCTAeJDQWEh0KEAUTMDk5MBMGDwkeEhY0JB4wjGRHR2RkR0dk/wAyIyMyMiMjMgAAAwAt/+0DzQOTABwAIQAuAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NicuAScmIxMFEyUDJxQGIyImNTQ2MzIWFQIAYFVVfyUlJCR+VVZiYFRUfSQkAiMkflVVYIb+R7MBs605LSAgLS0gIC0DkyQkflVWYmBVVX8lJSQkflVWYmJWVX4kJP2trQGztP5Ghh8tLR8gLS0gAAACAK0AcwNTAvoABgANAAABBzMRMxEzFxEjESMXNwFTpoZAgOBAhqagAvrN/kYBuu0Buv5Gzc0AAAIAgAAVA4ADawAMACEAAAERMxEzESIHDgEHBhUHIxEjESMRIxEUFjMRMxEyNjURIxECq4BVLCcnOhEQ1lVVVlVkR1VHZFYCwP6r/qoDVhARMR8eHIABK/7VASv+1Udk/oABgGRHASv+1QAAAAMAgADAA4ACwAAEAAgADAAAJTM1IxUBFSE1ASE1IQGrqqr+1QMA/YACAP4AwFVVAgBVVf7VVgAAAQBaAC0DpgNaABkAAAEhNTQmKwEiBh0BDgEVERQWMyEyNjURNCYjA1r+uSsi+SIrExMrIQK0ISsrIQKzWiEsLCFnCSMU/hQiKysiAewiKwACAFUAawOrAxUAEQAVAAABISchIgYVAxQWMyEyNjURNCYDIREhA1X+q1X/ACQxATIkAqokMjIk/VYCqgLAVTIj/gAjMjIjAasjMv4AAasAAAQAgABAA4YDRgADAAcACwAPAAATIREhBSERIQEhESEBIREhgAFA/sABxgFA/sD+OgFA/sABxgFA/sADRv7Ahv7AAUD+wAMG/sAAAAABAGAAOgOSA0kALgAAEzA3PgE3NhcWFx4BBwYHJicuAScmJzAXHgEXFhcGJjEnMAcOAScmJyYnLgEnJgdgLy+ZYGBjYkBBOwYHKzIrK2dFRWdFRbJUUx0KQ0YYF1E1NjxkGxocICBxArokJT8HBjw5QkGGQEA3TDs7XSQkHzAwo2xseDUicw4ODQsLM1lZWY0sKwIAAwBtAGADkwMmAAQACQAOAAATIRUhNREhFSE1ESEVITVtAyb82gMm/NoDJvzaAyZ5ef7aenr+2np6AAAAAgB9AF4DkQMQAAsAFgAAASEnIRUjESE1MxExAyMRIScjNTMXIREDkf7ZY/7ZYwKyYjEx/thilOJiAQsCrWNj/bFjAez+RQFZYjJj/nYAAAACAEYABgOmA4AAGAA2AAABJiIHAQ4BFRQWHwEeATMyNjMBPgE1NCYnAS4BIyIGBw4BFRQWHwEeATM4ATEyNjc2Nz4BJyYnAdoKIAr+rQUICAVgBQsKBRAEAY0FCAgFAQAhVTAwVyYmIAQPxgUaDgVrHSQSEgEQESICMwoK/nMEDAkKCwVgBQgHAVMKDAoKCwUBoCElJSEnaAUJGgnHBQ4gJiIsK10tLSQAAAAAAQAt/+YD2gOmAD4AAAEuAQcFDgEVES4BIyIHDgEHBhUUFx4BFxYzMjc+ATc2NRElES4BIyIHDgEHBhUUFx4BFxYzMjc+ATc2NRE0JgPGCRMK/eAOEhg4HSkkJDYQDw8QNiQkKSkkJDYQEAHGGDgdKSQkNg8QEA82JCQpKSQkNhAQCgOgBQYFgAQaDv5ZDxEPEDYkJCkpJCQ2EBAQEDYkJCkCJm3+kw8RDxA2JCQpKSQkNhAQEBA2JCQpAk0JEwAAAgEAAJUDAALrAAMABwAAJTMRIyERMxEBAKurAVWrlQJW/aoCVgAAAAIBVQCVAysC6wACAAYAAAEXBwMRCQEBq+HhVgHW/ioCT4+PAbr9qgErASsAAwAA/8AEAAPAAD0AWQB2AAAlOgEzPgEnMDQxMDQxETcVLgEHDgEXHgEzOgE3PgEnOAExMDQxETU0JicmIiM4ATEFIgYVES4BBw4BFx4BMxcyNz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxYTMhceARcWFRQHDgEHBiMiJy4BJyY1NDc+ATc2MwFwAwUDIy4CuQgPCCQuAwIvIQIGAyMuAgICAQQB/twDBAgPCCQuAwIvIZBqXV2LKSgoKYtdXWpqXV2LKSgoKYtdXWpSR0hrHyAgH2tIR1JSR0hrHyAgH2tIR1K8BTgjAQEBACK8AQEBBDkjICwBBDgkAQF/AQIEAgEyBQP+3AIBAQQ5IyEr/Cgpi11dampdXYspKCgpi11dampdXYspKAOLIB9rSEdSUkdIax8gIB9rSEdSUkdIax8gAAAABABmAAYDwAOGACIAJwAsADEAAAEuAQcOARURLgEjIgcOAQcGFRQXHgEXFjMyNz4BNzY1ERc3ASEVITUVIRUhNRUhFSE1AsAKGw4KEBg4HSgkJTYPEBAPNiQlKCkkJDYQELNA/KYBh/55AYf+eQGH/nkDegkIBQkVDv4ZDxEPEDYkJCkpJCQ2EBAQEDYkJCkCILpAAQBZWZlaWppaWgAAAAIAgAAVA4ADawAJABMAAAEhFTcnFSERMzUBITUHFzUhESMVASsBqqur/gBWAar+VqurAgBWApWAq6uA/wCq/laAq6uAAQCqAAIAgABWA2oDQAAiAC8AAAEjJz4BNTQnLgEnJiMiBw4BBwYVFBceARcWMzI2NxcVFzcnISImNTQ2MzIWFRQGIwKVIQwfJBYWSzMyOjkzMksWFhYWSzIzOTRcJQvWP9X/AE9xcU9QcHBQAWsLJVw0OTMySxYWFhZLMjM5OjIzSxYWJB8MIdU/1nBQT3FxT1BwAAgAgQA8A38DOAADAAgADQASABYAGwAgACUAABMhESEBIRUhNRUhFSE1FSEVITUFIREhASEVITUVIRUhNRUhFSE1gQET/u0BUwGr/lUBq/5VAav+Vf6tARP+7QFTAav+VQGr/lUBq/5VAzj+7QETNzeANzeANzfG/u4BEjY2gDY2gDY2AAUAxgBGAzoDIAAkADIAPwBNAFsAAAE0Jy4BJyYjIgcOAQcGFTgBMRE4ATEVFBceARcWMzI3PgE3NjUnDgEjIiYnNR4BMzI2NwMyFhcOASMiJicxPgEHHgEzMjY3FQ4BIyImJxMiJic1HgEzMjY3FQ4BAzohIWA2NysrNzZgISEhIWA2NysrNzZgISFABX14eH0FMJA6OpAw+nh9BQV9eHh9BQV9gjCQOjqQMAV9eHh9Bfp4fQU1kDU6kDAFfQKtIRcWGgYFBQYaFhch/rOmIhYWGwUGBgUbFhYipgopKQpaFBMTFAEmKgkKKSgEDyuAExMTE1oJKioJ/oAqCmAYDxMUWg4sAAAAAAMAqwBrA1UDFQAEAAwAFAAAAScHFzc3FwEXARc1IxMHFwczNQcnAcTdPNw9p1f96TwCF1fqDjyFV+pXhQI53DzcPNxX/ek8AhdX6v5vPIZX6leGAAMBAADAAwACwAADAAcACwAAJQkBERMXBzUlMxEjAQABa/6VVYKCAVZVVcABAAEA/gABW1tbtqX+AAAAAAUAAgCeBAAC1QAaADUAUABhAIkAABMUFhceATc+ATc+AT0BNCYnLgEjIgYHDgEdARcUFhceATMyNjc+ATURNCYnLgEjIgYHDgEVERcUFhceATMyNjc+ATURNCYnLgEjIgYHDgEVERcUFjMyNjURNCYnJgYHDgEVExE0Njc+ATMyFhceARceARc+ATMyFhceARUUBgcOASMhLgEnLgE1MQIHBgcPCAcLAwMDBQUGDAgHDAUFBW0FBQUMCAgMBQUFBQUFDQcHDAYFBW0FBQUNCAcNBQUEBQUFDAcIDAUGBW0SEhESDAwIEAcICHAHCBAfECREHyAzExMXAw4fESE5GBcYGBcYOSH+YgIDAQEBAQQKDgUFAwEBBgMEDQmKBwwGBQUFBQYMB4o7BwsDAwQEAwMLBwFBBwwGBQUFBQUNB/6/EAcKAwQDAwQDCgcBJgcNBQUGBgUFDQf+2gENDQ0NAdwUFgMCBQYHEgv+FgIGDA8CBAQRERIuHh5BJAcGGBcYOCEiORcYFwEDAgEEAQAAAAAFANUAFQMrA2sAEAAUACAALQA5AAABISIGFREUFjMFMjY1ETQmIwERIREDMjY1NCYjIgYVFBYXIgYVFBYzMjY1NCYjESImNTQ2MzIWFRQGAtX+ViQyMiQBqiQyMiT+VgGq1SMyMiMkMTEkR2RkR0dkZEcjMjIjIzIyA2syJP1WJDEBMiQCqiQy/QACqv1WAdUyIyQyMiQjMlVkR0dkZEdHZP8AMiMjMjIjIzIABgCr/+sDVQOVABAAFQAiAC4AOwBFAAABISIGFREUFjMFMjY1ETQmIwMhESERAzI2NTQmIyIGFRQWMxEyNjU0JiMiBhUUFjcyFhUUBiMiJjU0NjMBIxEUFjMhNSERAwn+mSAtLSABZx8tLR8J/qsBVaskMjIkIzIyIz5YWD49WFg9GyUlGxomJhr+q1UxJAGr/lUDlS0f/ZkgLAEtIAJnHy39VgJV/asBgDEkJDExJCQx/qpYPj1YWD0+WNYmGhslJRsaJgEA/VUjMlUCqwAAAAQAcgAzA4YDRwAcADYAUQBsAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmIxMOAScmJy4BBwYHBiYnJjY3Njc2FhcWFx4BNw4BJyYnLgEHBgcGJicmNjc2NzYWFxYXHgEHNyYnLgEHBgcGJicmNjc2NzYWFxYXHgEHDgEnAfxRSEhrHx8fH2tISFFRSEhrHx8eH2tISFK1BRMJIycnVzAvNAoQAwMLCTg1NGAsKycKBCsHGAooMTFoNDQvDBYDAwsLNjs7dTY3LgkGBwQwPDx+OzstDxsEBA4ONENDjERENg4HBwcfDQNHHx9rSEhRUkdIax8fHx9rSEhRUUhIax8f/ccJBQYVDQ0JAwQMAwwJChADDQQDCg8OGAQVZAsGBxgQEAwEBA8DCwwMFwMQBAQOEhIcBBkKbhwQEAoFBQ4FDw0PGgUPBgYMEhIhBx4OCgcHAAAAAQAtABMD4AONADQAAAEiBgcDBQ4BFRQWHwEDHAEVFBYXHgEzMjY3JQUeATMyNjc+ATU8ATUDNz4BNTQmIyUDLgEjAgAKCwWA/ucTDQgFzDMCBQQKBQULCQEAAQAFCwoFCQUFAjTNCgMSDv7mgA4OCgONCw//ACYFCwoFEATH/ucFAwUFCgQFAgIFhoYFAgIFBAoFBQMFARnHCQsFChAmAQAPCwACAQAAwAMAAsAAAwAHAAABESERJSERIQKr/qoBq/4AAgACa/6qAVZV/gAAAAEAAAAAAABqJM8pXw889QALBAAAAAAA1x/gRAAAAADXH+BEAAD/wAQAA8YAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAACcEAAAAAAAAAAAAAAACAAAABAABAAQAAHMEAAAtBAAA+gQAAQ0EAABmBAAAZAQAAC0EAACtBAAAgAQAAIAEAABaBAAAVQQAAIAEAABgBAAAbQQAAH0EAABGBAAALQQAAQAEAAFVBAAAAAQAAGYEAACABAAAgAQAAIEEAADGBAAAqwQAAQAEAAACBAAA1QQAAKsEAAByBAAALQQAAQAAAAAAAAoAFAAeADwBCgFmAZYBxAHmAuoDNgNSA4gDpAPMA/QEGgRkBIIEqgUABWAFdAWKBiwGfAagBugHKgeuB9gH9gi+CRQJfAooCnoKkAABAAAAJwC3AAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABwAAAAEAAAAAAAIABwBgAAEAAAAAAAMABwA2AAEAAAAAAAQABwB1AAEAAAAAAAUACwAVAAEAAAAAAAYABwBLAAEAAAAAAAoAGgCKAAMAAQQJAAEADgAHAAMAAQQJAAIADgBnAAMAAQQJAAMADgA9AAMAAQQJAAQADgB8AAMAAQQJAAUAFgAgAAMAAQQJAAYADgBSAAMAAQQJAAoANACkaWNvbW9vbgBpAGMAbwBtAG8AbwBuVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwaWNvbW9vbgBpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuUmVndWxhcgBSAGUAZwB1AGwAYQByaWNvbW9vbgBpAGMAbwBtAG8AbwBuRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"), url(data:application/font-woff;base64,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) format("woff"), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9Imljb21vb24iIGhvcml6LWFkdi14PSIxMDI0Ij4KPGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEwMjQiIGFzY2VudD0iOTYwIiBkZXNjZW50PSItNjQiIC8+CjxtaXNzaW5nLWdseXBoIGhvcml6LWFkdi14PSIxMDI0IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjA7IiBob3Jpei1hZHYteD0iNTEyIiBkPSIiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAwOyIgZ2x5cGgtbmFtZT0iYmFjayIgZD0iTTI1NiA3MDRoODUuMzMzdi01MTJoLTg1LjMzM3Y1MTJ6TTQwNS4zMzMgNDQ4bDM2Mi42NjctMjU2djUxMmwtMzYyLjY2Ny0yNTZ6TTY4Mi42NjcgMzU2LjY5M2wtMTI5LjI4IDkxLjMwNyAxMjkuMjggOTEuMzA3di0xODIuNjEzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDE7IiBnbHlwaC1uYW1lPSJicm9hZGNhc3QiIGQ9Ik01MTIgMzY0LjhjLTQ0LjggMC04My4yIDM4LjQtODMuMiA4My4yczM4LjQgODMuMiA4My4yIDgzLjIgODMuMi0zOC40IDgzLjItODMuMi0zOC40LTgzLjItODMuMi04My4yek02MTQuNCAyMzYuOGMtMTIuOCAwLTMyIDYuNC0zOC40IDE5LjItMTIuOCAxOS4yLTYuNCA1MS4yIDEyLjggNjQgNDQuOCAyNS42IDcwLjQgNzYuOCA3MC40IDEyOHMtMjUuNiAxMDIuNC03MC40IDEyOGMtMTkuMiAxMi44LTI1LjYgMzguNC0xMi44IDY0IDEyLjggMTkuMiAzOC40IDI1LjYgNjQgMTIuOCA3MC40LTQ0LjggMTE1LjItMTIxLjYgMTE1LjItMjA0LjhzLTQ0LjgtMTYwLTExNS4yLTIwNC44Yy02LjQgMC0xOS4yLTYuNC0yNS42LTYuNHpNNDA5LjYgMjM2LjhjLTYuNCAwLTE5LjIgMC0yNS42IDYuNC03MC40IDQ0LjgtMTA4LjggMTIxLjYtMTA4LjggMjA0LjhzNDQuOCAxNjAgMTE1LjIgMjA0LjhjMTkuMiAxMi44IDQ0LjggNi40IDU3LjYtMTIuOHM2LjQtNTEuMi0xMi44LTY0Yy00NC44LTI1LjYtNzAuNC03Ni44LTcwLjQtMTI4czI1LjYtMTAyLjQgNzAuNC0xMjhjMTkuMi0xMi44IDI1LjYtMzguNCAxMi44LTY0LTYuNC02LjQtMjUuNi0xOS4yLTM4LjQtMTkuMnpNNzM2IDEzNC40Yy0xMi44IDAtMjUuNiA2LjQtMzIgMTkuMi0xMi44IDE5LjItMTIuOCA0NC44IDYuNCA2NCA3MC40IDU3LjYgMTE1LjIgMTQ3LjIgMTE1LjIgMjM2LjhzLTM4LjQgMTc5LjItMTE1LjIgMjM2LjhjLTE5LjIgMTIuOC0xOS4yIDQ0LjgtNi40IDY0czQ0LjggMTkuMiA2NCA2LjRjODkuNi03Ni44IDE0Ny4yLTE4NS42IDE0Ny4yLTMwNy4ycy01MS4yLTIzMC40LTE0Ny4yLTMwNy4yYy0xMi44LTEyLjgtMTkuMi0xMi44LTMyLTEyLjh6TTI4OCAxMjhjLTEyLjggMC0xOS4yIDYuNC0yNS42IDEyLjgtOTYgNzYuOC0xNDcuMiAxODUuNi0xNDcuMiAzMDcuMnM1MS4yIDIzMC40IDE0Ny4yIDMwNy4yYzEyLjggMTkuMiA0NC44IDEyLjggNTcuNi02LjRzMTIuOC00NC44LTYuNC02NGMtNzAuNC01Ny42LTEwOC44LTE0MC44LTEwOC44LTIzNi44czQ0LjgtMTc5LjIgMTE1LjItMjM2LjhjMTkuMi0xMi44IDE5LjItNDQuOCA2LjQtNjQtMTIuOC0xMi44LTI1LjYtMTkuMi0zOC40LTE5LjJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMjsiIGdseXBoLW5hbWU9ImNkIiBkPSJNNTEyIDkxNS4yYy0yNTYgMC00NjcuMi0yMTEuMi00NjcuMi00NjcuMnMyMTEuMi00NjcuMiA0NjcuMi00NjcuMiA0NjcuMiAyMTEuMiA0NjcuMiA0NjcuMmMwIDI1Ni0yMTEuMiA0NjcuMi00NjcuMiA0NjcuMnpNNTEyIDUzNy42YzUxLjIgMCA4OS42LTM4LjQgODkuNi04OS42cy0zOC40LTg5LjYtODkuNi04OS42LTg5LjYgMzguNC04OS42IDg5LjYgMzguNCA4OS42IDg5LjYgODkuNnpNODY0IDU4OC44bC0xODUuNi03Ni44Yy0xOS4yIDQ0LjgtNTEuMiA4My4yLTk2IDEwMi40bDgzLjIgMTc5LjJjODkuNi0zOC40IDE2MC0xMTUuMiAxOTguNC0yMDQuOHpNMTYwIDMxMy42bDE4NS42IDcwLjRjMTkuMi00NC44IDUxLjItODMuMiA5Ni0xMDIuNGwtODMuMi0xNzkuMmMtODkuNiA0NC44LTE2MCAxMTUuMi0xOTguNCAyMTEuMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAzOyIgZ2x5cGgtbmFtZT0iY2hldnJvbi1sZWZ0IiBkPSJNMzk2LjggNTE4LjRsMzY0LjggMzY0LjhjMjUuNiAyNS42IDI1LjYgNTcuNiAwIDgzLjJzLTY0IDI1LjYtODMuMiAwbC00MDkuNi00MDkuNmMtMTIuOC0xMi44LTE5LjItMjUuNi0xOS4yLTM4LjRzNi40LTMyIDE5LjItNDQuOGw0MDkuNi00MDkuNmMxMi44LTEyLjggMjUuNi0xOS4yIDQ0LjgtMTkuMnMzMiA2LjQgNDQuOCAxOS4yYzI1LjYgMjUuNiAyNS42IDU3LjYgMCA4My4ybC0zNzEuMiAzNzEuMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA0OyIgZ2x5cGgtbmFtZT0iY2hldnJvbi1yaWdodCIgZD0iTTc2MS42IDQ5Mi44bC00MDkuNiA0MDkuNmMtMjUuNiAyNS42LTU3LjYgMjUuNi04My4yIDBzLTI1LjYtNTcuNiAwLTgzLjJsMzY0LjgtMzY0LjgtMzY0LjgtMzY0LjhjLTI1LjYtMjUuNi0yNS42LTU3LjYgMC04My4yIDEyLjgtMTIuOCAyNS42LTE5LjIgNDQuOC0xOS4yczMyIDYuNCA0NC44IDE5LjJsNDA5LjYgNDA5LjZjMTIuOCAxMi44IDE5LjIgMjUuNiAxOS4yIDQ0LjhzLTE5LjIgMTkuMi0yNS42IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDU7IiBnbHlwaC1uYW1lPSJjbG9zZSIgZD0iTTkyMS42IDgxNi42NGwtNDAuOTYgNDAuOTYtMzY4LjY0LTM2OC42NC0zNjguNjQgMzY4LjY0LTQwLjk2LTQwLjk2IDM2OC42NC0zNjguNjQtMzY4LjY0LTM2OC42NCA0MC45Ni00MC45NiAzNjguNjQgMzY4LjY0IDM2OC42NC0zNjguNjQgNDAuOTYgNDAuOTYtMzY4LjY0IDM2OC42NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA2OyIgZ2x5cGgtbmFtZT0iY29nIiBkPSJNODI5LjAxMyA0MDYuMTg3YzEuNzA3IDEzLjY1MyAyLjk4NyAyNy4zMDcgMi45ODcgNDEuODEzcy0xLjI4IDI4LjE2LTIuOTg3IDQxLjgxM2w5MC4wMjcgNzAuNGM4LjEwNyA2LjQgMTAuMjQgMTcuOTIgNS4xMiAyNy4zMDdsLTg1LjMzMyAxNDcuNjI3Yy0zLjg0IDYuODI3LTExLjA5MyAxMC42NjctMTguNzczIDEwLjY2Ny0yLjU2IDAtNS4xMi0wLjQyNy03LjI1My0xLjI4bC0xMDYuMjQtNDIuNjY3Yy0yMi4xODcgMTcuMDY3LTQ2LjA4MCAzMS4xNDctNzIuMTA3IDQxLjgxM2wtMTYuMjEzIDExMy4wNjdjLTEuMjggMTAuMjQtMTAuMjQgMTcuOTItMjAuOTA3IDE3LjkyaC0xNzAuNjY3Yy0xMC42NjcgMC0xOS42MjctNy42OC0yMC45MDctMTcuOTJsLTE2LjIxMy0xMTMuMDY3Yy0yNi4wMjctMTAuNjY3LTQ5LjkyLTI1LjE3My03Mi4xMDctNDEuODEzbC0xMDYuMjQgNDIuNjY3Yy0yLjU2IDAuODUzLTUuMTIgMS4yOC03LjY4IDEuMjgtNy4yNTMgMC0xNC41MDctMy44NC0xOC4zNDctMTAuNjY3bC04NS4zMzMtMTQ3LjYyN2MtNS41NDctOS4zODctMi45ODctMjAuOTA3IDUuMTItMjcuMzA3bDkwLjAyNy03MC40Yy0xLjcwNy0xMy42NTMtMi45ODctMjcuNzMzLTIuOTg3LTQxLjgxM3MxLjI4LTI4LjE2IDIuOTg3LTQxLjgxM2wtOTAuMDI3LTcwLjRjLTguMTA3LTYuNC0xMC4yNC0xNy45Mi01LjEyLTI3LjMwN2w4NS4zMzMtMTQ3LjYyN2MzLjg0LTYuODI3IDExLjA5My0xMC42NjcgMTguNzczLTEwLjY2NyAyLjU2IDAgNS4xMiAwLjQyNyA3LjI1MyAxLjI4bDEwNi4yNCA0Mi42NjdjMjIuMTg3LTE3LjA2NyA0Ni4wODAtMzEuMTQ3IDcyLjEwNy00MS44MTNsMTYuMjEzLTExMy4wNjdjMS4yOC0xMC4yNCAxMC4yNC0xNy45MiAyMC45MDctMTcuOTJoMTcwLjY2N2MxMC42NjcgMCAxOS42MjcgNy42OCAyMC45MDcgMTcuOTJsMTYuMjEzIDExMy4wNjdjMjYuMDI3IDEwLjY2NyA0OS45MiAyNS4xNzMgNzIuMTA3IDQxLjgxM2wxMDYuMjQtNDIuNjY3YzIuNTYtMC44NTMgNS4xMi0xLjI4IDcuNjgtMS4yOCA3LjI1MyAwIDE0LjUwNyAzLjg0IDE4LjM0NyAxMC42NjdsODUuMzMzIDE0Ny42MjdjNS4xMiA5LjM4NyAyLjk4NyAyMC45MDctNS4xMiAyNy4zMDdsLTkwLjAyNyA3MC40ek03NDQuNTMzIDQ3OS4xNDdjMS43MDctMTMuMjI3IDIuMTMzLTIyLjE4NyAyLjEzMy0zMS4xNDdzLTAuODUzLTE4LjM0Ny0yLjEzMy0zMS4xNDdsLTUuOTczLTQ4LjIxMyAzNy45NzMtMjkuODY3IDQ2LjA4MC0zNS44NC0yOS44NjctNTEuNjI3LTU0LjE4NyAyMS43Ni00NC4zNzMgMTcuOTItMzguNC0yOS4wMTNjLTE4LjM0Ny0xMy42NTMtMzUuODQtMjMuODkzLTUzLjMzMy0zMS4xNDdsLTQ1LjIyNy0xOC4zNDctNi44MjctNDguMjEzLTguNTMzLTU3LjZoLTU5LjczM2wtOC4xMDcgNTcuNi02LjgyNyA0OC4yMTMtNDUuMjI3IDE4LjM0N2MtMTguMzQ3IDcuNjgtMzUuNDEzIDE3LjQ5My01Mi40OCAzMC4yOTNsLTM4LjgyNyAyOS44NjctNDUuMjI3LTE4LjM0Ny01NC4xODctMjEuNzYtMjkuODY3IDUxLjYyNyA0Ni4wODAgMzUuODQgMzcuOTczIDI5Ljg2Ny01Ljk3MyA0OC4yMTNjLTEuMjggMTMuMjI3LTIuMTMzIDIzLjA0MC0yLjEzMyAzMS41NzNzMC44NTMgMTguMzQ3IDIuMTMzIDMxLjE0N2w1Ljk3MyA0OC4yMTMtMzcuOTczIDI5Ljg2Ny00Ni4wODAgMzUuODQgMjkuODY3IDUxLjYyNyA1NC4xODctMjEuNzYgNDQuMzczLTE3LjkyIDM4LjQgMjkuMDEzYzE4LjM0NyAxMy42NTMgMzUuODQgMjMuODkzIDUzLjMzMyAzMS4xNDdsNDUuMjI3IDE4LjM0NyA2LjgyNyA0OC4yMTMgOC41MzMgNTcuNmg1OS4zMDdsOC4xMDctNTcuNiA2LjgyNy00OC4yMTMgNDUuMjI3LTE4LjM0N2MxOC4zNDctNy42OCAzNS40MTMtMTcuNDkzIDUyLjQ4LTMwLjI5M2wzOC44MjctMjkuODY3IDQ1LjIyNyAxOC4zNDcgNTQuMTg3IDIxLjc2IDI5Ljg2Ny01MS42MjctNDUuNjUzLTM2LjI2Ny0zNy45NzMtMjkuODY3IDUuOTczLTQ4LjIxM3pNNTEyIDYxOC42NjdjLTk0LjI5MyAwLTE3MC42NjctNzYuMzczLTE3MC42NjctMTcwLjY2N3M3Ni4zNzMtMTcwLjY2NyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2NyA3Ni4zNzMgMTcwLjY2NyAxNzAuNjY3LTc2LjM3MyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2N3pNNTEyIDM2Mi42NjdjLTQ2LjkzMyAwLTg1LjMzMyAzOC40LTg1LjMzMyA4NS4zMzNzMzguNCA4NS4zMzMgODUuMzMzIDg1LjMzMyA4NS4zMzMtMzguNCA4NS4zMzMtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzMy04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNzsiIGdseXBoLW5hbWU9ImNvbXBhc3MiIGQ9Ik01MTIgOTE1LjJjLTI1NiAwLTQ2Ny4yLTIwNC44LTQ2Ny4yLTQ2Ny4yIDAtMjU2IDIwNC44LTQ2Ny4yIDQ2Ny4yLTQ2Ny4yIDI1NiAwIDQ2MC44IDIwNC44IDQ2MC44IDQ2Ny4yIDYuNCAyNjIuNC0yMDQuOCA0NjcuMi00NjAuOCA0NjcuMnpNNjQ2LjQgMzIwbC00NDEuNi0xNzIuOCAxNzkuMiA0MzUuMiA0MzUuMiAxNzkuMi0xNzIuOC00NDEuNnpNNTg4LjggNDU0LjRjMC00Mi40MTUtMzQuMzg1LTc2LjgtNzYuOC03Ni44cy03Ni44IDM0LjM4NS03Ni44IDc2LjhjMCA0Mi40MTUgMzQuMzg1IDc2LjggNzYuOCA3Ni44czc2LjgtMzQuMzg1IDc2LjgtNzYuOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA4OyIgZ2x5cGgtbmFtZT0iY29ubmVjdGlvbiIgZD0iTTMzOS4yIDc2MS42bC0xNjYuNC0yMDQuOGgxMzQuNHYtNDQxLjZoNjR2NDQxLjZoMTI4ek03MjMuMiAzMjB2NDQxLjZoLTY0di00NDEuNmgtMTM0LjRsMTY2LjQtMjA0LjggMTYwIDIwNC44eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDk7IiBnbHlwaC1uYW1lPSJjb25zdW1lIiBkPSJNNjgyLjY2NyA3MDR2LTM0MS4zMzNoMTI4di0zNDEuMzMzaDg1LjMzM3Y4NTMuMzMzYy0xMTcuNzYgMC0yMTMuMzMzLTk1LjU3My0yMTMuMzMzLTE3MC42Njd6TTQ2OS4zMzMgNTc2aC04NS4zMzN2Mjk4LjY2N2gtODUuMzMzdi0yOTguNjY3aC04NS4zMzN2Mjk4LjY2N2gtODUuMzMzdi0yOTguNjY3YzAtOTQuMjkzIDc2LjM3My0xNzAuNjY3IDE3MC42NjctMTcwLjY2N3YtMzg0aDg1LjMzM3YzODRjOTQuMjkzIDAgMTcwLjY2NyA3Ni4zNzMgMTcwLjY2NyAxNzAuNjY3djI5OC42NjdoLTg1LjMzM3YtMjk4LjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBhOyIgZ2x5cGgtbmFtZT0iZmlsdGVyIiBkPSJNNDI2LjY2NyAxOTJoMTcwLjY2N3Y4NS4zMzNoLTE3MC42Njd2LTg1LjMzM3pNMTI4IDcwNHYtODUuMzMzaDc2OHY4NS4zMzNoLTc2OHpNMjU2IDQwNS4zMzNoNTEydjg1LjMzM2gtNTEydi04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYjsiIGdseXBoLW5hbWU9ImZvbGRlciIgZD0iTTg1Ny42IDY5MS4yaC0zMjYuNHY4OS42YzAgNDQuOC0zMiA3Ni44LTc2LjggNzYuOGgtMjQ5LjZjLTQ0LjggMC03Ni44LTMyLTc2LjgtNzYuOHYtMTAyLjRjLTI1LjYtMTIuOC0zOC40LTM4LjQtMzguNC02NHYtNDkyLjhjMC00NC44IDMyLTc2LjggNzYuOC03Ni44aDY5MS4yYzQ0LjggMCA3Ni44IDMyIDc2LjggNzYuOHY0OTIuOGMwIDQ0LjgtMzIgNzYuOC03Ni44IDc2Ljh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYzsiIGdseXBoLW5hbWU9ImZvbGRlci1vcGVuIiBkPSJNODUzLjMzMyA3MDRoLTM0MS4zMzNsLTg1LjMzMyA4NS4zMzNoLTI1NmMtNDYuOTMzIDAtODQuOTA3LTM4LjQtODQuOTA3LTg1LjMzM2wtMC40MjctNTEyYzAtNDYuOTMzIDM4LjQtODUuMzMzIDg1LjMzMy04NS4zMzNoNjgyLjY2N2M0Ni45MzMgMCA4NS4zMzMgMzguNCA4NS4zMzMgODUuMzMzdjQyNi42NjdjMCA0Ni45MzMtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM3pNODUzLjMzMyAxOTJoLTY4Mi42Njd2NDI2LjY2N2g2ODIuNjY3di00MjYuNjY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGQ7IiBnbHlwaC1uYW1lPSJncmlkIiBkPSJNMTI4IDgzOC40aDMyMHYtMzIwaC0zMjB2MzIwek01ODIuNCAzODRoMzIwdi0zMjBoLTMyMHYzMjB6TTEyOCAzODRoMzIwdi0zMjBoLTMyMHYzMjB6TTU4Mi40IDgzOC40aDMyMHYtMzIwaC0zMjB2MzIweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGU7IiBnbHlwaC1uYW1lPSJsZWFmIiBkPSJNOTYgNjk3LjZjMCAwIDI3NS4yIDI0OS42IDUzNy42IDg5LjYgMjYyLjQtMTUzLjYgMzQ1LjYtMzU4LjQgMjMwLjQtNTA1LjYtMTM0LjQgMjA0LjgtMjA0LjggMzA3LjItNDgwIDM5MC40IDAgMCA0MzUuMi0yNzUuMiA1MTItNTk1LjItMTIuOC03MC40LTc2LjgtMTkuMi03Ni44LTE5LjJsLTcwLjQgMTE1LjJjMCAwLTEzNC40LTEwMi40LTI5NC40IDMyLTI2OC44IDIzNi44LTU3LjYgNDk5LjItMzU4LjQgNDkyLjh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwZjsiIGdseXBoLW5hbWU9Imxpc3QiIGQ9Ik0xMDguOCA4MDYuNGg4MDYuNHYtMTIxLjZoLTgwNi40djEyMS42ek0xMDguOCA1MTJoODA2LjR2LTEyMS42aC04MDYuNHYxMjEuNnpNMTA4LjggMjE3LjZoODA2LjR2LTEyMS42aC04MDYuNHYxMjEuNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEwOyIgZ2x5cGgtbmFtZT0ibG9jYWwiIGQ9Ik05MTMuMTUyIDY4NS4yNDhoLTI5NS41NTJsLTk4LjU2IDk4LjQ5NmgtMjk1LjQyNHYtOTguNDk2aC05OC40OTZ2LTU5MC45NzZoNjg5LjQ3MnY5OC40MzJoOTguNDk2djQ5Mi41NDRoMC4wNjR6TTg2My45MzYgMjQxLjk4NGgtNDkuMzQ0djM0NC43NjhoLTI5NS41NTJsLTk4LjQzMiA5OC41NmgtMTQ3LjcxMnY0OS4yMTZoMjI1Ljg1Nmw5OC40OTYtOTguNDk2aDI2Ni42ODh2LTM5NC4wNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxMTsiIGdseXBoLW5hbWU9Im1pYyIgZD0iTTQ3My42IDU2My4yYy0xMi44IDEyLjgtMzguNCAxMi44LTUxLjIgMGwtMzM5LjItMzk2LjhjLTYuNC02LjQtMTIuOC0xMi44LTEyLjgtMjUuNnM2LjQtMTkuMiAxMi44LTI1LjZsOTYtOTZjNi40LTYuNCAxMi44LTEyLjggMjUuNi0xMi44IDYuNCAwIDE5LjIgNi40IDI1LjYgNi40bDM5Ni44IDMzOS4yYzYuNCAxMi44IDEyLjggMTkuMiAxMi44IDMycy02LjQgMTkuMi0xMi44IDI1LjZsLTE1My42IDE1My42ek04ODMuMiA4MjUuNmMtNDQuOCA0NC44LTEwMi40IDcwLjQtMTY2LjQgNzAuNHMtMTIxLjYtMjUuNi0xNzIuOC03MC40Yy01MS4yLTUxLjItNzAuNC0xNDAuOC03MC40LTE0Ny4yIDAtMTIuOCAwLTMyIDE5LjItNDQuOGwxOTguNC0xOTguNGM2LjQtNi40IDI1LjYtMTkuMiA0NC44LTE5LjIgMCAwIDAgMCAwIDAgNi40IDAgMTAyLjQgMTkuMiAxNDAuOCA3MC40IDk2IDg5LjYgOTYgMjQzLjIgNi40IDMzOS4yeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTI7IiBnbHlwaC1uYW1lPSJtdXNpYyIgZD0iTTk2Ni40IDkyOGMtMTIuOCA2LjQtMjUuNiAxMi44LTM4LjQgNi40bC01NDQtMTI4Yy0xOS4yLTYuNC0zMi0yNS42LTMyLTQ0Ljh2LTQyMi40Yy0zMiAxOS4yLTcwLjQgMzItMTA4LjggMzItMTA4LjggMC0xOTguNC04OS42LTE5OC40LTE5OC40czg5LjYtMTk4LjQgMTk4LjQtMTk4LjRjMTA4LjggMCAxOTguNCA4OS42IDE5OC40IDE5OC40djU1MC40bDQ1NC40IDEwOC44di0zNjQuOGMtMzIgMTkuMi03MC40IDMyLTEwOC44IDMyLTEwOC44IDAtMTk4LjQtODkuNi0xOTguNC0xOTguNHM4OS42LTE5OC40IDE5OC40LTE5OC40IDE5OC40IDg5LjYgMTk4LjQgMTk4LjR2NTg4LjhjMCAxMi44LTYuNCAyNS42LTE5LjIgMzguNHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEzOyIgZ2x5cGgtbmFtZT0icGF1c2UiIGQ9Ik0yNTYgMTQ5LjMzM2gxNzAuNjY3djU5Ny4zMzNoLTE3MC42Njd2LTU5Ny4zMzN6TTU5Ny4zMzMgNzQ2LjY2N3YtNTk3LjMzM2gxNzAuNjY3djU5Ny4zMzNoLTE3MC42Njd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxNDsiIGdseXBoLW5hbWU9InBsYXkiIGQ9Ik00MjYuNjY3IDU5MS4zNmwyMjQuODUzLTE0My4zNi0yMjQuODUzLTE0My4zNnYyODYuNzJ6TTM0MS4zMzMgNzQ2LjY2N3YtNTk3LjMzM2w0NjkuMzMzIDI5OC42NjctNDY5LjMzMyAyOTguNjY3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTU7IiBnbHlwaC1uYW1lPSJwbGF5LWFsdCIgZD0iTTM2Ny45MjggMTg3LjgwM2MzLjU1NSAwIDcuMTY4IDAuMjIyIDEwLjc0NyAwLjY2NSA0Ny4xNjggNS44ODkgODIuNjE1IDQ4Ljg3NyA3OS4xMzcgOTUuODktMC4wMDMgMC4wODEtMC4wMDcgMC4xNTgtMC4wMTAgMC4yMzggMC4wODQgMC40ODMgMC4xMzEgMC45OCAwLjEzMSAxLjQ4N3YyNTUuODEybDE4NC42MzIgMzQuMzY5di0xODguNzQ4Yy05Ljg3NyAyLjQyNC0yMC4zNjkgMy4wMTItMzAuNzc3IDEuNzA2LTQ3LjI4NS01Ljg0NS04Mi44MTMtNDguOTY3LTc5LjIwMS05Ni4xMTUgMy4yNzctNDMuNDY4IDM4LjYxLTc2LjI0NiA4Mi4xOTItNzYuMjQ2IDMuNTgyIDAgNy4yMjUgMC4yMjggMTAuODI0IDAuNjc4IDQ3LjIxMSA1Ljg4NSA4Mi43MzYgNDkuMDA0IDc5LjE5IDk2LjA5OC0wLjAwNyAwLjA4MS0wLjAxMyAwLjE2MS0wLjAyMCAwLjI0MiAwLjA2NyAwLjQxNiAwLjA5NyAwLjg0MyAwLjA5NyAxLjI3OXYzODIuOTg2bDAuMDc3IDAuOTY3YzAuMjUyIDMuMDM4LTEuMjE5IDUuOTQ2LTMuNzU3IDcuNjQxLTEuOTE3IDEuMjgzLTQuMjc3IDEuNjgyLTYuNDkzIDEuMTk5LTAuMDQwLTAuMDA3LTAuMDgxLTAuMDE3LTAuMTIxLTAuMDI0bC0yOTIuMDM1LTQ5Ljg1NGMtNC4wMzItMC42ODgtNi45OC00LjE4My02Ljk4LTguMjczdi0yOTEuMzk3Yy05LjkwNCAyLjQ0OC0yMC4zOTMgMy4wNDgtMzAuNzY3IDEuNzQ5LTQ3LjMwNS01LjgzNS04Mi44MS00OC45NjEtNzkuMTQ3LTk2LjEyNSAzLjMyNy00My40NTggMzguNjk3LTc2LjIyOSA4Mi4yNzktNzYuMjI2ek01MTItNjRjMjgyLjMxOCAwIDUxMiAyMjkuNjgyIDUxMiA1MTJzLTIyOS42ODIgNTEyLTUxMiA1MTItNTEyLTIyOS42ODItNTEyLTUxMiAyMjkuNjgyLTUxMiA1MTItNTEyek01MTIgODQyLjUwMmMyMTcuNTI4IDAgMzk0LjUwMi0xNzYuOTcxIDM5NC41MDItMzk0LjUwMnMtMTc2Ljk3NC0zOTQuNTA1LTM5NC41MDItMzk0LjUwNS0zOTQuNTAyIDE3Ni45NzQtMzk0LjUwMiAzOTQuNTA1YzAgMjE3LjUyOCAxNzYuOTc0IDM5NC41MDIgMzk0LjUwMiAzOTQuNTAyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTY7IiBnbHlwaC1uYW1lPSJwbGF5bGlzdCIgZD0iTTcwNCA4ODkuNmMtMTIuOCAxMi44LTMyIDE5LjItNTEuMiAxMi44LTEyLjgtMTIuOC0yNS42LTI1LjYtMjUuNi00NC44di00ODYuNGMtMzIgMTkuMi03MC40IDMyLTEwOC44IDMyLTEwOC44IDAtMTk4LjQtODkuNi0xOTguNC0xOTguNHM4OS42LTE5OC40IDE5OC40LTE5OC40YzEwOC44IDAgMTk4LjQgODkuNiAxOTguNCAxOTguNHY1NDRsMTc5LjItMTg1LjYgNjQgNjQtMjU2IDI2Mi40ek0xMDIuNCA4ODMuMmgzOTAuNHYtODkuNmgtMzkwLjR2ODkuNnpNMTAyLjQgNzI5LjZoMzkwLjR2LTg5LjZoLTM5MC40djg5LjZ6TTEwMi40IDU3NmgzOTAuNHYtODkuNmgtMzkwLjR2ODkuNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTE3OyIgZ2x5cGgtbmFtZT0icmVwZWF0IiBkPSJNMjk4LjY2NyA2NjEuMzMzaDQyNi42Njd2LTEyOGwxNzAuNjY3IDE3MC42NjctMTcwLjY2NyAxNzAuNjY3di0xMjhoLTUxMnYtMjU2aDg1LjMzM3YxNzAuNjY3ek03MjUuMzMzIDIzNC42NjdoLTQyNi42Njd2MTI4bC0xNzAuNjY3LTE3MC42NjcgMTcwLjY2Ny0xNzAuNjY3djEyOGg1MTJ2MjU2aC04NS4zMzN2LTE3MC42Njd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxODsiIGdseXBoLW5hbWU9InNlYXJjaCIgZD0iTTY2MS4zMzMgMzYyLjY2N2gtMzMuNzA3bC0xMS45NDcgMTEuNTJjNDEuODEzIDQ4LjY0IDY2Ljk4NyAxMTEuNzg3IDY2Ljk4NyAxODAuNDggMCAxNTMuMTczLTEyNC4xNiAyNzcuMzMzLTI3Ny4zMzMgMjc3LjMzM3MtMjc3LjMzMy0xMjQuMTYtMjc3LjMzMy0yNzcuMzMzIDEyNC4xNi0yNzcuMzMzIDI3Ny4zMzMtMjc3LjMzM2M2OC42OTMgMCAxMzEuODQgMjUuMTczIDE4MC40OCA2Ni45ODdsMTEuNTItMTEuOTQ3di0zMy43MDdsMjEzLjMzMy0yMTIuOTA3IDYzLjU3MyA2My41NzMtMjEyLjkwNyAyMTMuMzMzek00MDUuMzMzIDM2Mi42NjdjLTEwNi4yNCAwLTE5MiA4NS43Ni0xOTIgMTkyczg1Ljc2IDE5MiAxOTIgMTkyIDE5Mi04NS43NiAxOTItMTkyLTg1Ljc2LTE5Mi0xOTItMTkyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTk7IiBnbHlwaC1uYW1lPSJzZWN0aW9ucyIgZD0iTTEyOS4xNTIgODIzLjgwOGgyNzQuNDk2di0yNzQuNDk2aC0yNzQuNDk2djI3NC40OTZ6TTQ2Ny41MiA4MjMuODA4aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiA2OTUuODA4aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiA1NjcuODA4aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTEyOS4xNTIgMzcwLjQ5NmgyNzQuNDk2di0yNzQuNDk2aC0yNzQuNDk2djI3NC40OTZ6TTQ2Ny41MiAzNzAuNDk2aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiAyNDIuNDk2aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6TTQ2Ny41MiAxMTQuNDk2aDQyNy4zOTJ2LTU0LjQ2NGgtNDI3LjM5MnY1NC40NjR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxYTsiIGdseXBoLW5hbWU9InNlcnZlciIgZD0iTTgyNS42IDY4NC44YzAgODkuNi0xOTguNCAxMTUuMi0zMTMuNiAxMTUuMnMtMzEzLjYtMjUuNi0zMTMuNi0xMTUuMmMwIDAgMCAwIDAgMHYtMzMyLjhjMCAwIDAgMCAwIDB2LTE2Ni40YzAtODkuNiAxOTguNC0xMTUuMiAzMTMuNi0xMTUuMnMzMTMuNiAyNS42IDMxMy42IDExNS4ydjQ5OS4yek03NjEuNiAzNTJjLTYuNC0xMi44LTg5LjYtNTEuMi0yNDkuNi01MS4ycy0yNDMuMiAzOC40LTI0OS42IDUxLjJ2ODkuNmM2NC0yNS42IDE3Mi44LTM4LjQgMjQ5LjYtMzguNHMxODUuNiAxMi44IDI0OS42IDM4LjR2LTg5LjZ6TTUxMiA3MzZjMTYwIDAgMjQzLjItMzguNCAyNDkuNi01MS4yLTYuNC0xMi44LTg5LjYtNTEuMi0yNDkuNi01MS4ycy0yNDMuMiAzOC40LTI0OS42IDQ0Ljh2MGM2LjQgMTkuMiA4OS42IDU3LjYgMjQ5LjYgNTcuNnpNMjYyLjQgNjA4YzY0LTI1LjYgMTcyLjgtMzguNCAyNDkuNi0zOC40czE4NS42IDEyLjggMjQ5LjYgMzguNHYtODkuNmMtNi40LTEyLjgtODkuNi01MS4yLTI0OS42LTUxLjJzLTI0My4yIDM4LjQtMjQ5LjYgNTEuMnY4OS42ek01MTIgMTM0LjRjLTE2MCAwLTI0My4yIDM4LjQtMjQ5LjYgNTEuMnY5NmM3MC40LTMyIDE3OS4yLTM4LjQgMjQ5LjYtMzguNCA3Ni44IDAgMTg1LjYgMTIuOCAyNDkuNiAzOC40di04OS42Yy02LjQtMTkuMi04OS42LTU3LjYtMjQ5LjYtNTcuNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTFiOyIgZ2x5cGgtbmFtZT0ic2h1ZmZsZSIgZD0iTTQ1MS44NCA1NjguNzQ3bC0yMjEuMDEzIDIyMC41ODctNjAuMTYtNjAuMTYgMjIwLjU4Ny0yMjAuNTg3IDYwLjU4NyA2MC4xNnpNNjE4LjY2NyA3ODkuMzMzbDg3LjA0MC04Ny4wNDAtNTM1LjA0MC01MzUuNDY3IDYwLjE2LTYwLjE2IDUzNS40NjcgNTM1LjA0MCA4Ny4wNDAtODcuMDQwdjIzNC42NjdoLTIzNC42Njd6TTYzMi43NDcgMzg3Ljg0bC02MC4xNi02MC4xNiAxMzMuNTQ3LTEzMy41NDctODcuNDY3LTg3LjQ2N2gyMzQuNjY3djIzNC42NjdsLTg3LjA0MC04Ny4wNDAtMTMzLjU0NyAxMzMuNTQ3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MWM7IiBnbHlwaC1uYW1lPSJza2lwIiBkPSJNMjU2IDE5MmwzNjIuNjY3IDI1Ni0zNjIuNjY3IDI1NnYtNTEyek0zNDEuMzMzIDUzOS4zMDdsMTI5LjI4LTkxLjMwNy0xMjkuMjgtOTEuMzA3djE4Mi42MTN6TTY4Mi42NjcgNzA0aDg1LjMzM3YtNTEyaC04NS4zMzN2NTEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MWQ7IiBnbHlwaC1uYW1lPSJzb3VuZGNsb3VkIiBkPSJNMS43MjggMjU5LjUyYzAtMTIuNjA4IDQuNjA4LTIyLjIwOCAxMy43Ni0yOC42MDggOS4yOC02LjY1NiAxOS4wNzItOC44OTYgMjkuNTY4LTYuOTEyIDkuNzkyIDEuNzkyIDE2LjcwNCA1LjM3NiAyMC42NzIgMTAuNDk2IDQuMDMyIDUuMDU2IDUuOTUyIDEzLjUwNCA1Ljk1MiAyNS4yMTZ2MTM3Ljc5MmMwIDkuODU2LTMuMzkyIDE4LjExMi0xMC4xNzYgMjUuMDI0LTYuODQ4IDYuODQ4LTE1LjE2OCAxMC4yNC0yNS4wMjQgMTAuMjQtOS40MDggMC0xNy42LTMuMzkyLTI0LjQ0OC0xMC4yNC02Ljg0OC02LjkxMi0xMC4zMDQtMTUuMTY4LTEwLjMwNC0yNS4wMjR2LTEzNy45ODR6TTExMS4xMDQgMjAwLjY0YzAtOS4yOCAzLjM5Mi0xNi4xMjggOS44NTYtMjAuNjA4IDYuNDY0LTQuNTQ0IDE0LjcyLTYuOTEyIDI0Ljg5Ni02LjkxMiAxMC41NiAwIDE5LjAwOCAyLjM2OCAyNS40MDggNi45MTIgNi41OTIgNC40OCA5Ljc5MiAxMS40NTYgOS43OTIgMjAuNjA4djMyMS40NzJjMCA5LjQ3Mi0zLjUyIDE3LjY2NC0xMC4xNzYgMjQuNTEyLTYuODQ4IDYuODQ4LTE1LjEwNCAxMC4zMDQtMjUuMDI0IDEwLjMwNC05LjQ3MiAwLTE3LjYtMy40NTYtMjQuNTEyLTEwLjMwNC02LjcyLTYuNzg0LTEwLjI0LTE0Ljk3Ni0xMC4yNC0yNC41MTJ2LTMyMS40NzJ6TTIyMC4wMzIgMTg1LjM0NGMwLTkuMjggMy40NTYtMTYuMTI4IDkuOTg0LTIwLjczNiA2LjcyLTQuNTQ0IDE1LjIzMi02Ljg0OCAyNS43MjgtNi44NDggMTAuMDQ4IDAgMTguNDMyIDIuMzA0IDI1LjAyNCA2Ljg0OCA2LjQ2NCA0LjYwOCA5LjY2NCAxMS41ODQgOS42NjQgMjAuNzM2djI5My41MDRjMCA5Ljc5Mi0zLjQ1NiAxOC4yNC0xMC4yNCAyNS4yMTYtNi44NDggNi45MTItMTQuOTEyIDEwLjQ5Ni0yNC4zODQgMTAuNDk2LTkuODU2IDAtMTguMjQtMy41ODQtMjUuMjgtMTAuNDk2LTYuOTEyLTYuOTEyLTEwLjQ5Ni0xNS4zNi0xMC40OTYtMjUuMjE2di0yOTMuNTA0ek0zMjkuNDcyIDE4NGMwLTE3LjQ3MiAxMS44NC0yNi4yNCAzNS4yNjQtMjYuMjQgMjMuNDg4IDAgMzUuMiA4Ljc2OCAzNS4yIDI2LjI0djQ3NS41ODRjMCAyNi43NTItOC4xOTIgNDEuNzkyLTI0LjMyIDQ1LjI0OC0xMC4zNjggMi40OTYtMjAuNzM2LTAuNDQ4LTMwLjg0OC05LjA4OC0xMC4xNzYtOC41MTItMTUuMjk2LTIwLjU0NC0xNS4yOTYtMzYuMTZ2LTQ3NS41ODR6TTQ0MC44MzIgMTcwLjExMnY1MTcuNTA0YzAgMTYuNTc2IDQuOTI4IDI2LjM2OCAxNC43MiAyOS41MDQgMjEuMzEyIDUuMTIgNDIuNDMyIDcuNjggNjMuMjk2IDcuNjggNDguNTEyIDAgOTMuNjMyLTExLjQ1NiAxMzUuNTUyLTM0LjI0IDQxLjg1Ni0yMi44NDggNzUuODQtNTQuMDgwIDEwMS42MzItOTMuNTY4IDI1LjY2NC0zOS4zNiA0MC44MzItODIuODggNDQuODY0LTEzMC40OTYgMTkuMzkyIDguMjU2IDQwIDEyLjM1MiA2Mi4wMTYgMTIuMzUyIDQ0LjE2IDAgODIuMjQtMTUuNzQ0IDExMy43MjgtNDcuMDQwIDMxLjYxNi0zMS40MjQgNDcuMzYtNjkuMTg0IDQ3LjM2LTExMy4xNTIgMC00NC4zNTItMTUuNzQ0LTgyLjM2OC00Ny4yOTYtMTEzLjY2NC0zMS41NTItMzEuMzYtNjkuNDQtNDcuMTA0LTExMy4zNDQtNDcuMTA0bC00MTMuOTUyIDAuNTc2Yy0yLjc1MiAxLjAyNC00LjkyOCAyLjYyNC02LjUyOCA1LjI0OC0xLjQwOCAyLjMwNC0yLjA0OCA0LjU0NC0yLjA0OCA2LjR2MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTFlOyIgZ2x5cGgtbmFtZT0ic3BlYWtlciIgZD0iTTcyNS4zMzMgODc0LjY2N2gtNDI2LjY2N2MtNDYuOTMzIDAtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzM3YtNjgyLjY2N2MwLTQ2LjkzMyAzOC40LTg0LjkwNyA4NS4zMzMtODQuOTA3bDQyNi42NjctMC40MjdjNDYuOTMzIDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3Y2ODIuNjY3YzAgNDYuOTMzLTM4LjQgODUuMzMzLTg1LjMzMyA4NS4zMzN6TTI5OC42NjcgMTA2LjY2N3Y2ODIuNjY3aDQyNi42Njd2LTY4Mi42NjdoLTQyNi42Njd6TTUxMiA1NzZjNDYuOTMzIDAgODUuMzMzIDM4LjQgODUuMzMzIDg1LjMzM3MtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzM2MtNDcuMzYgMC04NS4zMzMtMzguNC04NS4zMzMtODUuMzMzczM3Ljk3My04NS4zMzMgODUuMzMzLTg1LjMzM3pNNTEyIDQ5MC42NjdjLTk0LjI5MyAwLTE3MC42NjctNzYuMzczLTE3MC42NjctMTcwLjY2N3M3Ni4zNzMtMTcwLjY2NyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2NyA3Ni4zNzMgMTcwLjY2NyAxNzAuNjY3LTc2LjM3MyAxNzAuNjY3LTE3MC42NjcgMTcwLjY2N3pNNTEyIDIzNC42NjdjLTQ2LjkzMyAwLTg1LjMzMyAzOC40LTg1LjMzMyA4NS4zMzNzMzguNCA4NS4zMzMgODUuMzMzIDg1LjMzMyA4NS4zMzMtMzguNCA4NS4zMzMtODUuMzMzLTM4LjQtODUuMzMzLTg1LjMzMy04NS4zMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxZjsiIGdseXBoLW5hbWU9InNwZWFrZXItZ3JvdXAiIGQ9Ik03NzYuNTMzIDkxNy4zMzNoLTM1OC40Yy00Mi4yNCAwLTc2LjgtMzQuNTYtNzYuOC03Ni44di02MTQuNGMwLTQyLjI0IDM0LjU2LTc2LjM3MyA3Ni44LTc2LjM3M2wzNTguNC0wLjQyN2M0Mi4yNCAwIDc2LjggMzQuNTYgNzYuOCA3Ni44djYxNC40YzAgNDIuMjQtMzQuNTYgNzYuOC03Ni44IDc2Ljh6TTc2OCAyMzQuNjY3bC0zNDEuMzMzIDAuNDI3djU5Ni45MDdoMzQxLjMzM3YtNTk3LjMzM3pNNTk3LjMzMyA2MTguNjY3YzQ2LjkzMyAwIDg1LjMzMyAzNy45NzMgODUuMzMzIDg1LjMzM3MtMzguNCA4NS4zMzMtODUuMzMzIDg1LjMzMy04NS4zMzMtMzcuOTczLTg1LjMzMy04NS4zMzMgMzguNC04NS4zMzMgODUuMzMzLTg1LjMzM3pNNTk3LjMzMyAyNzcuMzMzYzgyLjM0NyAwIDE0OS4zMzMgNjYuOTg3IDE0OS4zMzMgMTQ5LjMzM3MtNjYuOTg3IDE0OS4zMzMtMTQ5LjMzMyAxNDkuMzMzYy04Mi4zNDcgMC0xNDkuMzMzLTY2Ljk4Ny0xNDkuMzMzLTE0OS4zMzNzNjYuOTg3LTE0OS4zMzMgMTQ5LjMzMy0xNDkuMzMzek01OTcuMzMzIDQ5MC42NjdjMzUuNDEzIDAgNjQtMjguNTg3IDY0LTY0cy0yOC41ODctNjQtNjQtNjQtNjQgMjguNTg3LTY0IDY0IDI4LjU4NyA2NCA2NCA2NHpNMjU2IDc0Ni42NjdoLTg1LjMzM3YtNjgyLjY2N2MwLTQ2LjkzMyAzNy45NzMtODUuMzMzIDg1LjMzMy04NS4zMzNoNDI2LjY2N3Y4NS4zMzNoLTQyNi42Njd2NjgyLjY2N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTIwOyIgZ2x5cGgtbmFtZT0ic3BvdGlmeSIgZD0iTTUwOC4xNiA4MzkuMjMyYy0yMTYuODk2IDAtMzk0LjI0LTE3Ny40MDgtMzk0LjI0LTM5NC4zNjggMC0yMTcuMDI0IDE3Ny4zNDQtMzk0LjMwNCAzOTQuMjQtMzk0LjMwNCAyMTYuODMyIDAgMzk0LjI0IDE3Ny4zNDQgMzk0LjI0IDM5NC4zMDRzLTE3NS41NTIgMzk0LjM2OC0zOTQuMjQgMzk0LjM2OHpNNjg5LjQ3MiAyNjkuNTA0Yy03Ljg3Mi0xMS45MDQtMjEuNzYtMTUuNzQ0LTMzLjQwOC03Ljg3Mi05Mi43MzYgNTcuMTUyLTIwOS4wODggNjguOTkyLTM0Ny4wMDggMzcuMzc2LTEzLjc2LTMuOTA0LTI1LjUzNiA2LjAxNi0yOS41MDQgMTcuODU2LTMuOTY4IDEzLjc2IDUuNzYgMjUuNTM2IDE3LjcyOCAyOS41MDQgMTQ5Ljc2IDMzLjQ3MiAyODAgMTkuNzc2IDM4Mi40LTQzLjM5MiAxMy44MjQtNS45NTIgMTUuNzQ0LTIxLjY5NiA5Ljc5Mi0zMy40NzJ6TTczNi44OTYgMzc3Ljk4NGMtOS44NTYtMTQuMDE2LTI3LjcxMi0xOS43NzYtNDEuMzQ0LTkuOTg0LTEwNi40OTYgNjUuMTUyLTI2OC4xNiA4NC45MjgtMzkyLjMyIDQ1LjM3Ni0xNS44NzItNC4wMzItMzMuNiAzLjkwNC0zNy41NjggMTkuNzc2LTMuOTY4IDE1Ljc0NCAzLjk2OCAzMy41MzYgMTkuNjQ4IDM3LjM3NiAxNDQgNDMuMzkyIDMyMS4zNDQgMjEuNzYgNDQzLjcxMi01My4yNDggMTEuNzEyLTUuODg4IDE3LjY2NC0yNS40NzIgNy44NzItMzkuMjk2ek03NDAuNzM2IDQ4OC4yNTZjLTEyNi4wODAgNzUuMDcyLTMzNy4wMjQgODIuOTQ0LTQ1Ny4yMTYgNDUuNDQtMTkuNzc2LTUuOTUyLTM5LjU1MiA1Ljg4OC00NS40NCAyMy42MTYtNS44ODggMTkuNzc2IDUuODg4IDM5LjQyNCAyMy42MTYgNDUuMzc2IDEzOS45NjggNDEuMzQ0IDM3MC42MjQgMzMuNDcyIDUxNi41NDQtNTMuMjQ4IDE3LjcyOC05Ljg1NiAyMy42MTYtMzMuNDcyIDEzLjc2LTUxLjI2NC05LjcyOC0xMy43Ni0zMy40NzItMTkuNjQ4LTUxLjI2NC05LjkyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MjE7IiBnbHlwaC1uYW1lPSJzdGFyIiBkPSJNNTEyIDkwOC44Yy0xMi44IDAtMTkuMi02LjQtMjUuNi0yNS42bC0xMjgtMjU2LTI4MS42LTM4LjRjLTI1LjYtNi40LTMyLTEyLjgtMzItMjUuNiAwLTYuNCA2LjQtMTkuMiAxMi44LTI1LjZsMjA0LjgtMTk4LjQtNTEuMi0yODEuNmMwLTYuNCAwLTYuNCAwLTEyLjhzMC0xMi44IDYuNC0xOS4yIDEyLjgtNi40IDE5LjItNi40IDEyLjggMCAyNS42IDYuNGwyNTYgMTM0LjQgMjU2LTEzNC40YzYuNC02LjQgMTIuOC02LjQgMjUuNi02LjQgNi40IDAgMTIuOCAwIDE5LjIgNi40czYuNCAxMi44IDYuNCAxOS4yIDAgNi40IDAgMTIuOGwtNTEuMiAyODEuNiAyMDQuOCAxOTguNGMxMi44IDEyLjggMTIuOCAxOS4yIDEyLjggMjUuNiAwIDEyLjgtMTIuOCAyNS42LTMyIDI1LjZsLTI4MS42IDM4LjQtMTI4IDI1NmMtMTkuMiAxOS4yLTI1LjYgMjUuNi0zOC40IDI1LjZ2MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTIyOyIgZ2x5cGgtbmFtZT0ic3RvcCIgZD0iTTY4Mi42NjcgNjE4LjY2N3YtMzQxLjMzM2gtMzQxLjMzM3YzNDEuMzMzaDM0MS4zMzN6TTc2OCA3MDRoLTUxMnYtNTEyaDUxMnY1MTJ6IiAvPgo8L2ZvbnQ+PC9kZWZzPjwvc3ZnPg==#iris) format("svg"); + font-weight: normal; + font-style: normal; } + +.icon { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; - user-select: none; - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - display: inline-block; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - vertical-align: bottom; - font-size: 1.3em; - margin-bottom: 0.1em; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - -moz-osx-font-smoothing: grayscale; - font-feature-settings: 'liga'; } + user-select: none; } + .icon--material { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + vertical-align: bottom; + font-size: 1.3em; + margin-bottom: 0.1em; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + -moz-osx-font-smoothing: grayscale; + font-feature-settings: 'liga'; } +/* + +@font-face { + font-family: 'iris'; + src: + url('../assets/fonts/iris.ttf?wncwx9') format('truetype'), + url('../assets/fonts/iris.woff?wncwx9') format('woff'), + url('../assets/fonts/iris.svg?wncwx9#iris') format('svg'); + font-weight: normal; + font-style: normal; +} + +$icon-back: \e900; +$icon-broadcast: \e901; +$icon-cd: \e902; +$icon-chevron-left: \e903; +$icon-chevron-right: \e904; +$icon-close: \e905; +$icon-cog: \e906; +$icon-compass: \e907; +$icon-connection: \e908; +$icon-consume: \e909; +$icon-filter: \e90a; +$icon-folder: \e90b; +$icon-grid: \e90c; +$icon-leaf: \e90d; +$icon-list: \e90e; +$icon-local: \e90f; +$icon-mic: \e910; +$icon-music: \e911; +$icon-pause: \e912; +$icon-play: \e913; +$icon-play-alt: \e914; +$icon-playlist: \e915; +$icon-repeat: \e916; +$icon-search: \e917; +$icon-sections: \e918; +$icon-server: \e919; +$icon-shuffle: \e91a; +$icon-skip: \e91b; +$icon-soundcloud: \e91c; +$icon-spotify: \e91d; +$icon-star: \e91e; +$icon-stop: \e91f; +$icon-websocket: \e920; + +[class^="icon-"], [class*=" icon-"] { + @include noselect(); + + font-family: 'iris' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-back:before { + content: "\e900"; +} +.icon-broadcast:before { + content: "\e901"; +} +.icon-cd:before { + content: "\e902"; +} +.icon-chevron-left:before { + content: "\e903"; +} +.icon-chevron-right:before { + content: "\e904"; +} +.icon-close:before { + content: "\e905"; +} +.icon-cog:before { + content: "\e906"; +} +.icon-compass:before { + content: "\e907"; +} +.icon-connection:before { + content: "\e908"; +} +.icon-consume:before { + content: "\e909"; +} +.icon-filter:before { + content: "\e90a"; +} +.icon-folder:before { + content: "\e90b"; +} +.icon-folder-open:before { + content: "\e90c"; +} +.icon-grid:before { + content: "\e90d"; +} +.icon-leaf:before { + content: "\e90e"; +} +.icon-list:before { + content: "\e90f"; +} +.icon-local:before { + content: "\e910"; +} +.icon-mic:before { + content: "\e911"; +} +.icon-music:before { + content: "\e912"; +} +.icon-pause:before { + content: "\e913"; +} +.icon-play:before { + content: "\e914"; +} +.icon-play-alt:before { + content: "\e915"; +} +.icon-playlist:before { + content: "\e916"; +} +.icon-repeat:before { + content: "\e917"; +} +.icon-search:before { + content: "\e918"; +} +.icon-sections:before { + content: "\e919"; +} +.icon-server:before { + content: "\e91a"; +} +.icon-shuffle:before { + content: "\e91b"; +} +.icon-skip:before { + content: "\e91c"; +} +.icon-soundcloud:before { + content: "\e91d"; +} +.icon-speaker:before { + content: "\e91e"; +} +.icon-speaker-group:before { + content: "\e91f"; +} +.icon-spotify:before { + content: "\e920"; +} +.icon-star:before { + content: "\e921"; +} +.icon-stop:before { + content: "\e922"; +} + +*/ .slider { position: relative; cursor: pointer; } @@ -5857,6 +5897,8 @@ main header { height: 40px; margin-top: 10px; margin-bottom: 15px; } + .services .menu .menu-item-wrapper .menu-item .icon--svg { + opacity: 0.8; } .services .menu .menu-item-wrapper .menu-item .title { margin: 0; padding: 0; diff --git a/mopidy_iris/static/app.js b/mopidy_iris/static/app.js index ef2cf2a5..d5635bed 100644 --- a/mopidy_iris/static/app.js +++ b/mopidy_iris/static/app.js @@ -60,7 +60,7 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 108); +/******/ return __webpack_require__(__webpack_require__.s = 118); /******/ }) /************************************************************************/ /******/ ([ @@ -71,12 +71,12 @@ /* WEBPACK VAR INJECTION */(function(process) { if (process.env.NODE_ENV === 'production') { - module.exports = __webpack_require__(109); + module.exports = __webpack_require__(119); } else { - module.exports = __webpack_require__(110); + module.exports = __webpack_require__(120); } -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), /* 1 */ @@ -953,16 +953,206 @@ var titleCase = exports.titleCase = function titleCase(string) { /***/ }), /* 2 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // 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 + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // 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. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createStore__ = __webpack_require__(77); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__combineReducers__ = __webpack_require__(138); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__ = __webpack_require__(139); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__ = __webpack_require__(140); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__compose__ = __webpack_require__(81); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_warning__ = __webpack_require__(80); +/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createStore__ = __webpack_require__(86); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__combineReducers__ = __webpack_require__(155); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__ = __webpack_require__(156); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__ = __webpack_require__(157); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__compose__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_warning__ = __webpack_require__(89); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createStore", function() { return __WEBPACK_IMPORTED_MODULE_0__createStore__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "combineReducers", function() { return __WEBPACK_IMPORTED_MODULE_1__combineReducers__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "bindActionCreators", function() { return __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__["a"]; }); @@ -986,10 +1176,10 @@ if (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' } -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 3 */ +/* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1298,14 +1488,14 @@ function processFinished(key) { } /***/ }), -/* 4 */ +/* 5 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Provider__ = __webpack_require__(119); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__ = __webpack_require__(75); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connect_connect__ = __webpack_require__(123); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Provider__ = __webpack_require__(135); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__ = __webpack_require__(84); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connect_connect__ = __webpack_require__(140); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createProvider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__["a"]; }); @@ -1317,47 +1507,47 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /***/ }), -/* 5 */ +/* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Router__ = __webpack_require__(154); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Router__ = __webpack_require__(171); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Router", function() { return __WEBPACK_IMPORTED_MODULE_0__Router__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Link__ = __webpack_require__(88); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Link__ = __webpack_require__(97); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Link", function() { return __WEBPACK_IMPORTED_MODULE_1__Link__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__IndexLink__ = __webpack_require__(162); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__IndexLink__ = __webpack_require__(183); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "IndexLink", function() { return __WEBPACK_IMPORTED_MODULE_2__IndexLink__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__withRouter__ = __webpack_require__(163); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__withRouter__ = __webpack_require__(184); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "withRouter", function() { return __WEBPACK_IMPORTED_MODULE_3__withRouter__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__IndexRedirect__ = __webpack_require__(164); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__IndexRedirect__ = __webpack_require__(185); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "IndexRedirect", function() { return __WEBPACK_IMPORTED_MODULE_4__IndexRedirect__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__IndexRoute__ = __webpack_require__(165); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__IndexRoute__ = __webpack_require__(186); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "IndexRoute", function() { return __WEBPACK_IMPORTED_MODULE_5__IndexRoute__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__Redirect__ = __webpack_require__(89); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__Redirect__ = __webpack_require__(98); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Redirect", function() { return __WEBPACK_IMPORTED_MODULE_6__Redirect__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__Route__ = __webpack_require__(166); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__Route__ = __webpack_require__(187); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Route", function() { return __WEBPACK_IMPORTED_MODULE_7__Route__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__RouteUtils__ = __webpack_require__(28); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__RouteUtils__ = __webpack_require__(29); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createRoutes", function() { return __WEBPACK_IMPORTED_MODULE_8__RouteUtils__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__RouterContext__ = __webpack_require__(58); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__RouterContext__ = __webpack_require__(59); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "RouterContext", function() { return __WEBPACK_IMPORTED_MODULE_9__RouterContext__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__PropTypes__ = __webpack_require__(60); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__PropTypes__ = __webpack_require__(61); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "locationShape", function() { return __WEBPACK_IMPORTED_MODULE_10__PropTypes__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "routerShape", function() { return __WEBPACK_IMPORTED_MODULE_10__PropTypes__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__match__ = __webpack_require__(167); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__match__ = __webpack_require__(188); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "match", function() { return __WEBPACK_IMPORTED_MODULE_11__match__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__useRouterHistory__ = __webpack_require__(93); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__useRouterHistory__ = __webpack_require__(102); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "useRouterHistory", function() { return __WEBPACK_IMPORTED_MODULE_12__useRouterHistory__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__PatternUtils__ = __webpack_require__(38); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__PatternUtils__ = __webpack_require__(36); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "formatPattern", function() { return __WEBPACK_IMPORTED_MODULE_13__PatternUtils__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__applyRouterMiddleware__ = __webpack_require__(172); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__applyRouterMiddleware__ = __webpack_require__(193); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "applyRouterMiddleware", function() { return __WEBPACK_IMPORTED_MODULE_14__applyRouterMiddleware__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__browserHistory__ = __webpack_require__(173); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__browserHistory__ = __webpack_require__(194); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "browserHistory", function() { return __WEBPACK_IMPORTED_MODULE_15__browserHistory__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__hashHistory__ = __webpack_require__(176); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__hashHistory__ = __webpack_require__(197); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "hashHistory", function() { return __WEBPACK_IMPORTED_MODULE_16__hashHistory__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__createMemoryHistory__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__createMemoryHistory__ = __webpack_require__(99); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createMemoryHistory", function() { return __WEBPACK_IMPORTED_MODULE_17__createMemoryHistory__["a"]; }); /* components */ @@ -1406,7 +1596,7 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /***/ }), -/* 6 */ +/* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1422,7 +1612,7 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactFontawesome = __webpack_require__(219); +var _reactFontawesome = __webpack_require__(244); var _reactFontawesome2 = _interopRequireDefault(_reactFontawesome); @@ -1455,19 +1645,24 @@ var Icon = function (_React$Component) { value: function render() { var _this2 = this; - var className = "icon"; + var className = "icon icon--" + (this.props.type ? this.props.type : 'material'); if (this.props.className) { className += ' ' + this.props.className; } switch (this.props.type) { + case 'svg': + var src = __webpack_require__(342)("./" + this.props.name + '.svg'); + return _react2.default.createElement('img', { className: className, src: src, onClick: function onClick(e) { + return _this2.handleClick(e); + } }); + case 'fontawesome': return _react2.default.createElement(_reactFontawesome2.default, { className: className, type: 'fontawesome', name: this.props.name, onClick: function onClick(e) { return _this2.handleClick(e); } }); default: - className += ' material-icon'; return _react2.default.createElement( 'i', { className: className, onClick: function onClick(e) { @@ -1484,196 +1679,6 @@ var Icon = function (_React$Component) { exports.default = Icon; -/***/ }), -/* 7 */ -/***/ (function(module, exports) { - -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // 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 - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // 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. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - - /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { @@ -2274,7 +2279,7 @@ exports.getLibraryAlbumsProcessor = getLibraryAlbumsProcessor; function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var coreActions = __webpack_require__(11); -var uiActions = __webpack_require__(3); +var uiActions = __webpack_require__(4); var mopidyActions = __webpack_require__(8); var lastfmActions = __webpack_require__(20); var helpers = __webpack_require__(1); @@ -4355,13 +4360,13 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -4369,7 +4374,7 @@ var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); @@ -4427,7 +4432,7 @@ var Thumbnail = function (_React$Component) { // no images if (!this.props.image && (!this.props.images || this.props.images.length <= 0)) { - return __webpack_require__(223); + return __webpack_require__(248); // single image } else if (this.props.image) { @@ -4504,41 +4509,6 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /* 13 */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -if (process.env.NODE_ENV !== 'production') { - var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && - Symbol.for && - Symbol.for('react.element')) || - 0xeac7; - - var isValidElement = function(object) { - return typeof object === 'object' && - object !== null && - object.$$typeof === REACT_ELEMENT_TYPE; - }; - - // By explicitly using `prop-types` you are opting into new development behavior. - // http://fb.me/prop-types-in-prod - var throwOnDirectAccess = true; - module.exports = __webpack_require__(120)(isValidElement, throwOnDirectAccess); -} else { - // By explicitly using `prop-types` you are opting into new production behavior. - // http://fb.me/prop-types-in-prod - module.exports = __webpack_require__(121)(); -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - "use strict"; @@ -4880,7 +4850,7 @@ function setSnapcastGroupVolume(id, percent) { } /***/ }), -/* 15 */ +/* 14 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4896,7 +4866,7 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -5002,7 +4972,7 @@ var Header = function (_React$Component) { exports.default = Header; /***/ }), -/* 16 */ +/* 15 */ /***/ (function(module, exports) { module.exports = function() { @@ -5010,13 +4980,50 @@ module.exports = function() { }; +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +if (process.env.NODE_ENV !== 'production') { + var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && + Symbol.for && + Symbol.for('react.element')) || + 0xeac7; + + var isValidElement = function(object) { + return typeof object === 'object' && + object !== null && + object.$$typeof === REACT_ELEMENT_TYPE; + }; + + // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + var throwOnDirectAccess = true; + module.exports = __webpack_require__(174)(isValidElement, throwOnDirectAccess); +} else { + // By explicitly using `prop-types` you are opting into new production behavior. + // http://fb.me/prop-types-in-prod + module.exports = __webpack_require__(176)(); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + /***/ }), /* 17 */ /***/ (function(module, exports, __webpack_require__) { (function webpackUniversalModuleDefinition(root, factory) { if(true) - module.exports = factory(__webpack_require__(0), __webpack_require__(13)); + module.exports = factory(__webpack_require__(0), __webpack_require__(210)); else if(typeof define === 'function' && define.amd) define(["react", "prop-types"], factory); else { @@ -6129,7 +6136,7 @@ var invariant = function(condition, format, a, b, c, d, e, f) { module.exports = invariant; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), /* 19 */ @@ -16525,7 +16532,7 @@ exports.unloveTrack = unloveTrack; exports.scrobble = scrobble; var coreActions = __webpack_require__(11); -var uiActions = __webpack_require__(3); +var uiActions = __webpack_require__(4); var helpers = __webpack_require__(1); function set(data) { @@ -16660,7 +16667,9 @@ function authorizationGranted(data) { } function revokeAuthorization() { - return { type: 'LASTFM_AUTHORIZATION_REVOKED' }; + return { + type: 'LASTFM_AUTHORIZATION_REVOKED' + }; } /** @@ -17025,11 +17034,11 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _Track = __webpack_require__(102); +var _Track = __webpack_require__(112); var _Track2 = _interopRequireDefault(_Track); @@ -17045,7 +17054,7 @@ var _actions = __webpack_require__(8); var mopidyActions = _interopRequireWildcard(_actions); -var _actions2 = __webpack_require__(3); +var _actions2 = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions2); @@ -17749,7 +17758,7 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -17868,7 +17877,7 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -17936,7 +17945,7 @@ exports.default = ContextMenuTrigger; var React = __webpack_require__(0); -var factory = __webpack_require__(155); +var factory = __webpack_require__(172); if (typeof React === 'undefined') { throw Error( @@ -17959,6 +17968,103 @@ module.exports = factory( /* 27 */ /***/ (function(module, exports, __webpack_require__) { +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright 2014-2015, Facebook, Inc. @@ -18021,10 +18127,10 @@ if (process.env.NODE_ENV !== 'production') { module.exports = warning; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 28 */ +/* 29 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -18116,7 +18222,7 @@ function createRoutes(routes) { } /***/ }), -/* 29 */ +/* 30 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18125,7 +18231,7 @@ function createRoutes(routes) { exports.__esModule = true; exports.createPath = exports.parsePath = exports.getQueryStringValueFromPath = exports.stripQueryStringValueFromPath = exports.addQueryStringValueToPath = undefined; -var _warning = __webpack_require__(27); +var _warning = __webpack_require__(28); var _warning2 = _interopRequireDefault(_warning); @@ -18216,10 +18322,10 @@ var createPath = exports.createPath = function createPath(location) { return path; }; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 30 */ +/* 31 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18388,7 +18494,7 @@ var Dater = function (_React$Component) { exports.default = Dater; /***/ }), -/* 31 */ +/* 32 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18626,7 +18732,7 @@ exports.default = Parallax; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(19))) /***/ }), -/* 32 */ +/* 33 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18642,15 +18748,15 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -18744,149 +18850,10 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch) { exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Modal); /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(19))) -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - - -/* eslint-disable no-unused-vars */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); -} - -function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } -} - -module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; -}; - - /***/ }), /* 34 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - - -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * - */ - -function makeEmptyFunction(arg) { - return function () { - return arg; - }; -} - -/** - * This function accepts and discards inputs; it has no side effects. This is - * primarily useful idiomatically for overridable function endpoints which - * always need to be callable, since JS lacks a null-call idiom ala Cocoa. - */ -var emptyFunction = function emptyFunction() {}; - -emptyFunction.thatReturns = makeEmptyFunction; -emptyFunction.thatReturnsFalse = makeEmptyFunction(false); -emptyFunction.thatReturnsTrue = makeEmptyFunction(true); -emptyFunction.thatReturnsNull = makeEmptyFunction(null); -emptyFunction.thatReturnsThis = function () { - return this; -}; -emptyFunction.thatReturnsArgument = function (arg) { - return arg; -}; - -module.exports = emptyFunction; - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - "use strict"; /* WEBPACK VAR INJECTION */(function($) { @@ -18900,11 +18867,11 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -19099,73 +19066,13 @@ exports.default = DropdownField; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(19))) /***/ }), -/* 36 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - - - -/** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - -var validateFormat = function validateFormat(format) {}; - -if (process.env.NODE_ENV !== 'production') { - validateFormat = function validateFormat(format) { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - }; -} - -function invariant(condition, format, a, b, c, d, e, f) { - validateFormat(format); - - if (!condition) { - var error; - if (format === undefined) { - error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error(format.replace(/%s/g, function () { - return args[argIndex++]; - })); - error.name = 'Invariant Violation'; - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } -} - -module.exports = invariant; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }), -/* 37 */ +/* 35 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = routerWarning; /* unused harmony export _resetWarned */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(28); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__); @@ -19195,7 +19102,7 @@ function _resetWarned() { } /***/ }), -/* 38 */ +/* 36 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -19437,10 +19344,10 @@ function formatPattern(pattern, params) { return pathname.replace(/\/+/g, '/'); } -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 39 */ +/* 37 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -19457,13 +19364,13 @@ var _invariant = __webpack_require__(18); var _invariant2 = _interopRequireDefault(_invariant); -var _warning = __webpack_require__(27); +var _warning = __webpack_require__(28); var _warning2 = _interopRequireDefault(_warning); -var _PathUtils = __webpack_require__(29); +var _PathUtils = __webpack_require__(30); -var _Actions = __webpack_require__(49); +var _Actions = __webpack_require__(46); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -19536,10 +19443,10 @@ var locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a // a.action === b.action && // Different action !== location change. a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && statesAreEqual(a.state, b.state); }; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 40 */ +/* 38 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -19555,17 +19462,17 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); var _Thumbnail = __webpack_require__(12); var _Thumbnail2 = _interopRequireDefault(_Thumbnail); -var _GridItem = __webpack_require__(44); +var _GridItem = __webpack_require__(40); var _GridItem2 = _interopRequireDefault(_GridItem); @@ -19573,7 +19480,7 @@ var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); @@ -19668,100 +19575,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10))) /***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - - - -var emptyObject = {}; - -if (process.env.NODE_ENV !== 'production') { - Object.freeze(emptyObject); -} - -module.exports = emptyObject; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright (c) 2014-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - - - -var emptyFunction = __webpack_require__(34); - -/** - * Similar to invariant but only logs a warning if the condition is not met. - * This can be used to log issues in development environments in critical - * paths. Removing the logging code for production environments will keep the - * same logic and follow the same code paths. - */ - -var warning = emptyFunction; - -if (process.env.NODE_ENV !== 'production') { - var printWarning = function printWarning(format) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var argIndex = 0; - var message = 'Warning: ' + format.replace(/%s/g, function () { - return args[argIndex++]; - }); - if (typeof console !== 'undefined') { - console.error(message); - } - try { - // --- Welcome to debugging React --- - // This error was thrown as a convenience so that you can use this stack - // to find the callsite that caused this warning to fire. - throw new Error(message); - } catch (x) {} - }; - - warning = function warning(condition, format) { - if (format === undefined) { - throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); - } - - if (format.indexOf('Failed Composite propType: ') === 0) { - return; // Ignore CompositeComponent proptype check. - } - - if (!condition) { - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { - args[_key2 - 2] = arguments[_key2]; - } - - printWarning.apply(undefined, [format].concat(args)); - } - }; -} - -module.exports = warning; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) - -/***/ }), -/* 43 */ +/* 39 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -19771,7 +19585,7 @@ module.exports = warning; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return components; }); /* unused harmony export route */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return routes; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); @@ -19794,7 +19608,7 @@ var route = Object(__WEBPACK_IMPORTED_MODULE_0_prop_types__["oneOfType"])([__WEB var routes = Object(__WEBPACK_IMPORTED_MODULE_0_prop_types__["oneOfType"])([route, Object(__WEBPACK_IMPORTED_MODULE_0_prop_types__["arrayOf"])(route)]); /***/ }), -/* 44 */ +/* 40 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -19810,17 +19624,17 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactDom = __webpack_require__(48); +var _reactDom = __webpack_require__(44); var _reactDom2 = _interopRequireDefault(_reactDom); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -19977,7 +19791,7 @@ var GridItem = function (_React$Component) { exports.default = GridItem; /***/ }), -/* 45 */ +/* 41 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -19993,17 +19807,17 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); @@ -20109,7 +19923,7 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch) { exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(FollowButton); /***/ }), -/* 46 */ +/* 42 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20125,21 +19939,21 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); -var _GridItem = __webpack_require__(44); +var _GridItem = __webpack_require__(40); var _GridItem2 = _interopRequireDefault(_GridItem); @@ -20227,7 +20041,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10))) /***/ }), -/* 47 */ +/* 43 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20243,21 +20057,21 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); -var _GridItem = __webpack_require__(44); +var _GridItem = __webpack_require__(40); var _GridItem2 = _interopRequireDefault(_GridItem); @@ -20340,7 +20154,7 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10))) /***/ }), -/* 48 */ +/* 44 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20378,15 +20192,77 @@ if (process.env.NODE_ENV === 'production') { // DCE check should happen before ReactDOM bundle executes so that // DevTools can report bad minification during injection. checkDCE(); - module.exports = __webpack_require__(111); + module.exports = __webpack_require__(124); } else { - module.exports = __webpack_require__(114); + module.exports = __webpack_require__(127); } -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 49 */ +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + + + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var validateFormat = function validateFormat(format) {}; + +if (process.env.NODE_ENV !== 'production') { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +} + +module.exports = invariant; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 46 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20414,7 +20290,7 @@ var REPLACE = exports.REPLACE = 'REPLACE'; var POP = exports.POP = 'POP'; /***/ }), -/* 50 */ +/* 47 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20469,7 +20345,7 @@ var isExtraneousPopstateEvent = exports.isExtraneousPopstateEvent = function isE }; /***/ }), -/* 51 */ +/* 48 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20486,7 +20362,7 @@ exports.getTrackLyrics = getTrackLyrics; exports.findTrackLyrics = findTrackLyrics; var coreActions = __webpack_require__(11); -var uiActions = __webpack_require__(3); +var uiActions = __webpack_require__(4); var helpers = __webpack_require__(1); function set(data) { @@ -20691,7 +20567,7 @@ function findTrackLyrics(track) { /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(19))) /***/ }), -/* 52 */ +/* 49 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20701,7 +20577,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _captialize = __webpack_require__(257); +var _captialize = __webpack_require__(282); Object.defineProperty(exports, 'captialize', { enumerable: true, @@ -20710,7 +20586,7 @@ Object.defineProperty(exports, 'captialize', { } }); -var _clamp = __webpack_require__(258); +var _clamp = __webpack_require__(283); Object.defineProperty(exports, 'clamp', { enumerable: true, @@ -20719,7 +20595,7 @@ Object.defineProperty(exports, 'clamp', { } }); -var _distanceTo = __webpack_require__(259); +var _distanceTo = __webpack_require__(284); Object.defineProperty(exports, 'distanceTo', { enumerable: true, @@ -20728,7 +20604,7 @@ Object.defineProperty(exports, 'distanceTo', { } }); -var _isDefined = __webpack_require__(260); +var _isDefined = __webpack_require__(285); Object.defineProperty(exports, 'isDefined', { enumerable: true, @@ -20737,7 +20613,7 @@ Object.defineProperty(exports, 'isDefined', { } }); -var _isNumber = __webpack_require__(261); +var _isNumber = __webpack_require__(286); Object.defineProperty(exports, 'isNumber', { enumerable: true, @@ -20746,7 +20622,7 @@ Object.defineProperty(exports, 'isNumber', { } }); -var _isObject = __webpack_require__(262); +var _isObject = __webpack_require__(287); Object.defineProperty(exports, 'isObject', { enumerable: true, @@ -20755,7 +20631,7 @@ Object.defineProperty(exports, 'isObject', { } }); -var _length = __webpack_require__(263); +var _length = __webpack_require__(288); Object.defineProperty(exports, 'length', { enumerable: true, @@ -20768,7 +20644,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de //# sourceMappingURL=index.js.map /***/ }), -/* 53 */ +/* 50 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20784,17 +20660,17 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); var _ArtistSentence = __webpack_require__(21); var _ArtistSentence2 = _interopRequireDefault(_ArtistSentence); -var _Dater = __webpack_require__(30); +var _Dater = __webpack_require__(31); var _Dater2 = _interopRequireDefault(_Dater); @@ -20806,11 +20682,11 @@ var _ContextMenuTrigger = __webpack_require__(25); var _ContextMenuTrigger2 = _interopRequireDefault(_ContextMenuTrigger); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); -var _Popularity = __webpack_require__(67); +var _Popularity = __webpack_require__(71); var _Popularity2 = _interopRequireDefault(_Popularity); @@ -20818,7 +20694,7 @@ var _helpers = __webpack_require__(1); var helpers = _interopRequireWildcard(_helpers); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); @@ -21005,74 +20881,91 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch) { exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(List); /***/ }), -/* 54 */ +/* 51 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/* WEBPACK VAR INJECTION */(function(process) {/** + + +/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. + * + * */ - - -if (process.env.NODE_ENV !== 'production') { - var invariant = __webpack_require__(36); - var warning = __webpack_require__(42); - var ReactPropTypesSecret = __webpack_require__(55); - var loggedTypeFailures = {}; +function makeEmptyFunction(arg) { + return function () { + return arg; + }; } /** - * Assert that the values match with the type specs. - * Error messages are memorized and will only be shown once. - * - * @param {object} typeSpecs Map of name to a ReactPropType - * @param {object} values Runtime values that need to be type-checked - * @param {string} location e.g. "prop", "context", "child context" - * @param {string} componentName Name of the component for error messages. - * @param {?Function} getStack Returns the component stack. - * @private + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. */ -function checkPropTypes(typeSpecs, values, location, componentName, getStack) { - if (process.env.NODE_ENV !== 'production') { - for (var typeSpecName in typeSpecs) { - if (typeSpecs.hasOwnProperty(typeSpecName)) { - var error; - // Prop type validation may throw. In case they do, we don't want to - // fail the render phase where it didn't fail before. So we log it. - // After these have been cleaned up, we'll let them throw. - try { - // This is intentionally an invariant that gets caught. It's the same - // behavior as without this statement except with a better message. - invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]); - error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); - } catch (ex) { - error = ex; - } - warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error); - if (error instanceof Error && !(error.message in loggedTypeFailures)) { - // Only monitor this failure once because there tends to be a lot of the - // same error. - loggedTypeFailures[error.message] = true; +var emptyFunction = function emptyFunction() {}; - var stack = getStack ? getStack() : ''; +emptyFunction.thatReturns = makeEmptyFunction; +emptyFunction.thatReturnsFalse = makeEmptyFunction(false); +emptyFunction.thatReturnsTrue = makeEmptyFunction(true); +emptyFunction.thatReturnsNull = makeEmptyFunction(null); +emptyFunction.thatReturnsThis = function () { + return this; +}; +emptyFunction.thatReturnsArgument = function (arg) { + return arg; +}; - warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : ''); - } - } - } - } -} - -module.exports = checkPropTypes; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +module.exports = emptyFunction; /***/ }), -/* 55 */ +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * + */ + +function makeEmptyFunction(arg) { + return function () { + return arg; + }; +} + +/** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ +var emptyFunction = function emptyFunction() {}; + +emptyFunction.thatReturns = makeEmptyFunction; +emptyFunction.thatReturnsFalse = makeEmptyFunction(false); +emptyFunction.thatReturnsTrue = makeEmptyFunction(true); +emptyFunction.thatReturnsNull = makeEmptyFunction(null); +emptyFunction.thatReturnsThis = function () { + return this; +}; +emptyFunction.thatReturnsArgument = function (arg) { + return arg; +}; + +module.exports = emptyFunction; + +/***/ }), +/* 53 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21091,7 +20984,7 @@ module.exports = ReactPropTypesSecret; /***/ }), -/* 56 */ +/* 54 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -21118,8 +21011,144 @@ function warning(message) { /* eslint-enable no-empty */ } +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + + + +var emptyFunction = __webpack_require__(56); + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + +var warning = emptyFunction; + +if (process.env.NODE_ENV !== 'production') { + var printWarning = function printWarning(format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +module.exports = warning; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * + */ + +function makeEmptyFunction(arg) { + return function () { + return arg; + }; +} + +/** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ +var emptyFunction = function emptyFunction() {}; + +emptyFunction.thatReturns = makeEmptyFunction; +emptyFunction.thatReturnsFalse = makeEmptyFunction(false); +emptyFunction.thatReturnsTrue = makeEmptyFunction(true); +emptyFunction.thatReturnsNull = makeEmptyFunction(null); +emptyFunction.thatReturnsThis = function () { + return this; +}; +emptyFunction.thatReturnsArgument = function (arg) { + return arg; +}; + +module.exports = emptyFunction; + /***/ }), /* 57 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + + + +var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +module.exports = ReactPropTypesSecret; + + +/***/ }), +/* 58 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -21210,7 +21239,7 @@ function mapAsync(array, work, callback) { } /***/ }), -/* 58 */ +/* 59 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -21220,11 +21249,11 @@ function mapAsync(array, work, callback) { /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_create_react_class__ = __webpack_require__(26); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_create_react_class___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_create_react_class__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__getRouteParams__ = __webpack_require__(161); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__ContextUtils__ = __webpack_require__(59); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__RouteUtils__ = __webpack_require__(28); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__getRouteParams__ = __webpack_require__(182); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__ContextUtils__ = __webpack_require__(60); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__RouteUtils__ = __webpack_require__(29); var _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; }; var _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; }; @@ -21337,16 +21366,16 @@ var RouterContext = __WEBPACK_IMPORTED_MODULE_2_create_react_class___default()({ }); /* harmony default export */ __webpack_exports__["a"] = (RouterContext); -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 59 */ +/* 60 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = ContextProvider; /* harmony export (immutable) */ __webpack_exports__["b"] = ContextSubscriber; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); @@ -21465,13 +21494,13 @@ function ContextSubscriber(name) { } /***/ }), -/* 60 */ +/* 61 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return routerShape; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return locationShape; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); @@ -21494,7 +21523,7 @@ var locationShape = Object(__WEBPACK_IMPORTED_MODULE_0_prop_types__["shape"])({ }); /***/ }), -/* 61 */ +/* 62 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21502,7 +21531,7 @@ var locationShape = Object(__WEBPACK_IMPORTED_MODULE_0_prop_types__["shape"])({ exports.__esModule = true; -var _warning = __webpack_require__(27); +var _warning = __webpack_require__(28); var _warning2 = _interopRequireDefault(_warning); @@ -21521,10 +21550,10 @@ var runTransitionHook = function runTransitionHook(hook, location, callback) { }; exports.default = runTransitionHook; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 62 */ +/* 63 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21532,17 +21561,17 @@ exports.default = runTransitionHook; exports.__esModule = true; -var _AsyncUtils = __webpack_require__(171); +var _AsyncUtils = __webpack_require__(192); -var _PathUtils = __webpack_require__(29); +var _PathUtils = __webpack_require__(30); -var _runTransitionHook = __webpack_require__(61); +var _runTransitionHook = __webpack_require__(62); var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); -var _Actions = __webpack_require__(49); +var _Actions = __webpack_require__(46); -var _LocationUtils = __webpack_require__(39); +var _LocationUtils = __webpack_require__(37); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -21706,7 +21735,7 @@ var createHistory = function createHistory() { exports.default = createHistory; /***/ }), -/* 63 */ +/* 64 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21716,7 +21745,7 @@ exports.__esModule = true; var canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); /***/ }), -/* 64 */ +/* 65 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21725,15 +21754,15 @@ var canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.d exports.__esModule = true; exports.go = exports.replaceLocation = exports.pushLocation = exports.startListener = exports.getUserConfirmation = exports.getCurrentLocation = undefined; -var _LocationUtils = __webpack_require__(39); +var _LocationUtils = __webpack_require__(37); -var _DOMUtils = __webpack_require__(50); +var _DOMUtils = __webpack_require__(47); -var _DOMStateStorage = __webpack_require__(94); +var _DOMStateStorage = __webpack_require__(103); -var _PathUtils = __webpack_require__(29); +var _PathUtils = __webpack_require__(30); -var _ExecutionEnvironment = __webpack_require__(63); +var _ExecutionEnvironment = __webpack_require__(64); var PopStateEvent = 'popstate'; var HashChangeEvent = 'hashchange'; @@ -21821,7 +21850,128 @@ var go = exports.go = function go(n) { }; /***/ }), -/* 65 */ +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * + */ + +function makeEmptyFunction(arg) { + return function () { + return arg; + }; +} + +/** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ +var emptyFunction = function emptyFunction() {}; + +emptyFunction.thatReturns = makeEmptyFunction; +emptyFunction.thatReturnsFalse = makeEmptyFunction(false); +emptyFunction.thatReturnsTrue = makeEmptyFunction(true); +emptyFunction.thatReturnsNull = makeEmptyFunction(null); +emptyFunction.thatReturnsThis = function () { + return this; +}; +emptyFunction.thatReturnsArgument = function (arg) { + return arg; +}; + +module.exports = emptyFunction; + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var validateFormat = function validateFormat(format) {}; + +if (process.env.NODE_ENV !== 'production') { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +} + +module.exports = invariant; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +module.exports = ReactPropTypesSecret; + + +/***/ }), +/* 69 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {var __WEBPACK_AMD_DEFINE_RESULT__;var require;/** @license MIT License (c) copyright 2010-2014 original author or authors */ @@ -21855,7 +22005,7 @@ var go = exports.go = function go(n) { } else if (!capturedSetTimeout) { // vert.x var vertxRequire = require; - var vertx = __webpack_require__(198); + var vertx = __webpack_require__(223); setTimer = function (f, ms) { return vertx.setTimer(ms, f); }; clearTimer = vertx.cancelTimer; asap = vertx.runOnLoop || vertx.runOnContext; @@ -21897,12 +22047,12 @@ var go = exports.go = function go(n) { } }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); -}(__webpack_require__(16))); +}(__webpack_require__(15))); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 66 */ +/* 70 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21918,7 +22068,7 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -22035,7 +22185,7 @@ var VolumeControl = function (_React$Component) { exports.default = VolumeControl; /***/ }), -/* 67 */ +/* 71 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22051,7 +22201,7 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -22113,7 +22263,7 @@ var Popularity = function (_React$Component) { exports.default = Popularity; /***/ }), -/* 68 */ +/* 72 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22223,7 +22373,7 @@ module.exports = exports['default']; /***/ }), -/* 69 */ +/* 73 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22239,9 +22389,9 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -22354,7 +22504,151 @@ var FilterField = function (_React$Component) { exports.default = FilterField; /***/ }), -/* 70 */ +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var validateFormat = function validateFormat(format) {}; + +if (process.env.NODE_ENV !== 'production') { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +} + +module.exports = invariant; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var emptyObject = {}; + +if (process.env.NODE_ENV !== 'production') { + Object.freeze(emptyObject); +} + +module.exports = emptyObject; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var validateFormat = function validateFormat(format) {}; + +if (process.env.NODE_ENV !== 'production') { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +} + +module.exports = invariant; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 77 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22393,7 +22687,7 @@ var ExecutionEnvironment = { module.exports = ExecutionEnvironment; /***/ }), -/* 71 */ +/* 78 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22435,7 +22729,7 @@ function getActiveElement(doc) /*?DOMElement*/{ module.exports = getActiveElement; /***/ }), -/* 72 */ +/* 79 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22506,7 +22800,7 @@ function shallowEqual(objA, objB) { module.exports = shallowEqual; /***/ }), -/* 73 */ +/* 80 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22521,7 +22815,7 @@ module.exports = shallowEqual; * */ -var isTextNode = __webpack_require__(112); +var isTextNode = __webpack_require__(125); /*eslint-disable no-bitwise */ @@ -22549,13 +22843,72 @@ function containsNode(outerNode, innerNode) { module.exports = containsNode; /***/ }), -/* 74 */ +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var emptyObject = {}; + +if (process.env.NODE_ENV !== 'production') { + Object.freeze(emptyObject); +} + +module.exports = emptyObject; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +if (process.env.NODE_ENV !== 'production') { + var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && + Symbol.for && + Symbol.for('react.element')) || + 0xeac7; + + var isValidElement = function(object) { + return typeof object === 'object' && + object !== null && + object.$$typeof === REACT_ELEMENT_TYPE; + }; + + // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + var throwOnDirectAccess = true; + module.exports = __webpack_require__(136)(isValidElement, throwOnDirectAccess); +} else { + // By explicitly using `prop-types` you are opting into new production behavior. + // http://fb.me/prop-types-in-prod + module.exports = __webpack_require__(138)(); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 83 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return subscriptionShape; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return storeShape; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(82); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); @@ -22573,19 +22926,19 @@ var storeShape = __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.shape({ }); /***/ }), -/* 75 */ +/* 84 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = connectAdvanced; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__ = __webpack_require__(76); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__ = __webpack_require__(85); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__ = __webpack_require__(122); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__ = __webpack_require__(74); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__ = __webpack_require__(139); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__ = __webpack_require__(83); var _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; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -22875,95 +23228,92 @@ selectorFactory) { return __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default()(Connect, WrappedComponent); }; } -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 76 */ +/* 85 */ /***/ (function(module, exports, __webpack_require__) { +"use strict"; + + /** * Copyright 2015, Yahoo! Inc. * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ -(function (global, factory) { - true ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.hoistNonReactStatics = factory()); -}(this, (function () { - 'use strict'; - - var REACT_STATICS = { - childContextTypes: true, - contextTypes: true, - defaultProps: true, - displayName: true, - getDefaultProps: true, - getDerivedStateFromProps: true, - mixins: true, - propTypes: true, - type: true - }; - - var KNOWN_STATICS = { - name: true, - length: true, - prototype: true, - caller: true, - callee: true, - arguments: true, - arity: true - }; - - var defineProperty = Object.defineProperty; - var getOwnPropertyNames = Object.getOwnPropertyNames; - var getOwnPropertySymbols = Object.getOwnPropertySymbols; - var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - var getPrototypeOf = Object.getPrototypeOf; - var objectPrototype = getPrototypeOf && getPrototypeOf(Object); - - return function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { - if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components - - if (objectPrototype) { - var inheritedComponent = getPrototypeOf(sourceComponent); - if (inheritedComponent && inheritedComponent !== objectPrototype) { - hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); - } +var REACT_STATICS = { + childContextTypes: true, + contextTypes: true, + defaultProps: true, + displayName: true, + getDefaultProps: true, + getDerivedStateFromProps: true, + mixins: true, + propTypes: true, + type: true +}; + +var KNOWN_STATICS = { + name: true, + length: true, + prototype: true, + caller: true, + callee: true, + arguments: true, + arity: true +}; + +var defineProperty = Object.defineProperty; +var getOwnPropertyNames = Object.getOwnPropertyNames; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var getPrototypeOf = Object.getPrototypeOf; +var objectPrototype = getPrototypeOf && getPrototypeOf(Object); + +function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { + if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components + + if (objectPrototype) { + var inheritedComponent = getPrototypeOf(sourceComponent); + if (inheritedComponent && inheritedComponent !== objectPrototype) { + hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); } - - var keys = getOwnPropertyNames(sourceComponent); - - if (getOwnPropertySymbols) { - keys = keys.concat(getOwnPropertySymbols(sourceComponent)); - } - - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) { - var descriptor = getOwnPropertyDescriptor(sourceComponent, key); - try { // Avoid failures from read-only properties - defineProperty(targetComponent, key, descriptor); - } catch (e) {} - } - } - - return targetComponent; } - + + var keys = getOwnPropertyNames(sourceComponent); + + if (getOwnPropertySymbols) { + keys = keys.concat(getOwnPropertySymbols(sourceComponent)); + } + + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) { + var descriptor = getOwnPropertyDescriptor(sourceComponent, key); + try { // Avoid failures from read-only properties + defineProperty(targetComponent, key, descriptor); + } catch (e) {} + } + } + return targetComponent; - }; -}))); + } + + return targetComponent; +} + +module.exports = hoistNonReactStatics; /***/ }), -/* 77 */ +/* 86 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ActionTypes; }); /* harmony export (immutable) */ __webpack_exports__["b"] = createStore; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(78); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable__ = __webpack_require__(134); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(87); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable__ = __webpack_require__(151); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_symbol_observable__); @@ -23215,13 +23565,13 @@ var ActionTypes = { } /***/ }), -/* 78 */ +/* 87 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__ = __webpack_require__(126); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getPrototype_js__ = __webpack_require__(131); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__ = __webpack_require__(133); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__ = __webpack_require__(143); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getPrototype_js__ = __webpack_require__(148); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__ = __webpack_require__(150); @@ -23287,11 +23637,11 @@ function isPlainObject(value) { /***/ }), -/* 79 */ +/* 88 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(127); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(144); /** Built-in value references. */ @@ -23301,7 +23651,7 @@ var Symbol = __WEBPACK_IMPORTED_MODULE_0__root_js__["a" /* default */].Symbol; /***/ }), -/* 80 */ +/* 89 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -23329,7 +23679,7 @@ function warning(message) { } /***/ }), -/* 81 */ +/* 90 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -23368,14 +23718,14 @@ function compose() { } /***/ }), -/* 82 */ +/* 91 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = wrapMapToPropsConstant; /* unused harmony export getDependsOnOwnProps */ /* harmony export (immutable) */ __webpack_exports__["b"] = wrapMapToPropsFunc; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__ = __webpack_require__(83); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__ = __webpack_require__(92); function wrapMapToPropsConstant(getConstant) { @@ -23443,16 +23793,16 @@ function wrapMapToPropsFunc(mapToProps, methodName) { return proxy; }; } -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 83 */ +/* 92 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = verifyPlainObject; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(141); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__warning__ = __webpack_require__(56); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(158); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__warning__ = __webpack_require__(54); @@ -23463,11 +23813,11 @@ function verifyPlainObject(value, displayName, methodName) { } /***/ }), -/* 84 */ +/* 93 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(143); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(160); /** Built-in value references. */ @@ -23477,17 +23827,17 @@ var Symbol = __WEBPACK_IMPORTED_MODULE_0__root_js__["a" /* default */].Symbol; /***/ }), -/* 85 */ +/* 94 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = createTransitionManager; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__routerWarning__ = __webpack_require__(37); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__computeChangedRoutes__ = __webpack_require__(156); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__TransitionUtils__ = __webpack_require__(157); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__isActive__ = __webpack_require__(158); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__getComponents__ = __webpack_require__(159); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__matchRoutes__ = __webpack_require__(160); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__routerWarning__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__computeChangedRoutes__ = __webpack_require__(177); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__TransitionUtils__ = __webpack_require__(178); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__isActive__ = __webpack_require__(179); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__getComponents__ = __webpack_require__(180); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__matchRoutes__ = __webpack_require__(181); var _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; }; @@ -23746,10 +24096,10 @@ function createTransitionManager(history, routes) { listen: listen }; } -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 86 */ +/* 95 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -23759,7 +24109,7 @@ function isPromise(obj) { } /***/ }), -/* 87 */ +/* 96 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -23789,7 +24139,7 @@ function assignRouterState(router, _ref) { } /***/ }), -/* 88 */ +/* 97 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -23797,12 +24147,12 @@ function assignRouterState(router, _ref) { /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_create_react_class__ = __webpack_require__(26); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_create_react_class___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_create_react_class__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_invariant__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_invariant__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__PropTypes__ = __webpack_require__(60); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__ContextUtils__ = __webpack_require__(59); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__PropTypes__ = __webpack_require__(61); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__ContextUtils__ = __webpack_require__(60); var _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; }; function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } @@ -23932,22 +24282,22 @@ var Link = __WEBPACK_IMPORTED_MODULE_1_create_react_class___default()({ }); /* harmony default export */ __webpack_exports__["a"] = (Link); -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 89 */ +/* 98 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_create_react_class__ = __webpack_require__(26); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_create_react_class___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_create_react_class__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_invariant__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_invariant__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__RouteUtils__ = __webpack_require__(28); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__PatternUtils__ = __webpack_require__(38); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__InternalPropTypes__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__RouteUtils__ = __webpack_require__(29); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__PatternUtils__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__InternalPropTypes__ = __webpack_require__(39); @@ -24031,19 +24381,19 @@ var Redirect = __WEBPACK_IMPORTED_MODULE_0_create_react_class___default()({ }); /* harmony default export */ __webpack_exports__["a"] = (Redirect); -/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) /***/ }), -/* 90 */ +/* 99 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = createMemoryHistory; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries__ = __webpack_require__(91); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries__ = __webpack_require__(100); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename__ = __webpack_require__(92); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename__ = __webpack_require__(101); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_history_lib_createMemoryHistory__ = __webpack_require__(170); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_history_lib_createMemoryHistory__ = __webpack_require__(191); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_history_lib_createMemoryHistory___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_history_lib_createMemoryHistory__); @@ -24062,7 +24412,7 @@ function createMemoryHistory(options) { } /***/ }), -/* 91 */ +/* 100 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24072,15 +24422,15 @@ exports.__esModule = true; var _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; }; -var _queryString = __webpack_require__(168); +var _queryString = __webpack_require__(189); -var _runTransitionHook = __webpack_require__(61); +var _runTransitionHook = __webpack_require__(62); var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); -var _LocationUtils = __webpack_require__(39); +var _LocationUtils = __webpack_require__(37); -var _PathUtils = __webpack_require__(29); +var _PathUtils = __webpack_require__(30); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24189,7 +24539,7 @@ var useQueries = function useQueries(createHistory) { exports.default = useQueries; /***/ }), -/* 92 */ +/* 101 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24199,11 +24549,11 @@ exports.__esModule = true; var _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; }; -var _runTransitionHook = __webpack_require__(61); +var _runTransitionHook = __webpack_require__(62); var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); -var _PathUtils = __webpack_require__(29); +var _PathUtils = __webpack_require__(30); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24304,14 +24654,14 @@ var useBasename = function useBasename(createHistory) { exports.default = useBasename; /***/ }), -/* 93 */ +/* 102 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = useRouterHistory; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries__ = __webpack_require__(91); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries__ = __webpack_require__(100); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_history_lib_useQueries__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename__ = __webpack_require__(92); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename__ = __webpack_require__(101); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_history_lib_useBasename__); @@ -24324,7 +24674,7 @@ function useRouterHistory(createHistory) { } /***/ }), -/* 94 */ +/* 103 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24333,7 +24683,7 @@ function useRouterHistory(createHistory) { exports.__esModule = true; exports.readState = exports.saveState = undefined; -var _warning = __webpack_require__(27); +var _warning = __webpack_require__(28); var _warning2 = _interopRequireDefault(_warning); @@ -24413,15 +24763,15 @@ var readState = exports.readState = function readState(key) { return undefined; }; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 95 */ +/* 104 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = createRouterHistory; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__useRouterHistory__ = __webpack_require__(93); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__useRouterHistory__ = __webpack_require__(102); var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); @@ -24433,7 +24783,76 @@ function createRouterHistory(createHistory) { } /***/ }), -/* 96 */ +/* 105 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var emptyFunction = __webpack_require__(66); + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + +var warning = emptyFunction; + +if (process.env.NODE_ENV !== 'production') { + var printWarning = function printWarning(format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +module.exports = warning; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 106 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ @@ -24463,10 +24882,10 @@ var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-20 return TimeoutError; }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); -}(__webpack_require__(16))); +}(__webpack_require__(15))); /***/ }), -/* 97 */ +/* 107 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ @@ -24504,11 +24923,11 @@ var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-20 }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); -}(__webpack_require__(16))); +}(__webpack_require__(15))); /***/ }), -/* 98 */ +/* 108 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */ @@ -24564,20 +24983,20 @@ var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-20 }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); -}(__webpack_require__(16))); +}(__webpack_require__(15))); /***/ }), -/* 99 */ +/* 109 */ /***/ (function(module, exports, __webpack_require__) { (function(){ - var crypt = __webpack_require__(211), - utf8 = __webpack_require__(100).utf8, - isBuffer = __webpack_require__(212), - bin = __webpack_require__(100).bin, + var crypt = __webpack_require__(236), + utf8 = __webpack_require__(110).utf8, + isBuffer = __webpack_require__(237), + bin = __webpack_require__(110).bin, // The core md5 = function (message, options) { @@ -24736,7 +25155,7 @@ var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-20 /***/ }), -/* 100 */ +/* 110 */ /***/ (function(module, exports) { var charenc = { @@ -24775,7 +25194,7 @@ module.exports = charenc; /***/ }), -/* 101 */ +/* 111 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24791,9 +25210,9 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); var _helpers = __webpack_require__(1); @@ -24892,7 +25311,7 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch) { exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(ProgressSlider); /***/ }), -/* 102 */ +/* 112 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24908,9 +25327,9 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); -var _Icon = __webpack_require__(6); +var _Icon = __webpack_require__(7); var _Icon2 = _interopRequireDefault(_Icon); @@ -24918,7 +25337,7 @@ var _ArtistSentence = __webpack_require__(21); var _ArtistSentence2 = _interopRequireDefault(_ArtistSentence); -var _Dater = __webpack_require__(30); +var _Dater = __webpack_require__(31); var _Dater2 = _interopRequireDefault(_Dater); @@ -24930,11 +25349,11 @@ var _ContextMenuTrigger = __webpack_require__(25); var _ContextMenuTrigger2 = _interopRequireDefault(_ContextMenuTrigger); -var _Popularity = __webpack_require__(67); +var _Popularity = __webpack_require__(71); var _Popularity2 = _interopRequireDefault(_Popularity); -var _ErrorBoundary = __webpack_require__(227); +var _ErrorBoundary = __webpack_require__(252); var _ErrorBoundary2 = _interopRequireDefault(_ErrorBoundary); @@ -25408,7 +25827,7 @@ exports.default = Track; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(19))) /***/ }), -/* 103 */ +/* 113 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25492,7 +25911,7 @@ var RelatedArtists = function (_React$Component) { exports.default = RelatedArtists; /***/ }), -/* 104 */ +/* 114 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25616,7 +26035,7 @@ var ConfirmationButton = function (_React$Component) { exports.default = ConfirmationButton; /***/ }), -/* 105 */ +/* 115 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25632,9 +26051,9 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); var _reactGa = __webpack_require__(17); @@ -25644,7 +26063,7 @@ var _Thumbnail = __webpack_require__(12); var _Thumbnail2 = _interopRequireDefault(_Thumbnail); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); @@ -25804,7 +26223,7 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch) { exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SpotifyAuthenticationFrame); /***/ }), -/* 106 */ +/* 116 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25820,9 +26239,9 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); var _reactGa = __webpack_require__(17); @@ -25832,7 +26251,7 @@ var _Thumbnail = __webpack_require__(12); var _Thumbnail2 = _interopRequireDefault(_Thumbnail); -var _actions = __webpack_require__(3); +var _actions = __webpack_require__(4); var uiActions = _interopRequireWildcard(_actions); @@ -25991,7 +26410,7 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch) { exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(LastfmAuthenticationFrame); /***/ }), -/* 107 */ +/* 117 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26006,7 +26425,7 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _propTypes = __webpack_require__(13); +var _propTypes = __webpack_require__(16); var _propTypes2 = _interopRequireDefault(_propTypes); @@ -26050,7 +26469,7 @@ module.exports = exports['default']; //# sourceMappingURL=label.js.map /***/ }), -/* 108 */ +/* 118 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26060,133 +26479,133 @@ var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); -var _reactDom = __webpack_require__(48); +var _reactDom = __webpack_require__(44); var _reactDom2 = _interopRequireDefault(_reactDom); -var _reactRedux = __webpack_require__(4); +var _reactRedux = __webpack_require__(5); -var _redux = __webpack_require__(2); +var _redux = __webpack_require__(3); -var _reactRouter = __webpack_require__(5); +var _reactRouter = __webpack_require__(6); -var _bootstrap = __webpack_require__(179); +var _bootstrap = __webpack_require__(200); var _bootstrap2 = _interopRequireDefault(_bootstrap); -var _App = __webpack_require__(217); +var _App = __webpack_require__(242); var _App2 = _interopRequireDefault(_App); -var _Album = __webpack_require__(231); +var _Album = __webpack_require__(256); var _Album2 = _interopRequireDefault(_Album); -var _Artist = __webpack_require__(232); +var _Artist = __webpack_require__(257); var _Artist2 = _interopRequireDefault(_Artist); -var _Playlist = __webpack_require__(233); +var _Playlist = __webpack_require__(258); var _Playlist2 = _interopRequireDefault(_Playlist); -var _User = __webpack_require__(234); +var _User = __webpack_require__(259); var _User2 = _interopRequireDefault(_User); -var _Track = __webpack_require__(235); +var _Track = __webpack_require__(260); var _Track2 = _interopRequireDefault(_Track); -var _Queue = __webpack_require__(237); +var _Queue = __webpack_require__(262); var _Queue2 = _interopRequireDefault(_Queue); -var _QueueHistory = __webpack_require__(238); +var _QueueHistory = __webpack_require__(263); var _QueueHistory2 = _interopRequireDefault(_QueueHistory); -var _Debug = __webpack_require__(239); +var _Debug = __webpack_require__(264); var _Debug2 = _interopRequireDefault(_Debug); -var _Search = __webpack_require__(240); +var _Search = __webpack_require__(265); var _Search2 = _interopRequireDefault(_Search); -var _Settings = __webpack_require__(242); +var _Settings = __webpack_require__(267); var _Settings2 = _interopRequireDefault(_Settings); -var _DiscoverRecommendations = __webpack_require__(253); +var _DiscoverRecommendations = __webpack_require__(278); var _DiscoverRecommendations2 = _interopRequireDefault(_DiscoverRecommendations); -var _DiscoverFeatured = __webpack_require__(271); +var _DiscoverFeatured = __webpack_require__(296); var _DiscoverFeatured2 = _interopRequireDefault(_DiscoverFeatured); -var _DiscoverCategories = __webpack_require__(272); +var _DiscoverCategories = __webpack_require__(297); var _DiscoverCategories2 = _interopRequireDefault(_DiscoverCategories); -var _DiscoverCategory = __webpack_require__(274); +var _DiscoverCategory = __webpack_require__(299); var _DiscoverCategory2 = _interopRequireDefault(_DiscoverCategory); -var _DiscoverNewReleases = __webpack_require__(275); +var _DiscoverNewReleases = __webpack_require__(300); var _DiscoverNewReleases2 = _interopRequireDefault(_DiscoverNewReleases); -var _LibraryArtists = __webpack_require__(276); +var _LibraryArtists = __webpack_require__(301); var _LibraryArtists2 = _interopRequireDefault(_LibraryArtists); -var _LibraryAlbums = __webpack_require__(277); +var _LibraryAlbums = __webpack_require__(302); var _LibraryAlbums2 = _interopRequireDefault(_LibraryAlbums); -var _LibraryTracks = __webpack_require__(278); +var _LibraryTracks = __webpack_require__(303); var _LibraryTracks2 = _interopRequireDefault(_LibraryTracks); -var _LibraryPlaylists = __webpack_require__(279); +var _LibraryPlaylists = __webpack_require__(304); var _LibraryPlaylists2 = _interopRequireDefault(_LibraryPlaylists); -var _LibraryBrowse = __webpack_require__(280); +var _LibraryBrowse = __webpack_require__(305); var _LibraryBrowse2 = _interopRequireDefault(_LibraryBrowse); -var _EditPlaylist = __webpack_require__(281); +var _EditPlaylist = __webpack_require__(306); var _EditPlaylist2 = _interopRequireDefault(_EditPlaylist); -var _CreatePlaylist = __webpack_require__(282); +var _CreatePlaylist = __webpack_require__(307); var _CreatePlaylist2 = _interopRequireDefault(_CreatePlaylist); -var _EditRadio = __webpack_require__(283); +var _EditRadio = __webpack_require__(308); var _EditRadio2 = _interopRequireDefault(_EditRadio); -var _AddToQueue = __webpack_require__(284); +var _AddToQueue = __webpack_require__(309); var _AddToQueue2 = _interopRequireDefault(_AddToQueue); -var _InitialSetup = __webpack_require__(285); +var _InitialSetup = __webpack_require__(310); var _InitialSetup2 = _interopRequireDefault(_InitialSetup); -var _KioskMode = __webpack_require__(286); +var _KioskMode = __webpack_require__(311); var _KioskMode2 = _interopRequireDefault(_KioskMode); -var _ShareAuthorization = __webpack_require__(287); +var _ShareAuthorization = __webpack_require__(312); var _ShareAuthorization2 = _interopRequireDefault(_ShareAuthorization); -var _AddToPlaylist = __webpack_require__(288); +var _AddToPlaylist = __webpack_require__(313); var _AddToPlaylist2 = _interopRequireDefault(_AddToPlaylist); @@ -26196,7 +26615,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * Base-level application wrapper **/ -__webpack_require__(289); +__webpack_require__(314); global.baseURL = '/'; @@ -26244,11 +26663,11 @@ _reactDom2.default.render(_react2.default.createElement( /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10))) /***/ }), -/* 109 */ +/* 119 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/** @license React v16.3.0 +/** @license React v16.4.1 * react.production.min.js * * Copyright (c) 2013-present, Facebook, Inc. @@ -26257,27 +26676,27 @@ _reactDom2.default.render(_react2.default.createElement( * LICENSE file in the root directory of this source tree. */ -var m=__webpack_require__(33),n=__webpack_require__(41),p=__webpack_require__(34),q="function"===typeof Symbol&&Symbol["for"],r=q?Symbol["for"]("react.element"):60103,t=q?Symbol["for"]("react.portal"):60106,u=q?Symbol["for"]("react.fragment"):60107,v=q?Symbol["for"]("react.strict_mode"):60108,w=q?Symbol["for"]("react.provider"):60109,x=q?Symbol["for"]("react.context"):60110,y=q?Symbol["for"]("react.async_mode"):60111,z=q?Symbol["for"]("react.forward_ref"):60112,A="function"=== -typeof Symbol&&Symbol.iterator;function B(a){for(var b=arguments.length-1,e="Minified React error #"+a+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\x3d"+a,c=0;cN.length&&N.push(a)} -function Q(a,b,e,c){var d=typeof a;if("undefined"===d||"boolean"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case "string":case "number":g=!0;break;case "object":switch(a.$$typeof){case r:case t:g=!0}}if(g)return e(c,a,""===b?"."+R(a,0):b),1;g=0;b=""===b?".":b+":";if(Array.isArray(a))for(var h=0;hP.length&&P.push(a)} +function S(a,b,e,c){var d=typeof a;if("undefined"===d||"boolean"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case "string":case "number":g=!0;break;case "object":switch(a.$$typeof){case t:case u:g=!0}}if(g)return e(c,a,""===b?"."+T(a,0):b),1;g=0;b=""===b?".":b+":";if(Array.isArray(a))for(var h=0;h 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +module.exports = warning; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var printWarning = function() {}; + +if (process.env.NODE_ENV !== 'production') { + var ReactPropTypesSecret = __webpack_require__(123); + var loggedTypeFailures = {}; + + printWarning = function(text) { + var message = 'Warning: ' + text; + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} + +/** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ +function checkPropTypes(typeSpecs, values, location, componentName, getStack) { + if (process.env.NODE_ENV !== 'production') { + for (var typeSpecName in typeSpecs) { + if (typeSpecs.hasOwnProperty(typeSpecName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error( + (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + ); + err.name = 'Invariant Violation'; + throw err; + } + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); + } catch (ex) { + error = ex; + } + if (error && !(error instanceof Error)) { + printWarning( + (componentName || 'React class') + ': type specification of ' + + location + ' `' + typeSpecName + '` is invalid; the type checker ' + + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + + 'You may have forgotten to pass an argument to the type checker ' + + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + + 'shape all require an argument).' + ) + + } + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var stack = getStack ? getStack() : ''; + + printWarning( + 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') + ); + } + } + } + } +} + +module.exports = checkPropTypes; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +module.exports = ReactPropTypesSecret; + + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** @license React v16.4.1 * react-dom.production.min.js * * Copyright (c) 2013-present, Facebook, Inc. @@ -27710,243 +28389,238 @@ module.exports = react; /* Modernizr 3.0.0pre (Custom Build) | MIT */ -var ba=__webpack_require__(0),m=__webpack_require__(70),A=__webpack_require__(33),C=__webpack_require__(34),ea=__webpack_require__(71),fa=__webpack_require__(72),ha=__webpack_require__(73),ja=__webpack_require__(41); -function D(a){for(var b=arguments.length-1,c="Minified React error #"+a+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\x3d"+a,d=0;dthis.eventPool.length&&this.eventPool.push(a)}function qb(a){a.eventPool=[];a.getPooled=rb;a.release=sb}var tb=N.extend({data:null}),ub=N.extend({data:null}),vb=[9,13,27,32],wb=m.canUseDOM&&"CompositionEvent"in window,xb=null;m.canUseDOM&&"documentMode"in document&&(xb=document.documentMode); -var yb=m.canUseDOM&&"TextEvent"in window&&!xb,zb=m.canUseDOM&&(!wb||xb&&8=xb),Ab=String.fromCharCode(32),Eb={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart", -captured:"onCompositionStartCapture"},dependencies:"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")}},Kb=!1; -function Lb(a,b){switch(a){case "topKeyUp":return-1!==vb.indexOf(b.keyCode);case "topKeyDown":return 229!==b.keyCode;case "topKeyPress":case "topMouseDown":case "topBlur":return!0;default:return!1}}function Mb(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:null}var Nb=!1;function Ob(a,b){switch(a){case "topCompositionEnd":return Mb(b);case "topKeyPress":if(32!==b.which)return null;Kb=!0;return Ab;case "topTextInput":return a=b.data,a===Ab&&Kb?null:a;default:return null}} -function Pb(a,b){if(Nb)return"topCompositionEnd"===a||!wb&&Lb(a,b)?(a=mb(),M._root=null,M._startText=null,M._fallbackText=null,Nb=!1,a):null;switch(a){case "topPaste":return null;case "topKeyPress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1b}return!1} -function U(a,b,c,d,e){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b}var V={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){V[a]=new U(a,0,!1,a,null)}); -[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];V[b]=new U(b,1,!1,a[1],null)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){V[a]=new U(a,2,!1,a.toLowerCase(),null)});["autoReverse","externalResourcesRequired","preserveAlpha"].forEach(function(a){V[a]=new U(a,2,!1,a,null)}); -"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){V[a]=new U(a,3,!1,a.toLowerCase(),null)});["checked","multiple","muted","selected"].forEach(function(a){V[a]=new U(a,3,!0,a.toLowerCase(),null)});["capture","download"].forEach(function(a){V[a]=new U(a,4,!1,a.toLowerCase(),null)}); -["cols","rows","size","span"].forEach(function(a){V[a]=new U(a,6,!1,a.toLowerCase(),null)});["rowSpan","start"].forEach(function(a){V[a]=new U(a,5,!1,a.toLowerCase(),null)});var Hc=/[\-\:]([a-z])/g;function Sc(a){return a[1].toUpperCase()} -"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(Hc, -Sc);V[b]=new U(b,1,!1,a,null)});"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(Hc,Sc);V[b]=new U(b,1,!1,a,"http://www.w3.org/1999/xlink")});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(Hc,Sc);V[b]=new U(b,1,!1,a,"http://www.w3.org/XML/1998/namespace")});V.tabIndex=new U("tabIndex",1,!1,"tabindex",null); -function Tc(a,b,c,d){var e=V.hasOwnProperty(b)?V[b]:null;var f=null!==e?0===e.type:d?!1:!(2Sd.length&&Sd.push(a)}}} -var Zd=Object.freeze({get _enabled(){return Ud},setEnabled:Vd,isEnabled:function(){return Ud},trapBubbledEvent:W,trapCapturedEvent:Yd,dispatchEvent:Xd});function $d(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c["Webkit"+a]="webkit"+b;c["Moz"+a]="moz"+b;c["ms"+a]="MS"+b;c["O"+a]="o"+b.toLowerCase();return c} -var ae={animationend:$d("Animation","AnimationEnd"),animationiteration:$d("Animation","AnimationIteration"),animationstart:$d("Animation","AnimationStart"),transitionend:$d("Transition","TransitionEnd")},be={},ce={};m.canUseDOM&&(ce=document.createElement("div").style,"AnimationEvent"in window||(delete ae.animationend.animation,delete ae.animationiteration.animation,delete ae.animationstart.animation),"TransitionEvent"in window||delete ae.transitionend.transition); -function de(a){if(be[a])return be[a];if(!ae[a])return a;var b=ae[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in ce)return be[a]=b[c];return a} -var ee={topAnimationEnd:de("animationend"),topAnimationIteration:de("animationiteration"),topAnimationStart:de("animationstart"),topBlur:"blur",topCancel:"cancel",topChange:"change",topClick:"click",topClose:"close",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave", -topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoad:"load",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topScroll:"scroll",topSelectionChange:"selectionchange",topTextInput:"textInput",topToggle:"toggle",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove", -topTouchStart:"touchstart",topTransitionEnd:de("transitionend"),topWheel:"wheel"},fe={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking", -topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},ge={},he=0,ie="_reactListenersID"+(""+Math.random()).slice(2);function je(a){Object.prototype.hasOwnProperty.call(a,ie)||(a[ie]=he++,ge[a[ie]]={});return ge[a[ie]]}function ke(a){for(;a&&a.firstChild;)a=a.firstChild;return a} -function le(a,b){var c=ke(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ke(c)}}function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&"text"===a.type||"textarea"===b||"true"===a.contentEditable)} -var ne=m.canUseDOM&&"documentMode"in document&&11>=document.documentMode,oe={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange".split(" ")}},pe=null,qe=null,re=null,se=!1; -function ue(a,b){if(se||null==pe||pe!==ea())return null;var c=pe;"selectionStart"in c&&me(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return re&&fa(re,c)?null:(re=c,a=N.getPooled(oe.select,qe,a,b),a.type="select",a.target=pe,hb(a),a)} -var we={eventTypes:oe,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=je(e);f=ua.onSelect;for(var h=0;hb.expirationTime)a.expirationTime=b.expirationTime}var Le=void 0,Me=void 0; -function Ne(a){Le=Me=null;var b=a.alternate,c=a.updateQueue;null===c&&(c=a.updateQueue=Je(null));null!==b?(a=b.updateQueue,null===a&&(a=b.updateQueue=Je(null))):a=null;Le=c;Me=a!==c?a:null}function Oe(a,b){Ne(a);a=Le;var c=Me;null===c?Ke(a,b):null===a.last||null===c.last?(Ke(a,b),Ke(c,b)):(Ke(a,b),c.last=b)}function Pe(a,b,c,d){a=a.partialState;return"function"===typeof a?a.call(b,c,d):a} -function Qe(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={baseState:c.baseState,expirationTime:c.expirationTime,first:c.first,last:c.last,isInitialized:c.isInitialized,capturedValues:c.capturedValues,callbackList:null,hasForceUpdate:!1});c.expirationTime=0;c.isInitialized?a=c.baseState:(a=c.baseState=b.memoizedState,c.isInitialized=!0);for(var h=!0,g=c.first,k=!1;null!==g;){var v=g.expirationTime;if(v>f){var l=c.expirationTime;if(0===l||l>v)c.expirationTime=v;k||(k=!0,c.baseState=a)}else{k|| -(c.first=g.next,null===c.first&&(c.last=null));if(g.isReplace)a=Pe(g,d,a,e),h=!0;else if(v=Pe(g,d,a,e))a=h?A({},a,v):A(a,v),h=!1;g.isForced&&(c.hasForceUpdate=!0);null!==g.callback&&(v=c.callbackList,null===v&&(v=c.callbackList=[]),v.push(g));null!==g.capturedValue&&(v=c.capturedValues,null===v?c.capturedValues=[g.capturedValue]:v.push(g.capturedValue))}g=g.next}null!==c.callbackList?b.effectTag|=32:null!==c.first||c.hasForceUpdate||null!==c.capturedValues||(b.updateQueue=null);k||(c.baseState=a); -return a}function Re(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=null,a=0;at?(u=q,q=null):u=q.sibling;var n=y(e,q,l[t],h);if(null===n){null===q&&(q=u);break}a&&q&&null=== -n.alternate&&b(e,q);g=f(n,g,t);null===k?r=n:k.sibling=n;k=n;q=u}if(t===l.length)return c(e,q),r;if(null===q){for(;tt?(u=q,q=null):u=q.sibling;var H=y(e,q,n.value,h);if(null===H){q||(q=u);break}a&&q&&null===H.alternate&&b(e,q);g=f(H,g,t);null===k?r=H:k.sibling=H;k=H;q=u}if(n.done)return c(e,q),r;if(null===q){for(;!n.done;t++,n=l.next())n=p(e,n.value,h),null!==n&&(g=f(n,g,t),null===k?r=n:k.sibling=n,k=n);return r}for(q=d(e,q);!n.done;t++,n=l.next())if(n=B(q,e,t,n.value,h),null!==n){if(a&&null!==n.alternate)q["delete"](null===n.key?t:n.key); -g=f(n,g,t);null===k?r=n:k.sibling=n;k=n}a&&q.forEach(function(a){return b(e,a)});return r}return function(a,d,f,g){"object"===typeof f&&null!==f&&f.type===rc&&null===f.key&&(f=f.props.children);var l="object"===typeof f&&null!==f;if(l)switch(f.$$typeof){case nc:a:{var k=f.key;for(l=d;null!==l;){if(l.key===k)if(10===l.tag?f.type===rc:l.type===f.type){c(a,l.sibling);d=e(l,f.type===rc?f.props.children:f.props,g);d.ref=Ue(a,l,f);d["return"]=a;a=d;break a}else{c(a,l);break}else b(a,l);l=l.sibling}f.type=== -rc?(d=Ae(f.props.children,a.mode,g,f.key),d["return"]=a,a=d):(g=ze(f,a.mode,g),g.ref=Ue(a,d,f),g["return"]=a,a=g)}return h(a);case qc:a:{for(l=f.key;null!==d;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],g);d["return"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Ce(f,a.mode,g);d["return"]=a;a=d}return h(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&& -6===d.tag?(c(a,d.sibling),d=e(d,f,g)):(c(a,d),d=Be(f,a.mode,g)),d["return"]=a,a=d,h(a);if(Te(f))return r(a,d,f,g);if(yc(f))return Q(a,d,f,g);l&&Ve(a,f);if("undefined"===typeof f)switch(a.tag){case 2:case 1:g=a.type,D("152",g.displayName||g.name||"Component")}return c(a,d)}}var Xe=We(!0),Ye=We(!1); -function Ze(a,b,c,d,e,f,h){function g(a,b,c){k(a,b,c,b.expirationTime)}function k(a,b,c,d){b.child=null===a?Ye(b,null,c,d):Xe(b,a.child,c,d)}function v(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function l(a,b,c,d,e,f){v(a,b);if(!c&&!e)return d&&z(b,!1),r(a,b);c=b.stateNode;mc.current=b;var g=e?null:c.render();b.effectTag|=1;e&&(k(a,b,null,f),b.child=null);k(a,b,g,f);b.memoizedState=c.state;b.memoizedProps=c.props;d&&z(b,!0);return b.child}function p(a){var b=a.stateNode; -b.pendingContext?u(a,b.pendingContext,b.pendingContext!==b.context):b.context&&u(a,b.context,!1);Y(a,b.containerInfo)}function y(a,b,c,d){var e=a.child;for(null!==e&&(e["return"]=a);null!==e;){switch(e.tag){case 12:var f=e.stateNode|0;if(e.type===b&&0!==(f&c)){for(f=e;null!==f;){var g=f.alternate;if(0===f.expirationTime||f.expirationTime>d)f.expirationTime=d,null!==g&&(0===g.expirationTime||g.expirationTime>d)&&(g.expirationTime=d);else if(null!==g&&(0===g.expirationTime||g.expirationTime>d))g.expirationTime= -d;else break;f=f["return"]}f=null}else f=e.child;break;case 13:f=e.type===a.type?null:e.child;break;default:f=e.child}if(null!==f)f["return"]=e;else for(f=e;null!==f;){if(f===a){f=null;break}e=f.sibling;if(null!==e){f=e;break}f=f["return"]}e=f}}function B(a,b,c){var d=b.type.context,e=b.pendingProps,f=b.memoizedProps;if(!q()&&f===e)return b.stateNode=0,G(b),r(a,b);var l=e.value;b.memoizedProps=e;if(null===f)l=1073741823;else if(f.value===e.value){if(f.children===e.children)return b.stateNode=0,G(b), -r(a,b);l=0}else{var t=f.value;if(t===l&&(0!==t||1/t===1/l)||t!==t&&l!==l){if(f.children===e.children)return b.stateNode=0,G(b),r(a,b);l=0}else if(l="function"===typeof d._calculateChangedBits?d._calculateChangedBits(t,l):1073741823,l|=0,0===l){if(f.children===e.children)return b.stateNode=0,G(b),r(a,b)}else y(b,d,l,c)}b.stateNode=l;G(b);g(a,b,e.children);return b.child}function r(a,b){null!==a&&b.child!==a.child?D("153"):void 0;if(null!==b.child){a=b.child;var c=ye(a,a.pendingProps,a.expirationTime); -b.child=c;for(c["return"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=ye(a,a.pendingProps,a.expirationTime),c["return"]=b;c.sibling=null}return b.child}var Q=a.shouldSetTextContent,n=a.shouldDeprioritizeSubtree,x=b.pushHostContext,Y=b.pushHostContainer,G=d.pushProvider,R=c.getMaskedContext,S=c.getUnmaskedContext,q=c.hasContextChanged,t=c.pushContextProvider,u=c.pushTopLevelContextObject,z=c.invalidateContextProvider,H=e.enterHydrationState,Wa=e.resetHydrationState,Bb=e.tryToClaimNextHydratableInstance; -a=Se(c,f,h,function(a,b){a.memoizedProps=b},function(a,b){a.memoizedState=b});var Jc=a.adoptClassInstance,Kc=a.callGetDerivedStateFromProps,Lc=a.constructClassInstance,Cb=a.mountClassInstance,Mc=a.resumeMountClassInstance,Db=a.updateClassInstance;return{beginWork:function(a,b,c){if(0===b.expirationTime||b.expirationTime>c){switch(b.tag){case 3:p(b);break;case 2:t(b);break;case 4:Y(b,b.stateNode.containerInfo);break;case 13:G(b)}return null}switch(b.tag){case 0:null!==a?D("155"):void 0;var d=b.type, -e=b.pendingProps,f=S(b);f=R(b,f);d=d(e,f);b.effectTag|=1;"object"===typeof d&&null!==d&&"function"===typeof d.render&&void 0===d.$$typeof?(f=b.type,b.tag=2,b.memoizedState=null!==d.state&&void 0!==d.state?d.state:null,"function"===typeof f.getDerivedStateFromProps&&(e=Kc(b,d,e,b.memoizedState),null!==e&&void 0!==e&&(b.memoizedState=A({},b.memoizedState,e))),e=t(b),Jc(b,d),Cb(b,c),a=l(a,b,!0,e,!1,c)):(b.tag=1,g(a,b,d),b.memoizedProps=e,a=b.child);return a;case 1:return e=b.type,c=b.pendingProps,q()|| -b.memoizedProps!==c?(d=S(b),d=R(b,d),e=e(c,d),b.effectTag|=1,g(a,b,e),b.memoizedProps=c,a=b.child):a=r(a,b),a;case 2:e=t(b);null===a?null===b.stateNode?(Lc(b,b.pendingProps),Cb(b,c),d=!0):d=Mc(b,c):d=Db(a,b,c);f=!1;var h=b.updateQueue;null!==h&&null!==h.capturedValues&&(f=d=!0);return l(a,b,d,e,f,c);case 3:a:if(p(b),d=b.updateQueue,null!==d){f=b.memoizedState;e=Qe(a,b,d,null,null,c);b.memoizedState=e;d=b.updateQueue;if(null!==d&&null!==d.capturedValues)d=null;else if(f===e){Wa();a=r(a,b);break a}else d= -e.element;f=b.stateNode;(null===a||null===a.child)&&f.hydrate&&H(b)?(b.effectTag|=2,b.child=Ye(b,null,d,c)):(Wa(),g(a,b,d));b.memoizedState=e;a=b.child}else Wa(),a=r(a,b);return a;case 5:a:{x(b);null===a&&Bb(b);e=b.type;h=b.memoizedProps;d=b.pendingProps;f=null!==a?a.memoizedProps:null;if(!q()&&h===d){if(h=b.mode&1&&n(e,d))b.expirationTime=1073741823;if(!h||1073741823!==c){a=r(a,b);break a}}h=d.children;Q(e,d)?h=null:f&&Q(e,f)&&(b.effectTag|=16);v(a,b);1073741823!==c&&b.mode&1&&n(e,d)?(b.expirationTime= -1073741823,b.memoizedProps=d,a=null):(g(a,b,h),b.memoizedProps=d,a=b.child)}return a;case 6:return null===a&&Bb(b),b.memoizedProps=b.pendingProps,null;case 8:b.tag=7;case 7:return e=b.pendingProps,q()||b.memoizedProps!==e||(e=b.memoizedProps),d=e.children,b.stateNode=null===a?Ye(b,b.stateNode,d,c):Xe(b,a.stateNode,d,c),b.memoizedProps=e,b.stateNode;case 9:return null;case 4:return Y(b,b.stateNode.containerInfo),e=b.pendingProps,q()||b.memoizedProps!==e?(null===a?b.child=Xe(b,null,e,c):g(a,b,e),b.memoizedProps= -e,a=b.child):a=r(a,b),a;case 14:return c=b.type.render,c=c(b.pendingProps,b.ref),g(a,b,c),b.memoizedProps=c,b.child;case 10:return c=b.pendingProps,q()||b.memoizedProps!==c?(g(a,b,c),b.memoizedProps=c,a=b.child):a=r(a,b),a;case 11:return c=b.pendingProps.children,q()||null!==c&&b.memoizedProps!==c?(g(a,b,c),b.memoizedProps=c,a=b.child):a=r(a,b),a;case 13:return B(a,b,c);case 12:d=b.type;f=b.pendingProps;var u=b.memoizedProps;e=d._currentValue;h=d._changedBits;if(q()||0!==h||u!==f){b.memoizedProps= -f;u=f.unstable_observedBits;if(void 0===u||null===u)u=1073741823;b.stateNode=u;0!==(h&u)&&y(b,d,h,c);c=f.children;c=c(e);g(a,b,c);a=b.child}else a=r(a,b);return a;default:D("156")}}}} -function $e(a,b,c,d,e){function f(a){a.effectTag|=4}var h=a.createInstance,g=a.createTextInstance,k=a.appendInitialChild,v=a.finalizeInitialChildren,l=a.prepareUpdate,p=a.persistence,y=b.getRootHostContainer,B=b.popHostContext,r=b.getHostContext,Q=b.popHostContainer,n=c.popContextProvider,x=c.popTopLevelContextObject,Y=d.popProvider,G=e.prepareToHydrateHostInstance,R=e.prepareToHydrateHostTextInstance,S=e.popHydrationState,q=void 0,t=void 0,u=void 0;a.mutation?(q=function(){},t=function(a,b,c){(b.updateQueue= -c)&&f(b)},u=function(a,b,c,d){c!==d&&f(b)}):p?D("235"):D("236");return{completeWork:function(a,b,c){var d=b.pendingProps;switch(b.tag){case 1:return null;case 2:return n(b),a=b.stateNode,d=b.updateQueue,null!==d&&null!==d.capturedValues&&(b.effectTag&=-65,"function"===typeof a.componentDidCatch?b.effectTag|=256:d.capturedValues=null),null;case 3:Q(b);x(b);d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)S(b),b.effectTag&=-3;q(b);a=b.updateQueue; -null!==a&&null!==a.capturedValues&&(b.effectTag|=256);return null;case 5:B(b);c=y();var e=b.type;if(null!==a&&null!=b.stateNode){var p=a.memoizedProps,H=b.stateNode,z=r();H=l(H,e,p,d,c,z);t(a,b,H,e,p,d,c,z);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!d)return null===b.stateNode?D("166"):void 0,null;a=r();if(S(b))G(b,c,a)&&f(b);else{p=h(e,d,c,a,b);a:for(z=b.child;null!==z;){if(5===z.tag||6===z.tag)k(p,z.stateNode);else if(4!==z.tag&&null!==z.child){z.child["return"]=z;z=z.child;continue}if(z===b)break; -for(;null===z.sibling;){if(null===z["return"]||z["return"]===b)break a;z=z["return"]}z.sibling["return"]=z["return"];z=z.sibling}v(p,e,d,c,a)&&f(b);b.stateNode=p}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)u(a,b,a.memoizedProps,d);else{if("string"!==typeof d)return null===b.stateNode?D("166"):void 0,null;a=y();c=r();S(b)?R(b)&&f(b):b.stateNode=g(d,a,c,b)}return null;case 7:(d=b.memoizedProps)?void 0:D("165");b.tag=8;e=[];a:for((p=b.stateNode)&&(p["return"]=b);null!== -p;){if(5===p.tag||6===p.tag||4===p.tag)D("247");else if(9===p.tag)e.push(p.pendingProps.value);else if(null!==p.child){p.child["return"]=p;p=p.child;continue}for(;null===p.sibling;){if(null===p["return"]||p["return"]===b)break a;p=p["return"]}p.sibling["return"]=p["return"];p=p.sibling}p=d.handler;d=p(d.props,e);b.child=Xe(b,null!==a?a.child:null,d,c);return b.child;case 8:return b.tag=7,null;case 9:return null;case 14:return null;case 10:return null;case 11:return null;case 4:return Q(b),q(b),null; -case 13:return Y(b),null;case 12:return null;case 0:D("167");default:D("156")}}}} -function af(a,b,c,d,e){var f=a.popHostContainer,h=a.popHostContext,g=b.popContextProvider,k=b.popTopLevelContextObject,v=c.popProvider;return{throwException:function(a,b,c){b.effectTag|=512;b.firstEffect=b.lastEffect=null;b={value:c,source:b,stack:Ac(b)};do{switch(a.tag){case 3:Ne(a);a.updateQueue.capturedValues=[b];a.effectTag|=1024;return;case 2:if(c=a.stateNode,0===(a.effectTag&64)&&null!==c&&"function"===typeof c.componentDidCatch&&!e(c)){Ne(a);c=a.updateQueue;var d=c.capturedValues;null===d? -c.capturedValues=[b]:d.push(b);a.effectTag|=1024;return}}a=a["return"]}while(null!==a)},unwindWork:function(a){switch(a.tag){case 2:g(a);var b=a.effectTag;return b&1024?(a.effectTag=b&-1025|64,a):null;case 3:return f(a),k(a),b=a.effectTag,b&1024?(a.effectTag=b&-1025|64,a):null;case 5:return h(a),null;case 4:return f(a),null;case 13:return v(a),null;default:return null}},unwindInterruptedWork:function(a){switch(a.tag){case 2:g(a);break;case 3:f(a);k(a);break;case 5:h(a);break;case 4:f(a);break;case 13:v(a)}}}} -function bf(a,b){var c=b.source;null===b.stack&&Ac(c);null!==c&&zc(c);b=b.value;null!==a&&2===a.tag&&zc(a);try{b&&b.suppressReactErrorLogging||console.error(b)}catch(d){d&&d.suppressReactErrorLogging||console.error(d)}} -function cf(a,b,c,d,e){function f(a){var c=a.ref;if(null!==c)if("function"===typeof c)try{c(null)}catch(u){b(a,u)}else c.current=null}function h(a){"function"===typeof Ie&&Ie(a);switch(a.tag){case 2:f(a);var c=a.stateNode;if("function"===typeof c.componentWillUnmount)try{c.props=a.memoizedProps,c.state=a.memoizedState,c.componentWillUnmount()}catch(u){b(a,u)}break;case 5:f(a);break;case 7:g(a.stateNode);break;case 4:p&&v(a)}}function g(a){for(var b=a;;)if(h(b),null===b.child||p&&4===b.tag){if(b=== -a)break;for(;null===b.sibling;){if(null===b["return"]||b["return"]===a)return;b=b["return"]}b.sibling["return"]=b["return"];b=b.sibling}else b.child["return"]=b,b=b.child}function k(a){return 5===a.tag||3===a.tag||4===a.tag}function v(a){for(var b=a,c=!1,d=void 0,e=void 0;;){if(!c){c=b["return"];a:for(;;){null===c?D("160"):void 0;switch(c.tag){case 5:d=c.stateNode;e=!1;break a;case 3:d=c.stateNode.containerInfo;e=!0;break a;case 4:d=c.stateNode.containerInfo;e=!0;break a}c=c["return"]}c=!0}if(5=== -b.tag||6===b.tag)g(b),e?S(d,b.stateNode):R(d,b.stateNode);else if(4===b.tag?d=b.stateNode.containerInfo:h(b),null!==b.child){b.child["return"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b["return"]||b["return"]===a)return;b=b["return"];4===b.tag&&(c=!1)}b.sibling["return"]=b["return"];b=b.sibling}}var l=a.getPublicInstance,p=a.mutation;a=a.persistence;p||(a?D("235"):D("236"));var y=p.commitMount,B=p.commitUpdate,r=p.resetTextContent,Q=p.commitTextUpdate,n=p.appendChild, -x=p.appendChildToContainer,Y=p.insertBefore,G=p.insertInContainerBefore,R=p.removeChild,S=p.removeChildFromContainer;return{commitBeforeMutationLifeCycles:function(a,b){switch(b.tag){case 2:if(b.effectTag&2048&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;a.props=b.memoizedProps;a.state=b.memoizedState;b=a.getSnapshotBeforeUpdate(c,d);a.__reactInternalSnapshotBeforeUpdate=b}break;case 3:case 5:case 6:case 4:break;default:D("163")}},commitResetTextContent:function(a){r(a.stateNode)}, -commitPlacement:function(a){a:{for(var b=a["return"];null!==b;){if(k(b)){var c=b;break a}b=b["return"]}D("160");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:D("161")}c.effectTag&16&&(r(b),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c["return"]||k(c["return"])){c=null;break a}c=c["return"]}c.sibling["return"]=c["return"];for(c=c.sibling;5!==c.tag&&6!== -c.tag;){if(c.effectTag&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child["return"]=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)c?d?G(b,e.stateNode,c):Y(b,e.stateNode,c):d?x(b,e.stateNode):n(b,e.stateNode);else if(4!==e.tag&&null!==e.child){e.child["return"]=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e["return"]||e["return"]===a)return;e=e["return"]}e.sibling["return"]=e["return"];e=e.sibling}},commitDeletion:function(a){v(a); -a["return"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate["return"]=null)},commitWork:function(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&B(c,f,e,a,d,b)}break;case 6:null===b.stateNode?D("162"):void 0;c=b.memoizedProps;Q(b.stateNode,null!==a?a.memoizedProps:c,c);break;case 3:break;default:D("163")}},commitLifeCycles:function(a,b,c){switch(c.tag){case 2:a= -c.stateNode;if(c.effectTag&4)if(null===b)a.props=c.memoizedProps,a.state=c.memoizedState,a.componentDidMount();else{var d=b.memoizedProps;b=b.memoizedState;a.props=c.memoizedProps;a.state=c.memoizedState;a.componentDidUpdate(d,b,a.__reactInternalSnapshotBeforeUpdate)}c=c.updateQueue;null!==c&&Re(c,a);break;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=l(c.child.stateNode);break;case 2:a=c.child.stateNode}Re(b,a)}break;case 5:a=c.stateNode;null===b&&c.effectTag& -4&&y(a,c.type,c.memoizedProps,c);break;case 6:break;case 4:break;default:D("163")}},commitErrorLogging:function(a,b){switch(a.tag){case 2:var c=a.type;b=a.stateNode;var d=a.updateQueue;null===d||null===d.capturedValues?D("264"):void 0;var f=d.capturedValues;d.capturedValues=null;"function"!==typeof c.getDerivedStateFromCatch&&e(b);b.props=a.memoizedProps;b.state=a.memoizedState;for(c=0;cb||(c.current=a[b],a[b]=null,b--)},push:function(c,d){b++;a[b]=c.current;c.current=d},checkThatStackIsEmpty:function(){},resetStackAfterFatalErrorInDev:function(){}}} -function kf(a){function b(){if(null!==I)for(var a=I["return"];null!==a;)Lc(a),a=a["return"];Xa=null;Z=0;I=null;Nc=!1}function c(a){return null!==ya&&ya.has(a)}function d(a){for(;;){var b=a.alternate,c=a["return"],d=a.sibling;if(0===(a.effectTag&512)){b=Bb(b,a,Z);var e=a;if(1073741823===Z||1073741823!==e.expirationTime){b:switch(e.tag){case 3:case 2:var f=e.updateQueue;f=null===f?0:f.expirationTime;break b;default:f=0}for(var g=e.child;null!==g;)0!==g.expirationTime&&(0===f||f>g.expirationTime)&&(f= -g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&0===(c.effectTag&512)&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1da)&&(da=a);return a}function v(a,c){a:{for(;null!==a;){if(0===a.expirationTime||a.expirationTime>c)a.expirationTime=c;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>c)&&(a.alternate.expirationTime=c);if(null===a["return"])if(3===a.tag){var d= -a.stateNode;!ca&&0!==Z&&cwg&&D("185")}else{c=void 0;break a}a=a["return"]}c=void 0}return c}function l(){ve=Ic()-Pc;return xg=(ve/10|0)+2}function p(a,b,c,d,e){var f=ia;ia=1;try{return a(b,c,d,e)}finally{ia=f}}function y(a){if(0!==Gb){if(a>Gb)return;yg(Qc)}var b=Ic()-Pc;Gb=a;Qc=lg(Q,{timeout:10*(a-2)-b})}function B(a,b){if(null===a.nextScheduledRoot)a.remainingExpirationTime=b,null===K?(la=K=a,a.nextScheduledRoot=a):(K=K.nextScheduledRoot=a,K.nextScheduledRoot=la); -else{var c=a.remainingExpirationTime;if(0===c||b=P)&&(!Ib||l()>=P);)G(aa,P,!Ib),r();else for(;null!==aa&&0!==P&&(0===a||a>=P);)G(aa,P,!1),r();null!==Za&&(Gb=0,Qc=-1);0!==P&&y(P);Za=null;Ib=!1;Y()}function Y(){Fb=0;if(null!==Aa){var a=Aa;Aa=null;for(var b= -0;bBg?!1:Ib=!0}function q(a){null===aa?D("246"):void 0;aa.remainingExpirationTime=0;Ba||(Ba=!0,Jb=a)}var t=jf(),u=ef(a,t),z=gf(t);t=hf(t);var H=ff(a), -Wa=Ze(a,u,z,t,H,v,k).beginWork,Bb=$e(a,u,z,t,H).completeWork;u=af(u,z,t,v,c);var Jc=u.throwException,Kc=u.unwindWork,Lc=u.unwindInterruptedWork;u=cf(a,g,v,k,function(a){null===ya?ya=new Set([a]):ya.add(a)},l);var Cb=u.commitBeforeMutationLifeCycles,Mc=u.commitResetTextContent,Db=u.commitPlacement,gg=u.commitDeletion,te=u.commitWork,hg=u.commitLifeCycles,ig=u.commitErrorLogging,jg=u.commitAttachRef,kg=u.commitDetachRef,Ic=a.now,lg=a.scheduleDeferredCallback,yg=a.cancelDeferredCallback,zg=a.prepareForCommit, -Ag=a.resetAfterCommit,Pc=Ic(),xg=2,ve=Pc,Rc=0,ia=0,ca=!1,I=null,Xa=null,Z=0,w=null,Ya=!1,Nc=!1,ya=null,la=null,K=null,Gb=0,Qc=-1,T=!1,aa=null,P=0,da=0,Ib=!1,Ba=!1,Jb=null,Za=null,J=!1,Hb=!1,za=!1,Aa=null,wg=1E3,Fb=0,Bg=1;return{recalculateCurrentTime:l,computeExpirationForFiber:k,scheduleWork:v,requestWork:B,flushRoot:function(a,b){T?D("253"):void 0;aa=a;P=b;G(a,b,!1);n();Y()},batchedUpdates:function(a,b){var c=J;J=!0;try{return a(b)}finally{(J=c)||T||n()}},unbatchedUpdates:function(a,b){if(J&&!Hb){Hb= -!0;try{return a(b)}finally{Hb=!1}}return a(b)},flushSync:function(a,b){T?D("187"):void 0;var c=J;J=!0;try{return p(a,b)}finally{J=c,n()}},flushControlled:function(a){var b=J;J=!0;try{p(a)}finally{(J=b)||T||x(1,!1,null)}},deferredUpdates:function(a){var b=ia;ia=25*(((l()+500)/25|0)+1);try{return a()}finally{ia=b}},syncUpdates:p,interactiveUpdates:function(a,b,c){if(za)return a(b,c);J||T||0===da||(x(da,!1,null),da=0);var d=za,e=J;J=za=!0;try{return a(b,c)}finally{za=d,(J=e)||T||n()}},flushInteractiveUpdates:function(){T|| -0===da||(x(da,!1,null),da=0)},computeUniqueAsyncExpiration:function(){var a=25*(((l()+500)/25|0)+1);a<=Rc&&(a=Rc+1);return Rc=a},legacyContext:z}} -function lf(a){function b(a,b,c,d,e,f){d=b.current;if(c){c=c._reactInternalFiber;var g=k(c);c=v(c)?l(c,g):g}else c=ja;null===b.context?b.context=c:b.pendingContext=c;b=f;Oe(d,{expirationTime:e,partialState:{element:a},callback:void 0===b?null:b,isReplace:!1,isForced:!1,capturedValue:null,next:null});h(d,e);return e}function c(a){a=Ad(a);return null===a?null:a.stateNode}var d=a.getPublicInstance;a=kf(a);var e=a.recalculateCurrentTime,f=a.computeExpirationForFiber,h=a.scheduleWork,g=a.legacyContext, -k=g.findCurrentUnmaskedContext,v=g.isContextProvider,l=g.processChildContext;return{createContainer:function(a,b,c){b=new xe(3,null,null,b?3:0);a={current:b,containerInfo:a,pendingChildren:null,pendingCommitExpirationTime:0,finishedWork:null,context:null,pendingContext:null,hydrate:c,remainingExpirationTime:0,firstBatch:null,nextScheduledRoot:null};return b.stateNode=a},updateContainer:function(a,c,d,g){var h=c.current,k=e();h=f(h);return b(a,c,d,k,h,g)},updateContainerAtExpirationTime:function(a, -c,d,f,g){var h=e();return b(a,c,d,h,f,g)},flushRoot:a.flushRoot,requestWork:a.requestWork,computeUniqueAsyncExpiration:a.computeUniqueAsyncExpiration,batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,syncUpdates:a.syncUpdates,interactiveUpdates:a.interactiveUpdates,flushInteractiveUpdates:a.flushInteractiveUpdates,flushControlled:a.flushControlled,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return d(a.child.stateNode); -default:return a.child.stateNode}},findHostInstance:c,findHostInstanceWithNoPortals:function(a){a=Bd(a);return null===a?null:a.stateNode},injectIntoDevTools:function(a){var b=a.findFiberByHostInstance;return Ge(A({},a,{findHostInstanceByFiber:function(a){return c(a)},findFiberByHostInstance:function(a){return b?b(a):null}}))}}}var mf=Object.freeze({default:lf}),nf=mf&&lf||mf,of=nf["default"]?nf["default"]:nf; -function pf(a,b,c){var d=3=yf-a)if(-1!== -wf&&wf<=a)Bf.didTimeout=!0;else{xf||(xf=!0,requestAnimationFrame(Df));return}else Bf.didTimeout=!1;wf=-1;a=uf;uf=null;null!==a&&a(Bf)}},!1);var Df=function(a){xf=!1;var b=a-yf+Af;bb&&(b=8),Af=b=b.length?void 0:D("93"),b=b[0]),c=""+b),null==c&&(c=""));a._wrapperState={initialValue:""+c}} -function Kf(a,b){var c=b.value;null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Lf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Mf={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"}; -function Nf(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Of(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?Nf(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a} -var Pf=void 0,Qf=function(a){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mf.svg||"innerHTML"in a)a.innerHTML=b;else{Pf=Pf||document.createElement("div");Pf.innerHTML="\x3csvg\x3e"+b+"\x3c/svg\x3e";for(b=Pf.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}}); -function Rf(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b} -var Sf={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0, -stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Tf=["Webkit","ms","Moz","O"];Object.keys(Sf).forEach(function(a){Tf.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Sf[b]=Sf[a]})}); -function Uf(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--");var e=c;var f=b[c];e=null==f||"boolean"===typeof f||""===f?"":d||"number"!==typeof f||0===f||Sf.hasOwnProperty(e)&&Sf[e]?(""+f).trim():f+"px";"float"===c&&(c="cssFloat");d?a.setProperty(c,e):a[c]=e}}var Vf=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}); -function Wf(a,b,c){b&&(Vf[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?D("137",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?D("60"):void 0,"object"===typeof b.dangerouslySetInnerHTML&&"__html"in b.dangerouslySetInnerHTML?void 0:D("61")),null!=b.style&&"object"!==typeof b.style?D("62",c()):void 0)} -function Xf(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return!1;default:return!0}}var Yf=Mf.html,Zf=C.thatReturns(""); -function $f(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=je(a);b=ua[b];for(var d=0;d -d&&(e=d,d=a,a=e);e=le(c,a);var f=le(c,d);if(e&&f&&(1!==b.rangeCount||b.anchorNode!==e.node||b.anchorOffset!==e.offset||b.focusNode!==f.node||b.focusOffset!==f.offset)){var h=document.createRange();h.setStart(e.node,e.offset);b.removeAllRanges();a>d?(b.addRange(h),b.extend(f.node,f.offset)):(h.setEnd(f.node,f.offset),b.addRange(h))}}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});c.focus();for(c=0;cthis.eventPool.length&&this.eventPool.push(a)}function qb(a){a.eventPool=[];a.getPooled=rb;a.release=sb}var tb=H.extend({data:null}),ub=H.extend({data:null}),vb=[9,13,27,32],wb=m.canUseDOM&&"CompositionEvent"in window,xb=null;m.canUseDOM&&"documentMode"in document&&(xb=document.documentMode); +var yb=m.canUseDOM&&"TextEvent"in window&&!xb,zb=m.canUseDOM&&(!wb||xb&&8=xb),Ab=String.fromCharCode(32),Bb={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart", +captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},Cb=!1; +function Db(a,b){switch(a){case "keyup":return-1!==vb.indexOf(b.keyCode);case "keydown":return 229!==b.keyCode;case "keypress":case "mousedown":case "blur":return!0;default:return!1}}function Eb(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:null}var Fb=!1;function Gb(a,b){switch(a){case "compositionend":return Eb(b);case "keypress":if(32!==b.which)return null;Cb=!0;return Ab;case "textInput":return a=b.data,a===Ab&&Cb?null:a;default:return null}} +function Hb(a,b){if(Fb)return"compositionend"===a||!wb&&Db(a,b)?(a=mb(),G._root=null,G._startText=null,G._fallbackText=null,Fb=!1,a):null;switch(a){case "paste":return null;case "keypress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1b}return!1} +function I(a,b,c,d,e){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b}var J={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){J[a]=new I(a,0,!1,a,null)}); +[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];J[b]=new I(b,1,!1,a[1],null)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){J[a]=new I(a,2,!1,a.toLowerCase(),null)});["autoReverse","externalResourcesRequired","preserveAlpha"].forEach(function(a){J[a]=new I(a,2,!1,a,null)}); +"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){J[a]=new I(a,3,!1,a.toLowerCase(),null)});["checked","multiple","muted","selected"].forEach(function(a){J[a]=new I(a,3,!0,a.toLowerCase(),null)});["capture","download"].forEach(function(a){J[a]=new I(a,4,!1,a.toLowerCase(),null)}); +["cols","rows","size","span"].forEach(function(a){J[a]=new I(a,6,!1,a.toLowerCase(),null)});["rowSpan","start"].forEach(function(a){J[a]=new I(a,5,!1,a.toLowerCase(),null)});var Dc=/[\-:]([a-z])/g;function Ec(a){return a[1].toUpperCase()} +"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(Dc, +Ec);J[b]=new I(b,1,!1,a,null)});"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(Dc,Ec);J[b]=new I(b,1,!1,a,"http://www.w3.org/1999/xlink")});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(Dc,Ec);J[b]=new I(b,1,!1,a,"http://www.w3.org/XML/1998/namespace")});J.tabIndex=new I("tabIndex",1,!1,"tabindex",null); +function Fc(a,b,c,d){var e=J.hasOwnProperty(b)?J[b]:null;var f=null!==e?0===e.type:d?!1:!(2Fd.length&&Fd.push(a)}}} +var Nd={get _enabled(){return Hd},setEnabled:Id,isEnabled:function(){return Hd},trapBubbledEvent:K,trapCapturedEvent:Md,dispatchEvent:Ld},Od={},Pd=0,Qd="_reactListenersID"+(""+Math.random()).slice(2);function Rd(a){Object.prototype.hasOwnProperty.call(a,Qd)||(a[Qd]=Pd++,Od[a[Qd]]={});return Od[a[Qd]]}function Sd(a){for(;a&&a.firstChild;)a=a.firstChild;return a} +function Td(a,b){var c=Sd(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Sd(c)}}function Ud(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&("text"===a.type||"search"===a.type||"tel"===a.type||"url"===a.type||"password"===a.type)||"textarea"===b||"true"===a.contentEditable)} +var Vd=m.canUseDOM&&"documentMode"in document&&11>=document.documentMode,Wd={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu focus keydown keyup mousedown mouseup selectionchange".split(" ")}},Xd=null,Yd=null,Zd=null,$d=!1; +function ae(a,b){if($d||null==Xd||Xd!==da())return null;var c=Xd;"selectionStart"in c&&Ud(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return Zd&&ea(Zd,c)?null:(Zd=c,a=H.getPooled(Wd.select,Yd,a,b),a.type="select",a.target=Xd,Ya(a),a)} +var be={eventTypes:Wd,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Rd(e);f=sa.onSelect;for(var g=0;gb)){a=-1;for(var c=[],d=L;null!==d;){var e=d.timeoutTime;-1!==e&&e<=b?c.push(d):-1!==e&&(-1===a||eb&&(b=8),re=b=b.length?void 0:A("93"),b=b[0]),c=""+b),null==c&&(c=""));a._wrapperState={initialValue:""+c}} +function De(a,b){var c=b.value;null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Ee(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Fe={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"}; +function Ge(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function He(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?Ge(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a} +var Ie=void 0,Je=function(a){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Fe.svg||"innerHTML"in a)a.innerHTML=b;else{Ie=Ie||document.createElement("div");Ie.innerHTML=""+b+"";for(b=Ie.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}}); +function Ke(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b} +var Le={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0, +stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Me=["Webkit","ms","Moz","O"];Object.keys(Le).forEach(function(a){Me.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Le[b]=Le[a]})}); +function Ne(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--");var e=c;var f=b[c];e=null==f||"boolean"===typeof f||""===f?"":d||"number"!==typeof f||0===f||Le.hasOwnProperty(e)&&Le[e]?(""+f).trim():f+"px";"float"===c&&(c="cssFloat");d?a.setProperty(c,e):a[c]=e}}var Oe=p({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}); +function Pe(a,b,c){b&&(Oe[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?A("137",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?A("60"):void 0,"object"===typeof b.dangerouslySetInnerHTML&&"__html"in b.dangerouslySetInnerHTML?void 0:A("61")),null!=b.style&&"object"!==typeof b.style?A("62",c()):void 0)} +function Qe(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return!1;default:return!0}}var Re=v.thatReturns(""); +function Se(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Rd(a);b=sa[b];for(var d=0;d\x3c/script>",a=a.removeChild(a.firstChild)):a="string"===typeof b.is?c.createElement(a,{is:b.is}):c.createElement(a):a=c.createElementNS(d,a);return a}function Ue(a,b){return(9===b.nodeType?b:b.ownerDocument).createTextNode(a)} +function Ve(a,b,c,d){var e=Qe(b,c);switch(b){case "iframe":case "object":K("load",a);var f=c;break;case "video":case "audio":for(f=0;flf||(a.current=kf[lf],kf[lf]=null,lf--)}function N(a,b){lf++;kf[lf]=a.current;a.current=b}var nf=mf(ha),O=mf(!1),of=ha;function pf(a){return qf(a)?of:nf.current} +function rf(a,b){var c=a.type.contextTypes;if(!c)return ha;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function qf(a){return 2===a.tag&&null!=a.type.childContextTypes}function sf(a){qf(a)&&(M(O,a),M(nf,a))}function tf(a){M(O,a);M(nf,a)} +function uf(a,b,c){nf.current!==ha?A("168"):void 0;N(nf,b,a);N(O,c,a)}function vf(a,b){var c=a.stateNode,d=a.type.childContextTypes;if("function"!==typeof c.getChildContext)return b;c=c.getChildContext();for(var e in c)e in d?void 0:A("108",uc(a)||"Unknown",e);return p({},b,c)}function wf(a){if(!qf(a))return!1;var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||ha;of=nf.current;N(nf,b,a);N(O,O.current,a);return!0} +function xf(a,b){var c=a.stateNode;c?void 0:A("169");if(b){var d=vf(a,of);c.__reactInternalMemoizedMergedChildContext=d;M(O,a);M(nf,a);N(nf,d,a)}else M(O,a);N(O,b,a)} +function yf(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=null;this.index=0;this.ref=null;this.pendingProps=b;this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.expirationTime=0;this.alternate=null} +function zf(a,b,c){var d=a.alternate;null===d?(d=new yf(a.tag,b,a.key,a.mode),d.type=a.type,d.stateNode=a.stateNode,d.alternate=a,a.alternate=d):(d.pendingProps=b,d.effectTag=0,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null);d.expirationTime=c;d.child=a.child;d.memoizedProps=a.memoizedProps;d.memoizedState=a.memoizedState;d.updateQueue=a.updateQueue;d.sibling=a.sibling;d.index=a.index;d.ref=a.ref;return d} +function Af(a,b,c){var d=a.type,e=a.key;a=a.props;if("function"===typeof d)var f=d.prototype&&d.prototype.isReactComponent?2:0;else if("string"===typeof d)f=5;else switch(d){case ic:return Bf(a.children,b,c,e);case pc:f=11;b|=3;break;case jc:f=11;b|=2;break;case kc:return d=new yf(15,a,e,b|4),d.type=kc,d.expirationTime=c,d;case rc:f=16;b|=2;break;default:a:{switch("object"===typeof d&&null!==d?d.$$typeof:null){case lc:f=13;break a;case mc:f=12;break a;case qc:f=14;break a;default:A("130",null==d? +d:typeof d,"")}f=void 0}}b=new yf(f,a,e,b);b.type=d;b.expirationTime=c;return b}function Bf(a,b,c,d){a=new yf(10,a,d,b);a.expirationTime=c;return a}function Cf(a,b,c){a=new yf(6,a,null,b);a.expirationTime=c;return a}function Df(a,b,c){b=new yf(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b} +function Ef(a,b,c){b=new yf(3,null,null,b?3:0);a={current:b,containerInfo:a,pendingChildren:null,earliestPendingTime:0,latestPendingTime:0,earliestSuspendedTime:0,latestSuspendedTime:0,latestPingedTime:0,pendingCommitExpirationTime:0,finishedWork:null,context:null,pendingContext:null,hydrate:c,remainingExpirationTime:0,firstBatch:null,nextScheduledRoot:null};return b.stateNode=a}var Ff=null,Gf=null;function Hf(a){return function(b){try{return a(b)}catch(c){}}} +function If(a){if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Ff=Hf(function(a){return b.onCommitFiberRoot(c,a)});Gf=Hf(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}function Jf(a){"function"===typeof Ff&&Ff(a)}function Kf(a){"function"===typeof Gf&&Gf(a)}var Lf=!1; +function Mf(a){return{expirationTime:0,baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Nf(a){return{expirationTime:a.expirationTime,baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}} +function Of(a){return{expirationTime:a,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Pf(a,b,c){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b);if(0===a.expirationTime||a.expirationTime>c)a.expirationTime=c} +function Qf(a,b,c){var d=a.alternate;if(null===d){var e=a.updateQueue;var f=null;null===e&&(e=a.updateQueue=Mf(a.memoizedState))}else e=a.updateQueue,f=d.updateQueue,null===e?null===f?(e=a.updateQueue=Mf(a.memoizedState),f=d.updateQueue=Mf(d.memoizedState)):e=a.updateQueue=Nf(f):null===f&&(f=d.updateQueue=Nf(e));null===f||e===f?Pf(e,b,c):null===e.lastUpdate||null===f.lastUpdate?(Pf(e,b,c),Pf(f,b,c)):(Pf(e,b,c),f.lastUpdate=b)} +function Rf(a,b,c){var d=a.updateQueue;d=null===d?a.updateQueue=Mf(a.memoizedState):Sf(a,d);null===d.lastCapturedUpdate?d.firstCapturedUpdate=d.lastCapturedUpdate=b:(d.lastCapturedUpdate.next=b,d.lastCapturedUpdate=b);if(0===d.expirationTime||d.expirationTime>c)d.expirationTime=c}function Sf(a,b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=Nf(b));return b} +function Tf(a,b,c,d,e,f){switch(c.tag){case 1:return a=c.payload,"function"===typeof a?a.call(f,d,e):a;case 3:a.effectTag=a.effectTag&-1025|64;case 0:a=c.payload;e="function"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return p({},d,e);case 2:Lf=!0}return d} +function Uf(a,b,c,d,e){Lf=!1;if(!(0===b.expirationTime||b.expirationTime>e)){b=Sf(a,b);for(var f=b.baseState,g=null,h=0,k=b.firstUpdate,n=f;null!==k;){var r=k.expirationTime;if(r>e){if(null===g&&(g=k,f=n),0===h||h>r)h=r}else n=Tf(a,b,k,n,c,d),null!==k.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastEffect?b.firstEffect=b.lastEffect=k:(b.lastEffect.nextEffect=k,b.lastEffect=k));k=k.next}r=null;for(k=b.firstCapturedUpdate;null!==k;){var w=k.expirationTime;if(w>e){if(null===r&&(r=k,null=== +g&&(f=n)),0===h||h>w)h=w}else n=Tf(a,b,k,n,c,d),null!==k.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastCapturedEffect?b.firstCapturedEffect=b.lastCapturedEffect=k:(b.lastCapturedEffect.nextEffect=k,b.lastCapturedEffect=k));k=k.next}null===g&&(b.lastUpdate=null);null===r?b.lastCapturedUpdate=null:a.effectTag|=32;null===g&&null===r&&(f=n);b.baseState=f;b.firstUpdate=g;b.firstCapturedUpdate=r;b.expirationTime=h;a.memoizedState=n}} +function Vf(a,b){"function"!==typeof a?A("191",a):void 0;a.call(b)} +function Wf(a,b,c){null!==b.firstCapturedUpdate&&(null!==b.lastUpdate&&(b.lastUpdate.next=b.firstCapturedUpdate,b.lastUpdate=b.lastCapturedUpdate),b.firstCapturedUpdate=b.lastCapturedUpdate=null);a=b.firstEffect;for(b.firstEffect=b.lastEffect=null;null!==a;){var d=a.callback;null!==d&&(a.callback=null,Vf(d,c));a=a.nextEffect}a=b.firstCapturedEffect;for(b.firstCapturedEffect=b.lastCapturedEffect=null;null!==a;)b=a.callback,null!==b&&(a.callback=null,Vf(b,c)),a=a.nextEffect} +function Xf(a,b){return{value:a,source:b,stack:vc(b)}}var Yf=mf(null),Zf=mf(null),$f=mf(0);function ag(a){var b=a.type._context;N($f,b._changedBits,a);N(Zf,b._currentValue,a);N(Yf,a,a);b._currentValue=a.pendingProps.value;b._changedBits=a.stateNode}function bg(a){var b=$f.current,c=Zf.current;M(Yf,a);M(Zf,a);M($f,a);a=a.type._context;a._currentValue=c;a._changedBits=b}var cg={},dg=mf(cg),eg=mf(cg),fg=mf(cg);function gg(a){a===cg?A("174"):void 0;return a} +function ig(a,b){N(fg,b,a);N(eg,a,a);N(dg,cg,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:He(null,"");break;default:c=8===c?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=He(b,c)}M(dg,a);N(dg,b,a)}function jg(a){M(dg,a);M(eg,a);M(fg,a)}function kg(a){eg.current===a&&(M(dg,a),M(eg,a))}function lg(a,b,c){var d=a.memoizedState;b=b(c,d);d=null===b||void 0===b?d:p({},d,b);a.memoizedState=d;a=a.updateQueue;null!==a&&0===a.expirationTime&&(a.baseState=d)} +var pg={isMounted:function(a){return(a=a._reactInternalFiber)?2===jd(a):!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=mg();d=ng(d,a);var e=Of(d);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Qf(a,e,d);og(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=mg();d=ng(d,a);var e=Of(d);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Qf(a,e,d);og(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=mg();c=ng(c,a);var d=Of(c);d.tag=2;void 0!== +b&&null!==b&&(d.callback=b);Qf(a,d,c);og(a,c)}};function qg(a,b,c,d,e,f){var g=a.stateNode;a=a.type;return"function"===typeof g.shouldComponentUpdate?g.shouldComponentUpdate(c,e,f):a.prototype&&a.prototype.isPureReactComponent?!ea(b,c)||!ea(d,e):!0} +function rg(a,b,c,d){a=b.state;"function"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);"function"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&pg.enqueueReplaceState(b,b.state,null)} +function sg(a,b){var c=a.type,d=a.stateNode,e=a.pendingProps,f=pf(a);d.props=e;d.state=a.memoizedState;d.refs=ha;d.context=rf(a,f);f=a.updateQueue;null!==f&&(Uf(a,f,e,d,b),d.state=a.memoizedState);f=a.type.getDerivedStateFromProps;"function"===typeof f&&(lg(a,f,e),d.state=a.memoizedState);"function"===typeof c.getDerivedStateFromProps||"function"===typeof d.getSnapshotBeforeUpdate||"function"!==typeof d.UNSAFE_componentWillMount&&"function"!==typeof d.componentWillMount||(c=d.state,"function"===typeof d.componentWillMount&& +d.componentWillMount(),"function"===typeof d.UNSAFE_componentWillMount&&d.UNSAFE_componentWillMount(),c!==d.state&&pg.enqueueReplaceState(d,d.state,null),f=a.updateQueue,null!==f&&(Uf(a,f,e,d,b),d.state=a.memoizedState));"function"===typeof d.componentDidMount&&(a.effectTag|=4)}var tg=Array.isArray; +function ug(a,b,c){a=c.ref;if(null!==a&&"function"!==typeof a&&"object"!==typeof a){if(c._owner){c=c._owner;var d=void 0;c&&(2!==c.tag?A("110"):void 0,d=c.stateNode);d?void 0:A("147",a);var e=""+a;if(null!==b&&null!==b.ref&&"function"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs===ha?d.refs={}:d.refs;null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}"string"!==typeof a?A("148"):void 0;c._owner?void 0:A("254",a)}return a} +function vg(a,b){"textarea"!==a.type&&A("31","[object Object]"===Object.prototype.toString.call(b)?"object with keys {"+Object.keys(b).join(", ")+"}":b,"")} +function wg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=zf(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,dq?(n=t,t=null):n=t.sibling;var l=P(e,t,h[q],k);if(null===l){null===t&&(t=n);break}a&&t&&null===l.alternate&&b(e, +t);g=f(l,g,q);null===x?u=l:x.sibling=l;x=l;t=n}if(q===h.length)return c(e,t),u;if(null===t){for(;qx?(y=n,n=null):y=n.sibling;var r=P(e,n,l.value,k);if(null===r){n||(n=y);break}a&&n&&null===r.alternate&&b(e,n);g=f(r,g,x);null===t?u=r:t.sibling=r;t=r;n=y}if(l.done)return c(e,n),u;if(null===n){for(;!l.done;x++,l=h.next())l=w(e,l.value,k),null!==l&&(g=f(l,g,x),null===t?u=l:t.sibling=l,t=l);return u}for(n=d(e,n);!l.done;x++,l=h.next())l=nc(n,e,x,l.value,k),null!==l&&(a&&null!==l.alternate&&n.delete(null===l.key?x:l.key),g=f(l,g,x),null=== +t?u=l:t.sibling=l,t=l);a&&n.forEach(function(a){return b(e,a)});return u}return function(a,d,f,h){var k="object"===typeof f&&null!==f&&f.type===ic&&null===f.key;k&&(f=f.props.children);var n="object"===typeof f&&null!==f;if(n)switch(f.$$typeof){case gc:a:{n=f.key;for(k=d;null!==k;){if(k.key===n)if(10===k.tag?f.type===ic:k.type===f.type){c(a,k.sibling);d=e(k,f.type===ic?f.props.children:f.props,h);d.ref=ug(a,k,f);d.return=a;a=d;break a}else{c(a,k);break}else b(a,k);k=k.sibling}f.type===ic?(d=Bf(f.props.children, +a.mode,h,f.key),d.return=a,a=d):(h=Af(f,a.mode,h),h.ref=ug(a,d,f),h.return=a,a=h)}return g(a);case hc:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Df(f,a.mode,h);d.return=a;a=d}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h),d.return= +a,a=d):(c(a,d),d=Cf(f,a.mode,h),d.return=a,a=d),g(a);if(tg(f))return Jd(a,d,f,h);if(tc(f))return E(a,d,f,h);n&&vg(a,f);if("undefined"===typeof f&&!k)switch(a.tag){case 2:case 1:h=a.type,A("152",h.displayName||h.name||"Component")}return c(a,d)}}var xg=wg(!0),yg=wg(!1),zg=null,Ag=null,Bg=!1;function Cg(a,b){var c=new yf(5,null,null,0);c.type="DELETED";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c} +function Dg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=""===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;default:return!1}}function Eg(a){if(Bg){var b=Ag;if(b){var c=b;if(!Dg(a,b)){b=hf(c);if(!b||!Dg(a,b)){a.effectTag|=2;Bg=!1;zg=a;return}Cg(zg,c)}zg=a;Ag=jf(b)}else a.effectTag|=2,Bg=!1,zg=a}} +function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag;)a=a.return;zg=a}function Gg(a){if(a!==zg)return!1;if(!Bg)return Fg(a),Bg=!0,!1;var b=a.type;if(5!==a.tag||"head"!==b&&"body"!==b&&!df(b,a.memoizedProps))for(b=Ag;b;)Cg(a,b),b=hf(b);Fg(a);Ag=zg?hf(a.stateNode):null;return!0}function Hg(){Ag=zg=null;Bg=!1}function Q(a,b,c){Ig(a,b,c,b.expirationTime)}function Ig(a,b,c,d){b.child=null===a?yg(b,null,c,d):xg(b,a.child,c,d)} +function Jg(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function Kg(a,b,c,d,e){Jg(a,b);var f=0!==(b.effectTag&64);if(!c&&!f)return d&&xf(b,!1),R(a,b);c=b.stateNode;ec.current=b;var g=f?null:c.render();b.effectTag|=1;f&&(Ig(a,b,null,e),b.child=null);Ig(a,b,g,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&xf(b,!0);return b.child} +function Lg(a){var b=a.stateNode;b.pendingContext?uf(a,b.pendingContext,b.pendingContext!==b.context):b.context&&uf(a,b.context,!1);ig(a,b.containerInfo)} +function Mg(a,b,c,d){var e=a.child;null!==e&&(e.return=a);for(;null!==e;){switch(e.tag){case 12:var f=e.stateNode|0;if(e.type===b&&0!==(f&c)){for(f=e;null!==f;){var g=f.alternate;if(0===f.expirationTime||f.expirationTime>d)f.expirationTime=d,null!==g&&(0===g.expirationTime||g.expirationTime>d)&&(g.expirationTime=d);else if(null!==g&&(0===g.expirationTime||g.expirationTime>d))g.expirationTime=d;else break;f=f.return}f=null}else f=e.child;break;case 13:f=e.type===a.type?null:e.child;break;default:f= +e.child}if(null!==f)f.return=e;else for(f=e;null!==f;){if(f===a){f=null;break}e=f.sibling;if(null!==e){e.return=f.return;f=e;break}f=f.return}e=f}} +function Qg(a,b,c){var d=b.type._context,e=b.pendingProps,f=b.memoizedProps,g=!0;if(O.current)g=!1;else if(f===e)return b.stateNode=0,ag(b),R(a,b);var h=e.value;b.memoizedProps=e;if(null===f)h=1073741823;else if(f.value===e.value){if(f.children===e.children&&g)return b.stateNode=0,ag(b),R(a,b);h=0}else{var k=f.value;if(k===h&&(0!==k||1/k===1/h)||k!==k&&h!==h){if(f.children===e.children&&g)return b.stateNode=0,ag(b),R(a,b);h=0}else if(h="function"===typeof d._calculateChangedBits?d._calculateChangedBits(k, +h):1073741823,h|=0,0===h){if(f.children===e.children&&g)return b.stateNode=0,ag(b),R(a,b)}else Mg(b,d,h,c)}b.stateNode=h;ag(b);Q(a,b,e.children);return b.child}function R(a,b){null!==a&&b.child!==a.child?A("153"):void 0;if(null!==b.child){a=b.child;var c=zf(a,a.pendingProps,a.expirationTime);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=zf(a,a.pendingProps,a.expirationTime),c.return=b;c.sibling=null}return b.child} +function Rg(a,b,c){if(0===b.expirationTime||b.expirationTime>c){switch(b.tag){case 3:Lg(b);break;case 2:wf(b);break;case 4:ig(b,b.stateNode.containerInfo);break;case 13:ag(b)}return null}switch(b.tag){case 0:null!==a?A("155"):void 0;var d=b.type,e=b.pendingProps,f=pf(b);f=rf(b,f);d=d(e,f);b.effectTag|=1;"object"===typeof d&&null!==d&&"function"===typeof d.render&&void 0===d.$$typeof?(f=b.type,b.tag=2,b.memoizedState=null!==d.state&&void 0!==d.state?d.state:null,f=f.getDerivedStateFromProps,"function"=== +typeof f&&lg(b,f,e),e=wf(b),d.updater=pg,b.stateNode=d,d._reactInternalFiber=b,sg(b,c),a=Kg(a,b,!0,e,c)):(b.tag=1,Q(a,b,d),b.memoizedProps=e,a=b.child);return a;case 1:return e=b.type,c=b.pendingProps,O.current||b.memoizedProps!==c?(d=pf(b),d=rf(b,d),e=e(c,d),b.effectTag|=1,Q(a,b,e),b.memoizedProps=c,a=b.child):a=R(a,b),a;case 2:e=wf(b);if(null===a)if(null===b.stateNode){var g=b.pendingProps,h=b.type;d=pf(b);var k=2===b.tag&&null!=b.type.contextTypes;f=k?rf(b,d):ha;g=new h(g,f);b.memoizedState=null!== +g.state&&void 0!==g.state?g.state:null;g.updater=pg;b.stateNode=g;g._reactInternalFiber=b;k&&(k=b.stateNode,k.__reactInternalMemoizedUnmaskedChildContext=d,k.__reactInternalMemoizedMaskedChildContext=f);sg(b,c);d=!0}else{h=b.type;d=b.stateNode;k=b.memoizedProps;f=b.pendingProps;d.props=k;var n=d.context;g=pf(b);g=rf(b,g);var r=h.getDerivedStateFromProps;(h="function"===typeof r||"function"===typeof d.getSnapshotBeforeUpdate)||"function"!==typeof d.UNSAFE_componentWillReceiveProps&&"function"!==typeof d.componentWillReceiveProps|| +(k!==f||n!==g)&&rg(b,d,f,g);Lf=!1;var w=b.memoizedState;n=d.state=w;var P=b.updateQueue;null!==P&&(Uf(b,P,f,d,c),n=b.memoizedState);k!==f||w!==n||O.current||Lf?("function"===typeof r&&(lg(b,r,f),n=b.memoizedState),(k=Lf||qg(b,k,f,w,n,g))?(h||"function"!==typeof d.UNSAFE_componentWillMount&&"function"!==typeof d.componentWillMount||("function"===typeof d.componentWillMount&&d.componentWillMount(),"function"===typeof d.UNSAFE_componentWillMount&&d.UNSAFE_componentWillMount()),"function"===typeof d.componentDidMount&& +(b.effectTag|=4)):("function"===typeof d.componentDidMount&&(b.effectTag|=4),b.memoizedProps=f,b.memoizedState=n),d.props=f,d.state=n,d.context=g,d=k):("function"===typeof d.componentDidMount&&(b.effectTag|=4),d=!1)}else h=b.type,d=b.stateNode,f=b.memoizedProps,k=b.pendingProps,d.props=f,n=d.context,g=pf(b),g=rf(b,g),r=h.getDerivedStateFromProps,(h="function"===typeof r||"function"===typeof d.getSnapshotBeforeUpdate)||"function"!==typeof d.UNSAFE_componentWillReceiveProps&&"function"!==typeof d.componentWillReceiveProps|| +(f!==k||n!==g)&&rg(b,d,k,g),Lf=!1,n=b.memoizedState,w=d.state=n,P=b.updateQueue,null!==P&&(Uf(b,P,k,d,c),w=b.memoizedState),f!==k||n!==w||O.current||Lf?("function"===typeof r&&(lg(b,r,k),w=b.memoizedState),(r=Lf||qg(b,f,k,n,w,g))?(h||"function"!==typeof d.UNSAFE_componentWillUpdate&&"function"!==typeof d.componentWillUpdate||("function"===typeof d.componentWillUpdate&&d.componentWillUpdate(k,w,g),"function"===typeof d.UNSAFE_componentWillUpdate&&d.UNSAFE_componentWillUpdate(k,w,g)),"function"===typeof d.componentDidUpdate&& +(b.effectTag|=4),"function"===typeof d.getSnapshotBeforeUpdate&&(b.effectTag|=256)):("function"!==typeof d.componentDidUpdate||f===a.memoizedProps&&n===a.memoizedState||(b.effectTag|=4),"function"!==typeof d.getSnapshotBeforeUpdate||f===a.memoizedProps&&n===a.memoizedState||(b.effectTag|=256),b.memoizedProps=k,b.memoizedState=w),d.props=k,d.state=w,d.context=g,d=r):("function"!==typeof d.componentDidUpdate||f===a.memoizedProps&&n===a.memoizedState||(b.effectTag|=4),"function"!==typeof d.getSnapshotBeforeUpdate|| +f===a.memoizedProps&&n===a.memoizedState||(b.effectTag|=256),d=!1);return Kg(a,b,d,e,c);case 3:Lg(b);e=b.updateQueue;if(null!==e)if(d=b.memoizedState,d=null!==d?d.element:null,Uf(b,e,b.pendingProps,null,c),e=b.memoizedState.element,e===d)Hg(),a=R(a,b);else{d=b.stateNode;if(d=(null===a||null===a.child)&&d.hydrate)Ag=jf(b.stateNode.containerInfo),zg=b,d=Bg=!0;d?(b.effectTag|=2,b.child=yg(b,null,e,c)):(Hg(),Q(a,b,e));a=b.child}else Hg(),a=R(a,b);return a;case 5:a:{gg(fg.current);e=gg(dg.current);d=He(e, +b.type);e!==d&&(N(eg,b,b),N(dg,d,b));null===a&&Eg(b);e=b.type;k=b.memoizedProps;d=b.pendingProps;f=null!==a?a.memoizedProps:null;if(!O.current&&k===d){if(k=b.mode&1&&!!d.hidden)b.expirationTime=1073741823;if(!k||1073741823!==c){a=R(a,b);break a}}k=d.children;df(e,d)?k=null:f&&df(e,f)&&(b.effectTag|=16);Jg(a,b);1073741823!==c&&b.mode&1&&d.hidden?(b.expirationTime=1073741823,b.memoizedProps=d,a=null):(Q(a,b,k),b.memoizedProps=d,a=b.child)}return a;case 6:return null===a&&Eg(b),b.memoizedProps=b.pendingProps, +null;case 16:return null;case 4:return ig(b,b.stateNode.containerInfo),e=b.pendingProps,O.current||b.memoizedProps!==e?(null===a?b.child=xg(b,null,e,c):Q(a,b,e),b.memoizedProps=e,a=b.child):a=R(a,b),a;case 14:return e=b.type.render,c=b.pendingProps,d=b.ref,O.current||b.memoizedProps!==c||d!==(null!==a?a.ref:null)?(e=e(c,d),Q(a,b,e),b.memoizedProps=c,a=b.child):a=R(a,b),a;case 10:return c=b.pendingProps,O.current||b.memoizedProps!==c?(Q(a,b,c),b.memoizedProps=c,a=b.child):a=R(a,b),a;case 11:return c= +b.pendingProps.children,O.current||null!==c&&b.memoizedProps!==c?(Q(a,b,c),b.memoizedProps=c,a=b.child):a=R(a,b),a;case 15:return c=b.pendingProps,b.memoizedProps===c?a=R(a,b):(Q(a,b,c.children),b.memoizedProps=c,a=b.child),a;case 13:return Qg(a,b,c);case 12:a:if(d=b.type,f=b.pendingProps,k=b.memoizedProps,e=d._currentValue,g=d._changedBits,O.current||0!==g||k!==f){b.memoizedProps=f;h=f.unstable_observedBits;if(void 0===h||null===h)h=1073741823;b.stateNode=h;if(0!==(g&h))Mg(b,d,g,c);else if(k===f){a= +R(a,b);break a}c=f.children;c=c(e);b.effectTag|=1;Q(a,b,c);a=b.child}else a=R(a,b);return a;default:A("156")}}function Sg(a){a.effectTag|=4}var Tg=void 0,Ug=void 0,Vg=void 0;Tg=function(){};Ug=function(a,b,c){(b.updateQueue=c)&&Sg(b)};Vg=function(a,b,c,d){c!==d&&Sg(b)}; +function Wg(a,b){var c=b.pendingProps;switch(b.tag){case 1:return null;case 2:return sf(b),null;case 3:jg(b);tf(b);var d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b),b.effectTag&=-3;Tg(b);return null;case 5:kg(b);d=gg(fg.current);var e=b.type;if(null!==a&&null!=b.stateNode){var f=a.memoizedProps,g=b.stateNode,h=gg(dg.current);g=We(g,e,f,c,d);Ug(a,b,g,e,f,c,d,h);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!c)return null===b.stateNode? +A("166"):void 0,null;a=gg(dg.current);if(Gg(b))c=b.stateNode,e=b.type,f=b.memoizedProps,c[C]=b,c[Ma]=f,d=Ye(c,e,f,a,d),b.updateQueue=d,null!==d&&Sg(b);else{a=Te(e,c,d,a);a[C]=b;a[Ma]=c;a:for(f=b.child;null!==f;){if(5===f.tag||6===f.tag)a.appendChild(f.stateNode);else if(4!==f.tag&&null!==f.child){f.child.return=f;f=f.child;continue}if(f===b)break;for(;null===f.sibling;){if(null===f.return||f.return===b)break a;f=f.return}f.sibling.return=f.return;f=f.sibling}Ve(a,e,c,d);cf(e,c)&&Sg(b);b.stateNode= +a}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)Vg(a,b,a.memoizedProps,c);else{if("string"!==typeof c)return null===b.stateNode?A("166"):void 0,null;d=gg(fg.current);gg(dg.current);Gg(b)?(d=b.stateNode,c=b.memoizedProps,d[C]=b,Ze(d,c)&&Sg(b)):(d=Ue(c,d),d[C]=b,b.stateNode=d)}return null;case 14:return null;case 16:return null;case 10:return null;case 11:return null;case 15:return null;case 4:return jg(b),Tg(b),null;case 13:return bg(b),null;case 12:return null;case 0:A("167"); +default:A("156")}}function Xg(a,b){var c=b.source;null===b.stack&&null!==c&&vc(c);null!==c&&uc(c);b=b.value;null!==a&&2===a.tag&&uc(a);try{b&&b.suppressReactErrorLogging||console.error(b)}catch(d){d&&d.suppressReactErrorLogging||console.error(d)}}function Yg(a){var b=a.ref;if(null!==b)if("function"===typeof b)try{b(null)}catch(c){Zg(a,c)}else b.current=null} +function $g(a){"function"===typeof Kf&&Kf(a);switch(a.tag){case 2:Yg(a);var b=a.stateNode;if("function"===typeof b.componentWillUnmount)try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Zg(a,c)}break;case 5:Yg(a);break;case 4:ah(a)}}function bh(a){return 5===a.tag||3===a.tag||4===a.tag} +function ch(a){a:{for(var b=a.return;null!==b;){if(bh(b)){var c=b;break a}b=b.return}A("160");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:A("161")}c.effectTag&16&&(Ke(b,""),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||bh(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag;){if(c.effectTag&2)continue b; +if(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)if(c)if(d){var f=b,g=e.stateNode,h=c;8===f.nodeType?f.parentNode.insertBefore(g,h):f.insertBefore(g,h)}else b.insertBefore(e.stateNode,c);else d?(f=b,g=e.stateNode,8===f.nodeType?f.parentNode.insertBefore(g,f):f.appendChild(g)):b.appendChild(e.stateNode);else if(4!==e.tag&&null!==e.child){e.child.return=e;e=e.child;continue}if(e===a)break;for(;null=== +e.sibling;){if(null===e.return||e.return===a)return;e=e.return}e.sibling.return=e.return;e=e.sibling}} +function ah(a){for(var b=a,c=!1,d=void 0,e=void 0;;){if(!c){c=b.return;a:for(;;){null===c?A("160"):void 0;switch(c.tag){case 5:d=c.stateNode;e=!1;break a;case 3:d=c.stateNode.containerInfo;e=!0;break a;case 4:d=c.stateNode.containerInfo;e=!0;break a}c=c.return}c=!0}if(5===b.tag||6===b.tag){a:for(var f=b,g=f;;)if($g(g),null!==g.child&&4!==g.tag)g.child.return=g,g=g.child;else{if(g===f)break;for(;null===g.sibling;){if(null===g.return||g.return===f)break a;g=g.return}g.sibling.return=g.return;g=g.sibling}e? +(f=d,g=b.stateNode,8===f.nodeType?f.parentNode.removeChild(g):f.removeChild(g)):d.removeChild(b.stateNode)}else if(4===b.tag?d=b.stateNode.containerInfo:$g(b),null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return;b=b.return;4===b.tag&&(c=!1)}b.sibling.return=b.return;b=b.sibling}} +function dh(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&(c[Ma]=d,Xe(c,f,e,a,d))}break;case 6:null===b.stateNode?A("162"):void 0;b.stateNode.nodeValue=b.memoizedProps;break;case 3:break;case 15:break;case 16:break;default:A("163")}}function eh(a,b,c){c=Of(c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){fh(d);Xg(a,b)};return c} +function gh(a,b,c){c=Of(c);c.tag=3;var d=a.stateNode;null!==d&&"function"===typeof d.componentDidCatch&&(c.callback=function(){null===hh?hh=new Set([this]):hh.add(this);var c=b.value,d=b.stack;Xg(a,b);this.componentDidCatch(c,{componentStack:null!==d?d:""})});return c} +function ih(a,b,c,d,e,f){c.effectTag|=512;c.firstEffect=c.lastEffect=null;d=Xf(d,c);a=b;do{switch(a.tag){case 3:a.effectTag|=1024;d=eh(a,d,f);Rf(a,d,f);return;case 2:if(b=d,c=a.stateNode,0===(a.effectTag&64)&&null!==c&&"function"===typeof c.componentDidCatch&&(null===hh||!hh.has(c))){a.effectTag|=1024;d=gh(a,b,f);Rf(a,d,f);return}}a=a.return}while(null!==a)} +function jh(a){switch(a.tag){case 2:sf(a);var b=a.effectTag;return b&1024?(a.effectTag=b&-1025|64,a):null;case 3:return jg(a),tf(a),b=a.effectTag,b&1024?(a.effectTag=b&-1025|64,a):null;case 5:return kg(a),null;case 16:return b=a.effectTag,b&1024?(a.effectTag=b&-1025|64,a):null;case 4:return jg(a),null;case 13:return bg(a),null;default:return null}}var kh=ef(),lh=2,mh=kh,nh=0,oh=0,ph=!1,S=null,qh=null,T=0,rh=-1,sh=!1,U=null,th=!1,uh=!1,hh=null; +function vh(){if(null!==S)for(var a=S.return;null!==a;){var b=a;switch(b.tag){case 2:sf(b);break;case 3:jg(b);tf(b);break;case 5:kg(b);break;case 4:jg(b);break;case 13:bg(b)}a=a.return}qh=null;T=0;rh=-1;sh=!1;S=null;uh=!1} +function wh(a){for(;;){var b=a.alternate,c=a.return,d=a.sibling;if(0===(a.effectTag&512)){b=Wg(b,a,T);var e=a;if(1073741823===T||1073741823!==e.expirationTime){var f=0;switch(e.tag){case 3:case 2:var g=e.updateQueue;null!==g&&(f=g.expirationTime)}for(g=e.child;null!==g;)0!==g.expirationTime&&(0===f||f>g.expirationTime)&&(f=g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&0===(c.effectTag&512)&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&& +(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1Eh)&&(Eh=a);return a} +function og(a,b){for(;null!==a;){if(0===a.expirationTime||a.expirationTime>b)a.expirationTime=b;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>b)&&(a.alternate.expirationTime=b);if(null===a.return)if(3===a.tag){var c=a.stateNode;!ph&&0!==T&&bGh&&A("185")}else break;a=a.return}}function mg(){mh=ef()-kh;return lh=(mh/10|0)+2} +function Hh(a){var b=oh;oh=2+25*(((mg()-2+500)/25|0)+1);try{return a()}finally{oh=b}}function Ih(a,b,c,d,e){var f=oh;oh=1;try{return a(b,c,d,e)}finally{oh=f}}var Jh=null,V=null,Kh=0,Lh=void 0,W=!1,X=null,Y=0,Eh=0,Mh=!1,Nh=!1,Oh=null,Ph=null,Z=!1,Qh=!1,Dh=!1,Rh=null,Gh=1E3,Fh=0,Sh=1;function Th(a){if(0!==Kh){if(a>Kh)return;null!==Lh&&gf(Lh)}var b=ef()-kh;Kh=a;Lh=ff(Uh,{timeout:10*(a-2)-b})} +function Ah(a,b){if(null===a.nextScheduledRoot)a.remainingExpirationTime=b,null===V?(Jh=V=a,a.nextScheduledRoot=a):(V=V.nextScheduledRoot=a,V.nextScheduledRoot=Jh);else{var c=a.remainingExpirationTime;if(0===c||b=Y)&&(!Mh||mg()>=Y);)mg(),Vh(X,Y,!Mh),Xh();else for(;null!==X&&0!==Y&&(0===a||a>=Y);)Vh(X,Y,!1),Xh();null!==Ph&&(Kh=0,Lh=null);0!==Y&&Th(Y);Ph=null;Mh=!1;Zh()}function $h(a,b){W?A("253"):void 0;X=a;Y=b;Vh(a,b,!1);Wh();Zh()} +function Zh(){Fh=0;if(null!==Rh){var a=Rh;Rh=null;for(var b=0;bu&&(y=u,u=l,l=y),y=Td(q,l),D=Td(q,u),y&&D&&(1!==z.rangeCount||z.anchorNode!==y.node||z.anchorOffset!==y.offset||z.focusNode!==D.node||z.focusOffset!==D.offset)&&(ja=document.createRange(),ja.setStart(y.node,y.offset),z.removeAllRanges(),l>u?(z.addRange(ja),z.extend(D.node,D.offset)):(ja.setEnd(D.node,D.offset),z.addRange(ja)))));z=[];for(l=q;l=l.parentNode;)1===l.nodeType&&z.push({element:l,left:l.scrollLeft, +top:l.scrollTop});"function"===typeof q.focus&&q.focus();for(q=0;qSh?!1:Mh=!0} +function fh(a){null===X?A("246"):void 0;X.remainingExpirationTime=0;Nh||(Nh=!0,Oh=a)}function Bh(a){null===X?A("246"):void 0;X.remainingExpirationTime=a}function bi(a,b){var c=Z;Z=!0;try{return a(b)}finally{(Z=c)||W||Wh()}}function ci(a,b){if(Z&&!Qh){Qh=!0;try{return a(b)}finally{Qh=!1}}return a(b)}function di(a,b){W?A("187"):void 0;var c=Z;Z=!0;try{return Ih(a,b)}finally{Z=c,Wh()}} +function ei(a,b,c){if(Dh)return a(b,c);Z||W||0===Eh||(Yh(Eh,!1,null),Eh=0);var d=Dh,e=Z;Z=Dh=!0;try{return a(b,c)}finally{Dh=d,(Z=e)||W||Wh()}}function fi(a){var b=Z;Z=!0;try{Ih(a)}finally{(Z=b)||W||Yh(1,!1,null)}} +function gi(a,b,c,d,e){var f=b.current;if(c){c=c._reactInternalFiber;var g;b:{2===jd(c)&&2===c.tag?void 0:A("170");for(g=c;3!==g.tag;){if(qf(g)){g=g.stateNode.__reactInternalMemoizedMergedChildContext;break b}(g=g.return)?void 0:A("171")}g=g.stateNode.context}c=qf(c)?vf(c,g):g}else c=ha;null===b.context?b.context=c:b.pendingContext=c;b=e;e=Of(d);e.payload={element:a};b=void 0===b?null:b;null!==b&&(e.callback=b);Qf(f,e,d);og(f,d);return d} +function hi(a){var b=a._reactInternalFiber;void 0===b&&("function"===typeof a.render?A("188"):A("268",Object.keys(a)));a=md(b);return null===a?null:a.stateNode}function ii(a,b,c,d){var e=b.current,f=mg();e=ng(f,e);return gi(a,b,c,e,d)}function ji(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}} +function ki(a){var b=a.findFiberByHostInstance;return If(p({},a,{findHostInstanceByFiber:function(a){a=md(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null}}))} +var li={updateContainerAtExpirationTime:gi,createContainer:function(a,b,c){return Ef(a,b,c)},updateContainer:ii,flushRoot:$h,requestWork:Ah,computeUniqueAsyncExpiration:Ch,batchedUpdates:bi,unbatchedUpdates:ci,deferredUpdates:Hh,syncUpdates:Ih,interactiveUpdates:ei,flushInteractiveUpdates:function(){W||0===Eh||(Yh(Eh,!1,null),Eh=0)},flushControlled:fi,flushSync:di,getPublicRootInstance:ji,findHostInstance:hi,findHostInstanceWithNoPortals:function(a){a=nd(a);return null===a?null:a.stateNode},injectIntoDevTools:ki}; +function ni(a,b,c){var d=3 event name map. + * The rest of ReactDOM code should import top level types from this file. + */ +var TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort'); +var TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend')); +var TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration')); +var TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart')); +var TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur'); +var TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay'); +var TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough'); +var TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel'); +var TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change'); +var TOP_CLICK = unsafeCastStringToDOMTopLevelType('click'); +var TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close'); +var TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend'); +var TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart'); +var TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate'); +var TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu'); +var TOP_COPY = unsafeCastStringToDOMTopLevelType('copy'); +var TOP_CUT = unsafeCastStringToDOMTopLevelType('cut'); +var TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick'); +var TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag'); +var TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend'); +var TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter'); +var TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit'); +var TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave'); +var TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover'); +var TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart'); +var TOP_DROP = unsafeCastStringToDOMTopLevelType('drop'); +var TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange'); +var TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied'); +var TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted'); +var TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended'); +var TOP_ERROR = unsafeCastStringToDOMTopLevelType('error'); +var TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus'); +var TOP_GOT_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('gotpointercapture'); +var TOP_INPUT = unsafeCastStringToDOMTopLevelType('input'); +var TOP_INVALID = unsafeCastStringToDOMTopLevelType('invalid'); +var TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown'); +var TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress'); +var TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup'); +var TOP_LOAD = unsafeCastStringToDOMTopLevelType('load'); +var TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart'); +var TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata'); +var TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata'); +var TOP_LOST_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('lostpointercapture'); +var TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown'); +var TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove'); +var TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout'); +var TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover'); +var TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup'); +var TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste'); +var TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause'); +var TOP_PLAY = unsafeCastStringToDOMTopLevelType('play'); +var TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing'); +var TOP_POINTER_CANCEL = unsafeCastStringToDOMTopLevelType('pointercancel'); +var TOP_POINTER_DOWN = unsafeCastStringToDOMTopLevelType('pointerdown'); + + +var TOP_POINTER_MOVE = unsafeCastStringToDOMTopLevelType('pointermove'); +var TOP_POINTER_OUT = unsafeCastStringToDOMTopLevelType('pointerout'); +var TOP_POINTER_OVER = unsafeCastStringToDOMTopLevelType('pointerover'); +var TOP_POINTER_UP = unsafeCastStringToDOMTopLevelType('pointerup'); +var TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress'); +var TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange'); +var TOP_RESET = unsafeCastStringToDOMTopLevelType('reset'); +var TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll'); +var TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked'); +var TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking'); +var TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange'); +var TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled'); +var TOP_SUBMIT = unsafeCastStringToDOMTopLevelType('submit'); +var TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend'); +var TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput'); +var TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate'); +var TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle'); +var TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel'); +var TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend'); +var TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove'); +var TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart'); +var TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend')); +var TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange'); +var TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting'); +var TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel'); + +// List of events that need to be individually attached to media elements. +// Note that events in this list will *not* be listened to at the top level +// unless they're explicitly whitelisted in `ReactBrowserEventEmitter.listenTo`. +var mediaEventTypes = [TOP_ABORT, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_VOLUME_CHANGE, TOP_WAITING]; + +function getRawEventName(topLevelType) { + return unsafeCastDOMTopLevelTypeToString(topLevelType); +} + var contentKey = null; /** @@ -29384,7 +30246,7 @@ SyntheticEvent.extend = function (Interface) { return new Proxy(constructor.apply(that, args), { set: function (target, prop, value) { if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) { - warning(didWarnForAddedNewProperty || target.isPersistent(), "This synthetic event is reused for performance reasons. If you're " + "seeing this, you're adding a new property in the synthetic event object. " + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.'); + !(didWarnForAddedNewProperty || target.isPersistent()) ? warning(false, "This synthetic event is reused for performance reasons. If you're " + "seeing this, you're adding a new property in the synthetic event object. " + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0; didWarnForAddedNewProperty = true; } target[prop] = value; @@ -29429,7 +30291,7 @@ function getPooledWarningPropertyDefinition(propName, getVal) { function warn(action, result) { var warningCondition = false; - warning(warningCondition, "This synthetic event is reused for performance reasons. If you're seeing this, " + "you're %s `%s` on a released/nullified synthetic event. %s. " + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result); + !warningCondition ? warning(false, "This synthetic event is reused for performance reasons. If you're seeing this, " + "you're %s `%s` on a released/nullified synthetic event. %s. " + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0; } } @@ -29507,28 +30369,28 @@ var eventTypes = { bubbled: 'onBeforeInput', captured: 'onBeforeInputCapture' }, - dependencies: ['topCompositionEnd', 'topKeyPress', 'topTextInput', 'topPaste'] + dependencies: [TOP_COMPOSITION_END, TOP_KEY_PRESS, TOP_TEXT_INPUT, TOP_PASTE] }, compositionEnd: { phasedRegistrationNames: { bubbled: 'onCompositionEnd', captured: 'onCompositionEndCapture' }, - dependencies: ['topBlur', 'topCompositionEnd', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown'] + dependencies: [TOP_BLUR, TOP_COMPOSITION_END, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN] }, compositionStart: { phasedRegistrationNames: { bubbled: 'onCompositionStart', captured: 'onCompositionStartCapture' }, - dependencies: ['topBlur', 'topCompositionStart', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown'] + dependencies: [TOP_BLUR, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN] }, compositionUpdate: { phasedRegistrationNames: { bubbled: 'onCompositionUpdate', captured: 'onCompositionUpdateCapture' }, - dependencies: ['topBlur', 'topCompositionUpdate', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown'] + dependencies: [TOP_BLUR, TOP_COMPOSITION_UPDATE, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN] } }; @@ -29554,11 +30416,11 @@ function isKeypressCommand(nativeEvent) { */ function getCompositionEventType(topLevelType) { switch (topLevelType) { - case 'topCompositionStart': + case TOP_COMPOSITION_START: return eventTypes.compositionStart; - case 'topCompositionEnd': + case TOP_COMPOSITION_END: return eventTypes.compositionEnd; - case 'topCompositionUpdate': + case TOP_COMPOSITION_UPDATE: return eventTypes.compositionUpdate; } } @@ -29572,7 +30434,7 @@ function getCompositionEventType(topLevelType) { * @return {boolean} */ function isFallbackCompositionStart(topLevelType, nativeEvent) { - return topLevelType === 'topKeyDown' && nativeEvent.keyCode === START_KEYCODE; + return topLevelType === TOP_KEY_DOWN && nativeEvent.keyCode === START_KEYCODE; } /** @@ -29584,16 +30446,16 @@ function isFallbackCompositionStart(topLevelType, nativeEvent) { */ function isFallbackCompositionEnd(topLevelType, nativeEvent) { switch (topLevelType) { - case 'topKeyUp': + case TOP_KEY_UP: // Command keys insert or clear IME input. return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1; - case 'topKeyDown': + case TOP_KEY_DOWN: // Expect IME keyCode on each keydown. If we get any other // code we must have exited earlier. return nativeEvent.keyCode !== START_KEYCODE; - case 'topKeyPress': - case 'topMouseDown': - case 'topBlur': + case TOP_KEY_PRESS: + case TOP_MOUSE_DOWN: + case TOP_BLUR: // Events are not possible without cancelling IME. return true; default: @@ -29672,15 +30534,15 @@ function extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEv } /** - * @param {TopLevelTypes} topLevelType Record from `BrowserEventConstants`. + * @param {TopLevelType} topLevelType Number from `TopLevelType`. * @param {object} nativeEvent Native browser event. * @return {?string} The string corresponding to this `beforeInput` event. */ function getNativeBeforeInputChars(topLevelType, nativeEvent) { switch (topLevelType) { - case 'topCompositionEnd': + case TOP_COMPOSITION_END: return getDataFromCustomEvent(nativeEvent); - case 'topKeyPress': + case TOP_KEY_PRESS: /** * If native `textInput` events are available, our goal is to make * use of them. However, there is a special case: the spacebar key. @@ -29703,7 +30565,7 @@ function getNativeBeforeInputChars(topLevelType, nativeEvent) { hasSpaceKeypress = true; return SPACEBAR_CHAR; - case 'topTextInput': + case TOP_TEXT_INPUT: // Record the characters to be added to the DOM. var chars = nativeEvent.data; @@ -29726,7 +30588,7 @@ function getNativeBeforeInputChars(topLevelType, nativeEvent) { * For browsers that do not provide the `textInput` event, extract the * appropriate string to use for SyntheticInputEvent. * - * @param {string} topLevelType Record from `BrowserEventConstants`. + * @param {number} topLevelType Number from `TopLevelEventTypes`. * @param {object} nativeEvent Native browser event. * @return {?string} The fallback string for this `beforeInput` event. */ @@ -29736,7 +30598,7 @@ function getFallbackBeforeInputChars(topLevelType, nativeEvent) { // If composition event is available, we extract a string only at // compositionevent, otherwise extract it at fallback events. if (isComposing) { - if (topLevelType === 'topCompositionEnd' || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) { + if (topLevelType === TOP_COMPOSITION_END || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) { var chars = getData(); reset(); isComposing = false; @@ -29746,11 +30608,11 @@ function getFallbackBeforeInputChars(topLevelType, nativeEvent) { } switch (topLevelType) { - case 'topPaste': + case TOP_PASTE: // If a paste event occurs after a keypress, throw out the input // chars. Paste events should not lead to BeforeInput events. return null; - case 'topKeyPress': + case TOP_KEY_PRESS: /** * As of v27, Firefox may fire keypress events even when no character * will be inserted. A few possibilities: @@ -29781,7 +30643,7 @@ function getFallbackBeforeInputChars(topLevelType, nativeEvent) { } } return null; - case 'topCompositionEnd': + case TOP_COMPOSITION_END: return useFallbackCompositionData ? null : nativeEvent.data; default: return null; @@ -30033,7 +30895,9 @@ var DOCUMENT_FRAGMENT_NODE = 11; * @return {DOMEventTarget} Target node. */ function getEventTarget(nativeEvent) { - var target = nativeEvent.target || window; + // Fallback to nativeEvent.srcElement for IE9 + // https://github.com/facebook/react/issues/12506 + var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG element events #4963 if (target.correspondingUseElement) { @@ -30115,18 +30979,20 @@ function trackValueOnNode(node) { // and don't track value will cause over reporting of changes, // but it's better then a hard failure // (needed for certain tests that spyOn input values and Safari) - if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { + if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { return; } + var get = descriptor.get, + set = descriptor.set; Object.defineProperty(node, valueField, { configurable: true, get: function () { - return descriptor.get.call(this); + return get.call(this); }, set: function (value) { currentValue = '' + value; - descriptor.set.call(this, value); + set.call(this, value); } }); // We could've passed this the first time @@ -30193,18 +31059,18 @@ var describeComponentFrame = function (name, source, ownerName) { // The Symbol used to tag the ReactElement-like types. If there is no native Symbol // nor polyfill, then a plain number is used for performance. -var hasSymbol = typeof Symbol === 'function' && Symbol['for']; +var hasSymbol = typeof Symbol === 'function' && Symbol.for; -var REACT_ELEMENT_TYPE = hasSymbol ? Symbol['for']('react.element') : 0xeac7; -var REACT_CALL_TYPE = hasSymbol ? Symbol['for']('react.call') : 0xeac8; -var REACT_RETURN_TYPE = hasSymbol ? Symbol['for']('react.return') : 0xeac9; -var REACT_PORTAL_TYPE = hasSymbol ? Symbol['for']('react.portal') : 0xeaca; -var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol['for']('react.fragment') : 0xeacb; -var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol['for']('react.strict_mode') : 0xeacc; -var REACT_PROVIDER_TYPE = hasSymbol ? Symbol['for']('react.provider') : 0xeacd; -var REACT_CONTEXT_TYPE = hasSymbol ? Symbol['for']('react.context') : 0xeace; -var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol['for']('react.async_mode') : 0xeacf; -var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol['for']('react.forward_ref') : 0xead0; +var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; +var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; +var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; +var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; +var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; +var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; +var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; +var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; +var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; +var REACT_TIMEOUT_TYPE = hasSymbol ? Symbol.for('react.timeout') : 0xead1; var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; @@ -30230,14 +31096,29 @@ function getComponentName(fiber) { return type; } switch (type) { + case REACT_ASYNC_MODE_TYPE: + return 'AsyncMode'; + case REACT_CONTEXT_TYPE: + return 'Context.Consumer'; case REACT_FRAGMENT_TYPE: return 'ReactFragment'; case REACT_PORTAL_TYPE: return 'ReactPortal'; - case REACT_CALL_TYPE: - return 'ReactCall'; - case REACT_RETURN_TYPE: - return 'ReactReturn'; + case REACT_PROFILER_TYPE: + return 'Profiler(' + fiber.pendingProps.id + ')'; + case REACT_PROVIDER_TYPE: + return 'Context.Provider'; + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + case REACT_TIMEOUT_TYPE: + return 'Timeout'; + } + if (typeof type === 'object' && type !== null) { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + var functionName = type.render.displayName || type.render.name || ''; + return functionName !== '' ? 'ForwardRef(' + functionName + ')' : 'ForwardRef'; + } } return null; } @@ -30270,7 +31151,7 @@ function getStackAddendumByWorkInProgressFiber(workInProgress) { do { info += describeFiber(node); // Otherwise this return pointer might point to the wrong tree: - node = node['return']; + node = node.return; } while (node); return info; } @@ -30438,6 +31319,9 @@ function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) { return true; } + if (isCustomComponentTag) { + return false; + } if (propertyInfo !== null) { switch (propertyInfo.type) { case BOOLEAN: @@ -30480,7 +31364,8 @@ var properties = {}; properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty name, // attributeName null); -}); +} // attributeNamespace +); // A few React string attributes have a different name. // This is a mapping from React prop names to the attribute names. @@ -30491,7 +31376,8 @@ var properties = {}; properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty attributeName, // attributeName null); -}); +} // attributeNamespace +); // These are "enumerated" HTML attributes that accept "true" and "false". // In React, we let users pass `true` and `false` even though technically @@ -30500,7 +31386,8 @@ var properties = {}; properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty name.toLowerCase(), // attributeName null); -}); +} // attributeNamespace +); // These are "enumerated" SVG attributes that accept "true" and "false". // In React, we let users pass `true` and `false` even though technically @@ -30510,7 +31397,8 @@ var properties = {}; properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty name, // attributeName null); -}); +} // attributeNamespace +); // These are HTML boolean attributes. ['allowFullScreen', 'async', @@ -30522,7 +31410,8 @@ var properties = {}; properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty name.toLowerCase(), // attributeName null); -}); +} // attributeNamespace +); // These are the few React props that we set as DOM properties // rather than attributes. These are all booleans. @@ -30533,7 +31422,8 @@ var properties = {}; properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty name.toLowerCase(), // attributeName null); -}); +} // attributeNamespace +); // These are HTML attributes that are "overloaded booleans": they behave like // booleans, but can also accept a string value. @@ -30541,21 +31431,24 @@ var properties = {}; properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty name.toLowerCase(), // attributeName null); -}); +} // attributeNamespace +); // These are HTML attributes that must be positive numbers. ['cols', 'rows', 'size', 'span'].forEach(function (name) { properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty name.toLowerCase(), // attributeName null); -}); +} // attributeNamespace +); // These are HTML attributes that must be numbers. ['rowSpan', 'start'].forEach(function (name) { properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty name.toLowerCase(), // attributeName null); -}); +} // attributeNamespace +); var CAMELIZE = /[\-\:]([a-z])/g; var capitalize = function (token) { @@ -30571,7 +31464,8 @@ var capitalize = function (token) { var name = attributeName.replace(CAMELIZE, capitalize); properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty attributeName, null); -}); +} // attributeNamespace +); // String SVG attributes with the xlink namespace. ['xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type'].forEach(function (attributeName) { @@ -30900,20 +31794,28 @@ function updateWrapper(element, props) { } } -function postMountWrapper(element, props) { +function postMountWrapper(element, props, isHydrating) { var node = element; if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) { + var _initialValue = '' + node._wrapperState.initialValue; + var currentValue = node.value; + // Do not assign value if it is already set. This prevents user text input // from being lost during SSR hydration. - if (node.value === '') { - node.value = '' + node._wrapperState.initialValue; + if (!isHydrating) { + // Do not re-assign the value property if there is no change. This + // potentially avoids a DOM write and prevents Firefox (~60.0.1) from + // prematurely marking required inputs as invalid + if (_initialValue !== currentValue) { + node.value = _initialValue; + } } // value must be assigned before defaultValue. This fixes an issue where the // visually displayed value of date inputs disappears on mobile Safari and Chrome: // https://github.com/facebook/react/issues/7233 - node.defaultValue = '' + node._wrapperState.initialValue; + node.defaultValue = _initialValue; } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug @@ -31020,7 +31922,7 @@ var eventTypes$1 = { bubbled: 'onChange', captured: 'onChangeCapture' }, - dependencies: ['topBlur', 'topChange', 'topClick', 'topFocus', 'topInput', 'topKeyDown', 'topKeyUp', 'topSelectionChange'] + dependencies: [TOP_BLUR, TOP_CHANGE, TOP_CLICK, TOP_FOCUS, TOP_INPUT, TOP_KEY_DOWN, TOP_KEY_UP, TOP_SELECTION_CHANGE] } }; @@ -31075,7 +31977,7 @@ function getInstIfValueChanged(targetInst) { } function getTargetInstForChangeEvent(topLevelType, targetInst) { - if (topLevelType === 'topChange') { + if (topLevelType === TOP_CHANGE) { return targetInst; } } @@ -31128,7 +32030,7 @@ function handlePropertyChange(nativeEvent) { } function handleEventsForInputEventPolyfill(topLevelType, target, targetInst) { - if (topLevelType === 'topFocus') { + if (topLevelType === TOP_FOCUS) { // In IE9, propertychange fires for most input events but is buggy and // doesn't fire when text is deleted, but conveniently, selectionchange // appears to fire in all of the remaining cases so we catch those and @@ -31141,14 +32043,14 @@ function handleEventsForInputEventPolyfill(topLevelType, target, targetInst) { // missed a blur event somehow. stopWatchingForValueChange(); startWatchingForValueChange(target, targetInst); - } else if (topLevelType === 'topBlur') { + } else if (topLevelType === TOP_BLUR) { stopWatchingForValueChange(); } } // For IE8 and IE9. function getTargetInstForInputEventPolyfill(topLevelType, targetInst) { - if (topLevelType === 'topSelectionChange' || topLevelType === 'topKeyUp' || topLevelType === 'topKeyDown') { + if (topLevelType === TOP_SELECTION_CHANGE || topLevelType === TOP_KEY_UP || topLevelType === TOP_KEY_DOWN) { // On the selectionchange event, the target is just document which isn't // helpful for us so just check activeElement instead. // @@ -31175,25 +32077,19 @@ function shouldUseClickEvent(elem) { } function getTargetInstForClickEvent(topLevelType, targetInst) { - if (topLevelType === 'topClick') { + if (topLevelType === TOP_CLICK) { return getInstIfValueChanged(targetInst); } } function getTargetInstForInputOrChangeEvent(topLevelType, targetInst) { - if (topLevelType === 'topInput' || topLevelType === 'topChange') { + if (topLevelType === TOP_INPUT || topLevelType === TOP_CHANGE) { return getInstIfValueChanged(targetInst); } } -function handleControlledInputBlur(inst, node) { - // TODO: In IE, inst is occasionally null. Why? - if (inst == null) { - return; - } - - // Fiber and ReactDOM keep wrapper state in separate places - var state = inst._wrapperState || node._wrapperState; +function handleControlledInputBlur(node) { + var state = node._wrapperState; if (!state || !state.controlled || node.type !== 'number') { return; @@ -31249,8 +32145,8 @@ var ChangeEventPlugin = { } // When blurring, set the value attribute for number inputs - if (topLevelType === 'topBlur') { - handleControlledInputBlur(targetInst, targetNode); + if (topLevelType === TOP_BLUR) { + handleControlledInputBlur(targetNode); } } }; @@ -31323,14 +32219,37 @@ var SyntheticMouseEvent = SyntheticUIEvent.extend({ } }); +/** + * @interface PointerEvent + * @see http://www.w3.org/TR/pointerevents/ + */ +var SyntheticPointerEvent = SyntheticMouseEvent.extend({ + pointerId: null, + width: null, + height: null, + pressure: null, + tiltX: null, + tiltY: null, + pointerType: null, + isPrimary: null +}); + var eventTypes$2 = { mouseEnter: { registrationName: 'onMouseEnter', - dependencies: ['topMouseOut', 'topMouseOver'] + dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER] }, mouseLeave: { registrationName: 'onMouseLeave', - dependencies: ['topMouseOut', 'topMouseOver'] + dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER] + }, + pointerEnter: { + registrationName: 'onPointerEnter', + dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER] + }, + pointerLeave: { + registrationName: 'onPointerLeave', + dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER] } }; @@ -31345,11 +32264,15 @@ var EnterLeaveEventPlugin = { * the `mouseover` top-level event. */ extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) { - if (topLevelType === 'topMouseOver' && (nativeEvent.relatedTarget || nativeEvent.fromElement)) { + var isOverEvent = topLevelType === TOP_MOUSE_OVER || topLevelType === TOP_POINTER_OVER; + var isOutEvent = topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_POINTER_OUT; + + if (isOverEvent && (nativeEvent.relatedTarget || nativeEvent.fromElement)) { return null; } - if (topLevelType !== 'topMouseOut' && topLevelType !== 'topMouseOver') { - // Must not be a mouse in or mouse out - ignoring. + + if (!isOutEvent && !isOverEvent) { + // Must not be a mouse or pointer in or out - ignoring. return null; } @@ -31369,7 +32292,7 @@ var EnterLeaveEventPlugin = { var from = void 0; var to = void 0; - if (topLevelType === 'topMouseOut') { + if (isOutEvent) { from = targetInst; var related = nativeEvent.relatedTarget || nativeEvent.toElement; to = related ? getClosestInstanceFromNode(related) : null; @@ -31384,16 +32307,33 @@ var EnterLeaveEventPlugin = { return null; } + var eventInterface = void 0, + leaveEventType = void 0, + enterEventType = void 0, + eventTypePrefix = void 0; + + if (topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_MOUSE_OVER) { + eventInterface = SyntheticMouseEvent; + leaveEventType = eventTypes$2.mouseLeave; + enterEventType = eventTypes$2.mouseEnter; + eventTypePrefix = 'mouse'; + } else if (topLevelType === TOP_POINTER_OUT || topLevelType === TOP_POINTER_OVER) { + eventInterface = SyntheticPointerEvent; + leaveEventType = eventTypes$2.pointerLeave; + enterEventType = eventTypes$2.pointerEnter; + eventTypePrefix = 'pointer'; + } + var fromNode = from == null ? win : getNodeFromInstance$1(from); var toNode = to == null ? win : getNodeFromInstance$1(to); - var leave = SyntheticMouseEvent.getPooled(eventTypes$2.mouseLeave, from, nativeEvent, nativeEventTarget); - leave.type = 'mouseleave'; + var leave = eventInterface.getPooled(leaveEventType, from, nativeEvent, nativeEventTarget); + leave.type = eventTypePrefix + 'leave'; leave.target = fromNode; leave.relatedTarget = toNode; - var enter = SyntheticMouseEvent.getPooled(eventTypes$2.mouseEnter, to, nativeEvent, nativeEventTarget); - enter.type = 'mouseenter'; + var enter = eventInterface.getPooled(enterEventType, to, nativeEvent, nativeEventTarget); + enter.type = eventTypePrefix + 'enter'; enter.target = toNode; enter.relatedTarget = fromNode; @@ -31445,11 +32385,10 @@ var ContentReset = /* */16; var Callback = /* */32; var DidCapture = /* */64; var Ref = /* */128; -var ErrLog = /* */256; -var Snapshot = /* */2048; +var Snapshot = /* */256; // Union of all host effects -var HostEffectMask = /* */2559; +var HostEffectMask = /* */511; var Incomplete = /* */512; var ShouldCapture = /* */1024; @@ -31466,15 +32405,15 @@ function isFiberMountedImpl(fiber) { if ((node.effectTag & Placement) !== NoEffect) { return MOUNTING; } - while (node['return']) { - node = node['return']; + while (node.return) { + node = node.return; if ((node.effectTag & Placement) !== NoEffect) { return MOUNTING; } } } else { - while (node['return']) { - node = node['return']; + while (node.return) { + node = node.return; } } if (node.tag === HostRoot) { @@ -31497,7 +32436,7 @@ function isMounted(component) { if (owner !== null && owner.tag === ClassComponent) { var ownerFiber = owner; var instance = ownerFiber.stateNode; - warning(instance._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber) || 'A component'); + !instance._warnedAboutRefsInRender ? warning(false, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber) || 'A component') : void 0; instance._warnedAboutRefsInRender = true; } } @@ -31530,7 +32469,7 @@ function findCurrentFiberUsingSlowPath(fiber) { var a = fiber; var b = alternate; while (true) { - var parentA = a['return']; + var parentA = a.return; var parentB = parentA ? parentA.alternate : null; if (!parentA || !parentB) { // We're at the root. @@ -31560,7 +32499,7 @@ function findCurrentFiberUsingSlowPath(fiber) { invariant(false, 'Unable to find node on an unmounted component.'); } - if (a['return'] !== b['return']) { + if (a.return !== b.return) { // The return pointer of A and the return pointer of B point to different // fibers. We assume that return pointers never criss-cross, so A must // belong to the child set of A.return, and B must belong to the child @@ -31637,7 +32576,7 @@ function findCurrentHostFiber(parent) { if (node.tag === HostComponent || node.tag === HostText) { return node; } else if (node.child) { - node.child['return'] = node; + node.child.return = node; node = node.child; continue; } @@ -31645,12 +32584,12 @@ function findCurrentHostFiber(parent) { return null; } while (!node.sibling) { - if (!node['return'] || node['return'] === currentParent) { + if (!node.return || node.return === currentParent) { return null; } - node = node['return']; + node = node.return; } - node.sibling['return'] = node['return']; + node.sibling.return = node.return; node = node.sibling; } // Flow needs the return null here, but ESLint complains about it. @@ -31670,7 +32609,7 @@ function findCurrentHostFiberWithNoPortals(parent) { if (node.tag === HostComponent || node.tag === HostText) { return node; } else if (node.child && node.tag !== HostPortal) { - node.child['return'] = node; + node.child.return = node; node = node.child; continue; } @@ -31678,12 +32617,12 @@ function findCurrentHostFiberWithNoPortals(parent) { return null; } while (!node.sibling) { - if (!node['return'] || node['return'] === currentParent) { + if (!node.return || node.return === currentParent) { return null; } - node = node['return']; + node = node.return; } - node.sibling['return'] = node['return']; + node.sibling.return = node.return; node = node.sibling; } // Flow needs the return null here, but ESLint complains about it. @@ -31985,24 +32924,27 @@ var SyntheticWheelEvent = SyntheticMouseEvent.extend({ * bubbled: 'onAbort', * captured: 'onAbortCapture', * }, - * dependencies: ['topAbort'], + * dependencies: [TOP_ABORT], * }, * ... * }; - * topLevelEventsToDispatchConfig = { - * 'topAbort': { sameConfig } - * }; + * topLevelEventsToDispatchConfig = new Map([ + * [TOP_ABORT, { sameConfig }], + * ]); */ -var interactiveEventTypeNames = ['blur', 'cancel', 'click', 'close', 'contextMenu', 'copy', 'cut', 'doubleClick', 'dragEnd', 'dragStart', 'drop', 'focus', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'mouseDown', 'mouseUp', 'paste', 'pause', 'play', 'rateChange', 'reset', 'seeked', 'submit', 'touchCancel', 'touchEnd', 'touchStart', 'volumeChange']; -var nonInteractiveEventTypeNames = ['abort', 'animationEnd', 'animationIteration', 'animationStart', 'canPlay', 'canPlayThrough', 'drag', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'mouseMove', 'mouseOut', 'mouseOver', 'playing', 'progress', 'scroll', 'seeking', 'stalled', 'suspend', 'timeUpdate', 'toggle', 'touchMove', 'transitionEnd', 'waiting', 'wheel']; + +var interactiveEventTypeNames = [[TOP_BLUR, 'blur'], [TOP_CANCEL, 'cancel'], [TOP_CLICK, 'click'], [TOP_CLOSE, 'close'], [TOP_CONTEXT_MENU, 'contextMenu'], [TOP_COPY, 'copy'], [TOP_CUT, 'cut'], [TOP_DOUBLE_CLICK, 'doubleClick'], [TOP_DRAG_END, 'dragEnd'], [TOP_DRAG_START, 'dragStart'], [TOP_DROP, 'drop'], [TOP_FOCUS, 'focus'], [TOP_INPUT, 'input'], [TOP_INVALID, 'invalid'], [TOP_KEY_DOWN, 'keyDown'], [TOP_KEY_PRESS, 'keyPress'], [TOP_KEY_UP, 'keyUp'], [TOP_MOUSE_DOWN, 'mouseDown'], [TOP_MOUSE_UP, 'mouseUp'], [TOP_PASTE, 'paste'], [TOP_PAUSE, 'pause'], [TOP_PLAY, 'play'], [TOP_POINTER_CANCEL, 'pointerCancel'], [TOP_POINTER_DOWN, 'pointerDown'], [TOP_POINTER_UP, 'pointerUp'], [TOP_RATE_CHANGE, 'rateChange'], [TOP_RESET, 'reset'], [TOP_SEEKED, 'seeked'], [TOP_SUBMIT, 'submit'], [TOP_TOUCH_CANCEL, 'touchCancel'], [TOP_TOUCH_END, 'touchEnd'], [TOP_TOUCH_START, 'touchStart'], [TOP_VOLUME_CHANGE, 'volumeChange']]; +var nonInteractiveEventTypeNames = [[TOP_ABORT, 'abort'], [TOP_ANIMATION_END, 'animationEnd'], [TOP_ANIMATION_ITERATION, 'animationIteration'], [TOP_ANIMATION_START, 'animationStart'], [TOP_CAN_PLAY, 'canPlay'], [TOP_CAN_PLAY_THROUGH, 'canPlayThrough'], [TOP_DRAG, 'drag'], [TOP_DRAG_ENTER, 'dragEnter'], [TOP_DRAG_EXIT, 'dragExit'], [TOP_DRAG_LEAVE, 'dragLeave'], [TOP_DRAG_OVER, 'dragOver'], [TOP_DURATION_CHANGE, 'durationChange'], [TOP_EMPTIED, 'emptied'], [TOP_ENCRYPTED, 'encrypted'], [TOP_ENDED, 'ended'], [TOP_ERROR, 'error'], [TOP_GOT_POINTER_CAPTURE, 'gotPointerCapture'], [TOP_LOAD, 'load'], [TOP_LOADED_DATA, 'loadedData'], [TOP_LOADED_METADATA, 'loadedMetadata'], [TOP_LOAD_START, 'loadStart'], [TOP_LOST_POINTER_CAPTURE, 'lostPointerCapture'], [TOP_MOUSE_MOVE, 'mouseMove'], [TOP_MOUSE_OUT, 'mouseOut'], [TOP_MOUSE_OVER, 'mouseOver'], [TOP_PLAYING, 'playing'], [TOP_POINTER_MOVE, 'pointerMove'], [TOP_POINTER_OUT, 'pointerOut'], [TOP_POINTER_OVER, 'pointerOver'], [TOP_PROGRESS, 'progress'], [TOP_SCROLL, 'scroll'], [TOP_SEEKING, 'seeking'], [TOP_STALLED, 'stalled'], [TOP_SUSPEND, 'suspend'], [TOP_TIME_UPDATE, 'timeUpdate'], [TOP_TOGGLE, 'toggle'], [TOP_TOUCH_MOVE, 'touchMove'], [TOP_TRANSITION_END, 'transitionEnd'], [TOP_WAITING, 'waiting'], [TOP_WHEEL, 'wheel']]; var eventTypes$4 = {}; var topLevelEventsToDispatchConfig = {}; -function addEventTypeNameToConfig(event, isInteractive) { +function addEventTypeNameToConfig(_ref, isInteractive) { + var topEvent = _ref[0], + event = _ref[1]; + var capitalizedEvent = event[0].toUpperCase() + event.slice(1); var onEvent = 'on' + capitalizedEvent; - var topEvent = 'top' + capitalizedEvent; var type = { phasedRegistrationNames: { @@ -32016,15 +32958,15 @@ function addEventTypeNameToConfig(event, isInteractive) { topLevelEventsToDispatchConfig[topEvent] = type; } -interactiveEventTypeNames.forEach(function (eventTypeName) { - addEventTypeNameToConfig(eventTypeName, true); +interactiveEventTypeNames.forEach(function (eventTuple) { + addEventTypeNameToConfig(eventTuple, true); }); -nonInteractiveEventTypeNames.forEach(function (eventTypeName) { - addEventTypeNameToConfig(eventTypeName, false); +nonInteractiveEventTypeNames.forEach(function (eventTuple) { + addEventTypeNameToConfig(eventTuple, false); }); // Only used in DEV for exhaustiveness validation. -var knownHTMLTopLevelTypes = ['topAbort', 'topCancel', 'topCanPlay', 'topCanPlayThrough', 'topClose', 'topDurationChange', 'topEmptied', 'topEncrypted', 'topEnded', 'topError', 'topInput', 'topInvalid', 'topLoad', 'topLoadedData', 'topLoadedMetadata', 'topLoadStart', 'topPause', 'topPlay', 'topPlaying', 'topProgress', 'topRateChange', 'topReset', 'topSeeked', 'topSeeking', 'topStalled', 'topSubmit', 'topSuspend', 'topTimeUpdate', 'topToggle', 'topVolumeChange', 'topWaiting']; +var knownHTMLTopLevelTypes = [TOP_ABORT, TOP_CANCEL, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_CLOSE, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_INPUT, TOP_INVALID, TOP_LOAD, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_RESET, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUBMIT, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_TOGGLE, TOP_VOLUME_CHANGE, TOP_WAITING]; var SimpleEventPlugin = { eventTypes: eventTypes$4, @@ -32042,7 +32984,7 @@ var SimpleEventPlugin = { } var EventConstructor = void 0; switch (topLevelType) { - case 'topKeyPress': + case TOP_KEY_PRESS: // Firefox creates a keypress event for function keys too. This removes // the unwanted keypress events. Enter is however both printable and // non-printable. One would expect Tab to be as well (but it isn't). @@ -32050,67 +32992,77 @@ var SimpleEventPlugin = { return null; } /* falls through */ - case 'topKeyDown': - case 'topKeyUp': + case TOP_KEY_DOWN: + case TOP_KEY_UP: EventConstructor = SyntheticKeyboardEvent; break; - case 'topBlur': - case 'topFocus': + case TOP_BLUR: + case TOP_FOCUS: EventConstructor = SyntheticFocusEvent; break; - case 'topClick': + case TOP_CLICK: // Firefox creates a click event on right mouse clicks. This removes the // unwanted click events. if (nativeEvent.button === 2) { return null; } /* falls through */ - case 'topDoubleClick': - case 'topMouseDown': - case 'topMouseMove': - case 'topMouseUp': + case TOP_DOUBLE_CLICK: + case TOP_MOUSE_DOWN: + case TOP_MOUSE_MOVE: + case TOP_MOUSE_UP: // TODO: Disabled elements should not respond to mouse events /* falls through */ - case 'topMouseOut': - case 'topMouseOver': - case 'topContextMenu': + case TOP_MOUSE_OUT: + case TOP_MOUSE_OVER: + case TOP_CONTEXT_MENU: EventConstructor = SyntheticMouseEvent; break; - case 'topDrag': - case 'topDragEnd': - case 'topDragEnter': - case 'topDragExit': - case 'topDragLeave': - case 'topDragOver': - case 'topDragStart': - case 'topDrop': + case TOP_DRAG: + case TOP_DRAG_END: + case TOP_DRAG_ENTER: + case TOP_DRAG_EXIT: + case TOP_DRAG_LEAVE: + case TOP_DRAG_OVER: + case TOP_DRAG_START: + case TOP_DROP: EventConstructor = SyntheticDragEvent; break; - case 'topTouchCancel': - case 'topTouchEnd': - case 'topTouchMove': - case 'topTouchStart': + case TOP_TOUCH_CANCEL: + case TOP_TOUCH_END: + case TOP_TOUCH_MOVE: + case TOP_TOUCH_START: EventConstructor = SyntheticTouchEvent; break; - case 'topAnimationEnd': - case 'topAnimationIteration': - case 'topAnimationStart': + case TOP_ANIMATION_END: + case TOP_ANIMATION_ITERATION: + case TOP_ANIMATION_START: EventConstructor = SyntheticAnimationEvent; break; - case 'topTransitionEnd': + case TOP_TRANSITION_END: EventConstructor = SyntheticTransitionEvent; break; - case 'topScroll': + case TOP_SCROLL: EventConstructor = SyntheticUIEvent; break; - case 'topWheel': + case TOP_WHEEL: EventConstructor = SyntheticWheelEvent; break; - case 'topCopy': - case 'topCut': - case 'topPaste': + case TOP_COPY: + case TOP_CUT: + case TOP_PASTE: EventConstructor = SyntheticClipboardEvent; break; + case TOP_GOT_POINTER_CAPTURE: + case TOP_LOST_POINTER_CAPTURE: + case TOP_POINTER_CANCEL: + case TOP_POINTER_DOWN: + case TOP_POINTER_MOVE: + case TOP_POINTER_OUT: + case TOP_POINTER_OVER: + case TOP_POINTER_UP: + EventConstructor = SyntheticPointerEvent; + break; default: { if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) { @@ -32143,8 +33095,8 @@ function findRootContainerNode(inst) { // TODO: It may be a good idea to cache this to prevent unnecessary DOM // traversal, but caching is difficult to do correctly without using a // mutation observer to listen for all DOM changes. - while (inst['return']) { - inst = inst['return']; + while (inst.return) { + inst = inst.return; } if (inst.tag !== HostRoot) { // This can happen if we're in a detached tree. @@ -32221,20 +33173,19 @@ function isEnabled() { /** * Traps top-level events by using event bubbling. * - * @param {string} topLevelType Record from `BrowserEventConstants`. - * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {number} topLevelType Number from `TopLevelEventTypes`. * @param {object} element Element on which to attach listener. * @return {?object} An object with a remove function which will forcefully * remove the listener. * @internal */ -function trapBubbledEvent(topLevelType, handlerBaseName, element) { +function trapBubbledEvent(topLevelType, element) { if (!element) { return null; } var dispatch = isInteractiveTopLevelEventType(topLevelType) ? dispatchInteractiveEvent : dispatchEvent; - addEventBubbleListener(element, handlerBaseName, + addEventBubbleListener(element, getRawEventName(topLevelType), // Check if interactive and wrap in interactiveUpdates dispatch.bind(null, topLevelType)); } @@ -32242,20 +33193,19 @@ function trapBubbledEvent(topLevelType, handlerBaseName, element) { /** * Traps a top-level event by using event capturing. * - * @param {string} topLevelType Record from `BrowserEventConstants`. - * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {number} topLevelType Number from `TopLevelEventTypes`. * @param {object} element Element on which to attach listener. * @return {?object} An object with a remove function which will forcefully * remove the listener. * @internal */ -function trapCapturedEvent(topLevelType, handlerBaseName, element) { +function trapCapturedEvent(topLevelType, element) { if (!element) { return null; } var dispatch = isInteractiveTopLevelEventType(topLevelType) ? dispatchInteractiveEvent : dispatchEvent; - addEventCaptureListener(element, handlerBaseName, + addEventCaptureListener(element, getRawEventName(topLevelType), // Check if interactive and wrap in interactiveUpdates dispatch.bind(null, topLevelType)); } @@ -32299,178 +33249,6 @@ var ReactDOMEventListener = Object.freeze({ dispatchEvent: dispatchEvent }); -/** - * Generate a mapping of standard vendor prefixes using the defined style property and event name. - * - * @param {string} styleProp - * @param {string} eventName - * @returns {object} - */ -function makePrefixMap(styleProp, eventName) { - var prefixes = {}; - - prefixes[styleProp.toLowerCase()] = eventName.toLowerCase(); - prefixes['Webkit' + styleProp] = 'webkit' + eventName; - prefixes['Moz' + styleProp] = 'moz' + eventName; - prefixes['ms' + styleProp] = 'MS' + eventName; - prefixes['O' + styleProp] = 'o' + eventName.toLowerCase(); - - return prefixes; -} - -/** - * A list of event names to a configurable list of vendor prefixes. - */ -var vendorPrefixes = { - animationend: makePrefixMap('Animation', 'AnimationEnd'), - animationiteration: makePrefixMap('Animation', 'AnimationIteration'), - animationstart: makePrefixMap('Animation', 'AnimationStart'), - transitionend: makePrefixMap('Transition', 'TransitionEnd') -}; - -/** - * Event names that have already been detected and prefixed (if applicable). - */ -var prefixedEventNames = {}; - -/** - * Element to check for prefixes on. - */ -var style = {}; - -/** - * Bootstrap if a DOM exists. - */ -if (ExecutionEnvironment.canUseDOM) { - style = document.createElement('div').style; - - // On some platforms, in particular some releases of Android 4.x, - // the un-prefixed "animation" and "transition" properties are defined on the - // style object but the events that fire will still be prefixed, so we need - // to check if the un-prefixed events are usable, and if not remove them from the map. - if (!('AnimationEvent' in window)) { - delete vendorPrefixes.animationend.animation; - delete vendorPrefixes.animationiteration.animation; - delete vendorPrefixes.animationstart.animation; - } - - // Same as above - if (!('TransitionEvent' in window)) { - delete vendorPrefixes.transitionend.transition; - } -} - -/** - * Attempts to determine the correct vendor prefixed event name. - * - * @param {string} eventName - * @returns {string} - */ -function getVendorPrefixedEventName(eventName) { - if (prefixedEventNames[eventName]) { - return prefixedEventNames[eventName]; - } else if (!vendorPrefixes[eventName]) { - return eventName; - } - - var prefixMap = vendorPrefixes[eventName]; - - for (var styleProp in prefixMap) { - if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) { - return prefixedEventNames[eventName] = prefixMap[styleProp]; - } - } - - return eventName; -} - -/** - * Types of raw signals from the browser caught at the top level. - * - * For events like 'submit' or audio/video events which don't consistently - * bubble (which we trap at a lower node than `document`), binding - * at `document` would cause duplicate events so we don't include them here. - */ -var topLevelTypes = { - topAnimationEnd: getVendorPrefixedEventName('animationend'), - topAnimationIteration: getVendorPrefixedEventName('animationiteration'), - topAnimationStart: getVendorPrefixedEventName('animationstart'), - topBlur: 'blur', - topCancel: 'cancel', - topChange: 'change', - topClick: 'click', - topClose: 'close', - topCompositionEnd: 'compositionend', - topCompositionStart: 'compositionstart', - topCompositionUpdate: 'compositionupdate', - topContextMenu: 'contextmenu', - topCopy: 'copy', - topCut: 'cut', - topDoubleClick: 'dblclick', - topDrag: 'drag', - topDragEnd: 'dragend', - topDragEnter: 'dragenter', - topDragExit: 'dragexit', - topDragLeave: 'dragleave', - topDragOver: 'dragover', - topDragStart: 'dragstart', - topDrop: 'drop', - topFocus: 'focus', - topInput: 'input', - topKeyDown: 'keydown', - topKeyPress: 'keypress', - topKeyUp: 'keyup', - topLoad: 'load', - topLoadStart: 'loadstart', - topMouseDown: 'mousedown', - topMouseMove: 'mousemove', - topMouseOut: 'mouseout', - topMouseOver: 'mouseover', - topMouseUp: 'mouseup', - topPaste: 'paste', - topScroll: 'scroll', - topSelectionChange: 'selectionchange', - topTextInput: 'textInput', - topToggle: 'toggle', - topTouchCancel: 'touchcancel', - topTouchEnd: 'touchend', - topTouchMove: 'touchmove', - topTouchStart: 'touchstart', - topTransitionEnd: getVendorPrefixedEventName('transitionend'), - topWheel: 'wheel' -}; - -// There are so many media events, it makes sense to just -// maintain a list of them. Note these aren't technically -// "top-level" since they don't bubble. We should come up -// with a better naming convention if we come to refactoring -// the event system. -var mediaEventTypes = { - topAbort: 'abort', - topCanPlay: 'canplay', - topCanPlayThrough: 'canplaythrough', - topDurationChange: 'durationchange', - topEmptied: 'emptied', - topEncrypted: 'encrypted', - topEnded: 'ended', - topError: 'error', - topLoadedData: 'loadeddata', - topLoadedMetadata: 'loadedmetadata', - topLoadStart: 'loadstart', - topPause: 'pause', - topPlay: 'play', - topPlaying: 'playing', - topProgress: 'progress', - topRateChange: 'ratechange', - topSeeked: 'seeked', - topSeeking: 'seeking', - topStalled: 'stalled', - topSuspend: 'suspend', - topTimeUpdate: 'timeupdate', - topVolumeChange: 'volumechange', - topWaiting: 'waiting' -}; - /** * Summary of `ReactBrowserEventEmitter` event handling: * @@ -32564,39 +33342,49 @@ function getListeningForDocument(mountAt) { * they bubble to document. * * @param {string} registrationName Name of listener (e.g. `onClick`). - * @param {object} contentDocumentHandle Document which owns the container + * @param {object} mountAt Container where to mount the listener */ -function listenTo(registrationName, contentDocumentHandle) { - var mountAt = contentDocumentHandle; +function listenTo(registrationName, mountAt) { var isListening = getListeningForDocument(mountAt); var dependencies = registrationNameDependencies[registrationName]; for (var i = 0; i < dependencies.length; i++) { var dependency = dependencies[i]; if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) { - if (dependency === 'topScroll') { - trapCapturedEvent('topScroll', 'scroll', mountAt); - } else if (dependency === 'topFocus' || dependency === 'topBlur') { - trapCapturedEvent('topFocus', 'focus', mountAt); - trapCapturedEvent('topBlur', 'blur', mountAt); - - // to make sure blur and focus event listeners are only attached once - isListening.topBlur = true; - isListening.topFocus = true; - } else if (dependency === 'topCancel') { - if (isEventSupported('cancel', true)) { - trapCapturedEvent('topCancel', 'cancel', mountAt); - } - isListening.topCancel = true; - } else if (dependency === 'topClose') { - if (isEventSupported('close', true)) { - trapCapturedEvent('topClose', 'close', mountAt); - } - isListening.topClose = true; - } else if (topLevelTypes.hasOwnProperty(dependency)) { - trapBubbledEvent(dependency, topLevelTypes[dependency], mountAt); + switch (dependency) { + case TOP_SCROLL: + trapCapturedEvent(TOP_SCROLL, mountAt); + break; + case TOP_FOCUS: + case TOP_BLUR: + trapCapturedEvent(TOP_FOCUS, mountAt); + trapCapturedEvent(TOP_BLUR, mountAt); + // We set the flag for a single dependency later in this function, + // but this ensures we mark both as attached rather than just one. + isListening[TOP_BLUR] = true; + isListening[TOP_FOCUS] = true; + break; + case TOP_CANCEL: + case TOP_CLOSE: + if (isEventSupported(getRawEventName(dependency), true)) { + trapCapturedEvent(dependency, mountAt); + } + break; + case TOP_INVALID: + case TOP_SUBMIT: + case TOP_RESET: + // We listen to them on the target DOM elements. + // Some of them bubble so we don't want them to fire twice. + break; + default: + // By default, listen on the top level to all non-media events. + // Media events don't bubble so adding the listener wouldn't do anything. + var isMediaEvent = mediaEventTypes.indexOf(dependency) !== -1; + if (!isMediaEvent) { + trapBubbledEvent(dependency, mountAt); + } + break; } - isListening[dependency] = true; } } @@ -32849,9 +33637,14 @@ function isInDocument(node) { * Input selection module for React. */ +/** + * @hasSelectionCapabilities: we get the element types that support selection + * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart` + * and `selectionEnd` rows. + */ function hasSelectionCapabilities(elem) { var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); - return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true'); + return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true'); } function getSelectionInformation() { @@ -32872,7 +33665,7 @@ function restoreSelection(priorSelectionInformation) { var priorFocusedElem = priorSelectionInformation.focusedElem; var priorSelectionRange = priorSelectionInformation.selectionRange; if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) { - if (hasSelectionCapabilities(priorFocusedElem)) { + if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) { setSelection(priorFocusedElem, priorSelectionRange); } @@ -32889,7 +33682,9 @@ function restoreSelection(priorSelectionInformation) { } } - priorFocusedElem.focus(); + if (typeof priorFocusedElem.focus === 'function') { + priorFocusedElem.focus(); + } for (var i = 0; i < ancestors.length; i++) { var info = ancestors[i]; @@ -32952,7 +33747,7 @@ var eventTypes$3 = { bubbled: 'onSelect', captured: 'onSelectCapture' }, - dependencies: ['topBlur', 'topContextMenu', 'topFocus', 'topKeyDown', 'topKeyUp', 'topMouseDown', 'topMouseUp', 'topSelectionChange'] + dependencies: [TOP_BLUR, TOP_CONTEXT_MENU, TOP_FOCUS, TOP_KEY_DOWN, TOP_KEY_UP, TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_SELECTION_CHANGE] } }; @@ -33049,25 +33844,25 @@ var SelectEventPlugin = { switch (topLevelType) { // Track the input node that has focus. - case 'topFocus': + case TOP_FOCUS: if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') { activeElement$1 = targetNode; activeElementInst$1 = targetInst; lastSelection = null; } break; - case 'topBlur': + case TOP_BLUR: activeElement$1 = null; activeElementInst$1 = null; lastSelection = null; break; // Don't fire the event while the user is dragging. This matches the // semantics of the native select event. - case 'topMouseDown': + case TOP_MOUSE_DOWN: mouseDown = true; break; - case 'topContextMenu': - case 'topMouseUp': + case TOP_CONTEXT_MENU: + case TOP_MOUSE_UP: mouseDown = false; return constructSelectEvent(nativeEvent, nativeEventTarget); // Chrome and IE fire non-standard event when selection is changed (and @@ -33079,13 +33874,13 @@ var SelectEventPlugin = { // keyup, but we check on keydown as well in the case of holding down a // key, when multiple keydown events are fired but only one keyup is. // This is also our approach for IE handling, for the reason above. - case 'topSelectionChange': + case TOP_SELECTION_CHANGE: if (skipSelectionChangeEvent) { break; } // falls through - case 'topKeyDown': - case 'topKeyUp': + case TOP_KEY_DOWN: + case TOP_KEY_UP: return constructSelectEvent(nativeEvent, nativeEventTarget); } @@ -33111,7631 +33906,26 @@ injection.injectEventPluginsByName({ BeforeInputEventPlugin: BeforeInputEventPlugin }); -// Max 31 bit integer. The max integer size in V8 for 32-bit systems. -// Math.pow(2, 30) - 1 -// 0b111111111111111111111111111111 -var MAX_SIGNED_31_BIT_INT = 1073741823; +// We capture a local reference to any global, in case it gets polyfilled after +// this module is initially evaluated. +// We want to be using a consistent implementation. -// TODO: Use an opaque type once ESLint et al support the syntax - - -var NoWork = 0; -var Sync = 1; -var Never = MAX_SIGNED_31_BIT_INT; - -var UNIT_SIZE = 10; -var MAGIC_NUMBER_OFFSET = 2; - -// 1 unit of expiration time represents 10ms. -function msToExpirationTime(ms) { - // Always add an offset so that we don't clash with the magic number for NoWork. - return (ms / UNIT_SIZE | 0) + MAGIC_NUMBER_OFFSET; -} - -function expirationTimeToMs(expirationTime) { - return (expirationTime - MAGIC_NUMBER_OFFSET) * UNIT_SIZE; -} - -function ceiling(num, precision) { - return ((num / precision | 0) + 1) * precision; -} - -function computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) { - return ceiling(currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE); -} - -var NoContext = 0; -var AsyncMode = 1; -var StrictMode = 2; - -var hasBadMapPolyfill = void 0; - -{ - hasBadMapPolyfill = false; - try { - var nonExtensibleObject = Object.preventExtensions({}); - var testMap = new Map([[nonExtensibleObject, null]]); - var testSet = new Set([nonExtensibleObject]); - // This is necessary for Rollup to not consider these unused. - // https://github.com/rollup/rollup/issues/1771 - // TODO: we can remove these if Rollup fixes the bug. - testMap.set(0, 0); - testSet.add(0); - } catch (e) { - // TODO: Consider warning about bad polyfills - hasBadMapPolyfill = true; - } -} - -// A Fiber is work on a Component that needs to be done or was done. There can -// be more than one per component. - - -var debugCounter = void 0; - -{ - debugCounter = 1; -} - -function FiberNode(tag, pendingProps, key, mode) { - // Instance - this.tag = tag; - this.key = key; - this.type = null; - this.stateNode = null; - - // Fiber - this['return'] = null; - this.child = null; - this.sibling = null; - this.index = 0; - - this.ref = null; - - this.pendingProps = pendingProps; - this.memoizedProps = null; - this.updateQueue = null; - this.memoizedState = null; - - this.mode = mode; - - // Effects - this.effectTag = NoEffect; - this.nextEffect = null; - - this.firstEffect = null; - this.lastEffect = null; - - this.expirationTime = NoWork; - - this.alternate = null; - - { - this._debugID = debugCounter++; - this._debugSource = null; - this._debugOwner = null; - this._debugIsCurrentlyTiming = false; - if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') { - Object.preventExtensions(this); - } - } -} - -// This is a constructor function, rather than a POJO constructor, still -// please ensure we do the following: -// 1) Nobody should add any instance methods on this. Instance methods can be -// more difficult to predict when they get optimized and they are almost -// never inlined properly in static compilers. -// 2) Nobody should rely on `instanceof Fiber` for type testing. We should -// always know when it is a fiber. -// 3) We might want to experiment with using numeric keys since they are easier -// to optimize in a non-JIT environment. -// 4) We can easily go from a constructor to a createFiber object literal if that -// is faster. -// 5) It should be easy to port this to a C struct and keep a C implementation -// compatible. -var createFiber = function (tag, pendingProps, key, mode) { - // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors - return new FiberNode(tag, pendingProps, key, mode); -}; - -function shouldConstruct(Component) { - return !!(Component.prototype && Component.prototype.isReactComponent); -} - -// This is used to create an alternate fiber to do work on. -function createWorkInProgress(current, pendingProps, expirationTime) { - var workInProgress = current.alternate; - if (workInProgress === null) { - // We use a double buffering pooling technique because we know that we'll - // only ever need at most two versions of a tree. We pool the "other" unused - // node that we're free to reuse. This is lazily created to avoid allocating - // extra objects for things that are never updated. It also allow us to - // reclaim the extra memory if needed. - workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode); - workInProgress.type = current.type; - workInProgress.stateNode = current.stateNode; - - { - // DEV-only fields - workInProgress._debugID = current._debugID; - workInProgress._debugSource = current._debugSource; - workInProgress._debugOwner = current._debugOwner; - } - - workInProgress.alternate = current; - current.alternate = workInProgress; - } else { - workInProgress.pendingProps = pendingProps; - - // We already have an alternate. - // Reset the effect tag. - workInProgress.effectTag = NoEffect; - - // The effect list is no longer valid. - workInProgress.nextEffect = null; - workInProgress.firstEffect = null; - workInProgress.lastEffect = null; - } - - workInProgress.expirationTime = expirationTime; - - workInProgress.child = current.child; - workInProgress.memoizedProps = current.memoizedProps; - workInProgress.memoizedState = current.memoizedState; - workInProgress.updateQueue = current.updateQueue; - - // These will be overridden during the parent's reconciliation - workInProgress.sibling = current.sibling; - workInProgress.index = current.index; - workInProgress.ref = current.ref; - - return workInProgress; -} - -function createHostRootFiber(isAsync) { - var mode = isAsync ? AsyncMode | StrictMode : NoContext; - return createFiber(HostRoot, null, null, mode); -} - -function createFiberFromElement(element, mode, expirationTime) { - var owner = null; - { - owner = element._owner; - } - - var fiber = void 0; - var type = element.type; - var key = element.key; - var pendingProps = element.props; - - var fiberTag = void 0; - if (typeof type === 'function') { - fiberTag = shouldConstruct(type) ? ClassComponent : IndeterminateComponent; - } else if (typeof type === 'string') { - fiberTag = HostComponent; - } else { - switch (type) { - case REACT_FRAGMENT_TYPE: - return createFiberFromFragment(pendingProps.children, mode, expirationTime, key); - case REACT_ASYNC_MODE_TYPE: - fiberTag = Mode; - mode |= AsyncMode | StrictMode; - break; - case REACT_STRICT_MODE_TYPE: - fiberTag = Mode; - mode |= StrictMode; - break; - case REACT_CALL_TYPE: - fiberTag = CallComponent; - break; - case REACT_RETURN_TYPE: - fiberTag = ReturnComponent; - break; - default: - { - if (typeof type === 'object' && type !== null) { - switch (type.$$typeof) { - case REACT_PROVIDER_TYPE: - fiberTag = ContextProvider; - break; - case REACT_CONTEXT_TYPE: - // This is a consumer - fiberTag = ContextConsumer; - break; - case REACT_FORWARD_REF_TYPE: - fiberTag = ForwardRef; - break; - default: - if (typeof type.tag === 'number') { - // Currently assumed to be a continuation and therefore is a - // fiber already. - // TODO: The yield system is currently broken for updates in - // some cases. The reified yield stores a fiber, but we don't - // know which fiber that is; the current or a workInProgress? - // When the continuation gets rendered here we don't know if we - // can reuse that fiber or if we need to clone it. There is - // probably a clever way to restructure this. - fiber = type; - fiber.pendingProps = pendingProps; - fiber.expirationTime = expirationTime; - return fiber; - } else { - throwOnInvalidElementType(type, owner); - } - break; - } - } else { - throwOnInvalidElementType(type, owner); - } - } - } - } - - fiber = createFiber(fiberTag, pendingProps, key, mode); - fiber.type = type; - fiber.expirationTime = expirationTime; - - { - fiber._debugSource = element._source; - fiber._debugOwner = element._owner; - } - - return fiber; -} - -function throwOnInvalidElementType(type, owner) { - var info = ''; - { - if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { - info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and " + 'named imports.'; - } - var ownerName = owner ? getComponentName(owner) : null; - if (ownerName) { - info += '\n\nCheck the render method of `' + ownerName + '`.'; - } - } - invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', type == null ? type : typeof type, info); -} - -function createFiberFromFragment(elements, mode, expirationTime, key) { - var fiber = createFiber(Fragment, elements, key, mode); - fiber.expirationTime = expirationTime; - return fiber; -} - -function createFiberFromText(content, mode, expirationTime) { - var fiber = createFiber(HostText, content, null, mode); - fiber.expirationTime = expirationTime; - return fiber; -} - -function createFiberFromHostInstanceForDeletion() { - var fiber = createFiber(HostComponent, null, null, NoContext); - fiber.type = 'DELETED'; - return fiber; -} - -function createFiberFromPortal(portal, mode, expirationTime) { - var pendingProps = portal.children !== null ? portal.children : []; - var fiber = createFiber(HostPortal, pendingProps, portal.key, mode); - fiber.expirationTime = expirationTime; - fiber.stateNode = { - containerInfo: portal.containerInfo, - pendingChildren: null, // Used by persistent updates - implementation: portal.implementation - }; - return fiber; -} - -// TODO: This should be lifted into the renderer. - - -function createFiberRoot(containerInfo, isAsync, hydrate) { - // Cyclic construction. This cheats the type system right now because - // stateNode is any. - var uninitializedFiber = createHostRootFiber(isAsync); - var root = { - current: uninitializedFiber, - containerInfo: containerInfo, - pendingChildren: null, - pendingCommitExpirationTime: NoWork, - finishedWork: null, - context: null, - pendingContext: null, - hydrate: hydrate, - remainingExpirationTime: NoWork, - firstBatch: null, - nextScheduledRoot: null - }; - uninitializedFiber.stateNode = root; - return root; -} - -var onCommitFiberRoot = null; -var onCommitFiberUnmount = null; -var hasLoggedError = false; - -function catchErrors(fn) { - return function (arg) { - try { - return fn(arg); - } catch (err) { - if (true && !hasLoggedError) { - hasLoggedError = true; - warning(false, 'React DevTools encountered an error: %s', err); - } - } - }; -} - -function injectInternals(internals) { - if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') { - // No DevTools - return false; - } - var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__; - if (hook.isDisabled) { - // This isn't a real property on the hook, but it can be set to opt out - // of DevTools integration and associated warnings and logs. - // https://github.com/facebook/react/issues/3877 - return true; - } - if (!hook.supportsFiber) { - { - warning(false, 'The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools'); - } - // DevTools exists, even though it doesn't support Fiber. - return true; - } - try { - var rendererID = hook.inject(internals); - // We have successfully injected, so now it is safe to set up hooks. - onCommitFiberRoot = catchErrors(function (root) { - return hook.onCommitFiberRoot(rendererID, root); - }); - onCommitFiberUnmount = catchErrors(function (fiber) { - return hook.onCommitFiberUnmount(rendererID, fiber); - }); - } catch (err) { - // Catch all errors because it is unsafe to throw during initialization. - { - warning(false, 'React DevTools encountered an error: %s.', err); - } - } - // DevTools exists - return true; -} - -function onCommitRoot(root) { - if (typeof onCommitFiberRoot === 'function') { - onCommitFiberRoot(root); - } -} - -function onCommitUnmount(fiber) { - if (typeof onCommitFiberUnmount === 'function') { - onCommitFiberUnmount(fiber); - } -} +var localRequestAnimationFrame$1 = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : undefined; /** - * Forked from fbjs/warning: - * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js - * - * Only change is we use console.warn instead of console.error, - * and do nothing when 'console' is not supported. - * This really simplifies the code. - * --- - * Similar to invariant but only logs a warning if the condition is not met. - * This can be used to log issues in development environments in critical - * paths. Removing the logging code for production environments will keep the - * same logic and follow the same code paths. + * A scheduling library to allow scheduling work with more granular priority and + * control than requestAnimationFrame and requestIdleCallback. + * Current TODO items: + * X- Pull out the scheduleWork polyfill built into React + * X- Initial test coverage + * X- Support for multiple callbacks + * - Support for two priorities; serial and deferred + * - Better test coverage + * - Better docblock + * - Polish documentation, API */ -var lowPriorityWarning = function () {}; - -{ - var printWarning = function (format) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var argIndex = 0; - var message = 'Warning: ' + format.replace(/%s/g, function () { - return args[argIndex++]; - }); - if (typeof console !== 'undefined') { - console.warn(message); - } - try { - // --- Welcome to debugging React --- - // This error was thrown as a convenience so that you can use this stack - // to find the callsite that caused this warning to fire. - throw new Error(message); - } catch (x) {} - }; - - lowPriorityWarning = function (condition, format) { - if (format === undefined) { - throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); - } - if (!condition) { - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { - args[_key2 - 2] = arguments[_key2]; - } - - printWarning.apply(undefined, [format].concat(args)); - } - }; -} - -var lowPriorityWarning$1 = lowPriorityWarning; - -var ReactStrictModeWarnings = { - discardPendingWarnings: function () {}, - flushPendingDeprecationWarnings: function () {}, - flushPendingUnsafeLifecycleWarnings: function () {}, - recordDeprecationWarnings: function (fiber, instance) {}, - recordUnsafeLifecycleWarnings: function (fiber, instance) {} -}; - -{ - var LIFECYCLE_SUGGESTIONS = { - UNSAFE_componentWillMount: 'componentDidMount', - UNSAFE_componentWillReceiveProps: 'static getDerivedStateFromProps', - UNSAFE_componentWillUpdate: 'componentDidUpdate' - }; - - var pendingComponentWillMountWarnings = []; - var pendingComponentWillReceivePropsWarnings = []; - var pendingComponentWillUpdateWarnings = []; - var pendingUnsafeLifecycleWarnings = new Map(); - - // Tracks components we have already warned about. - var didWarnAboutDeprecatedLifecycles = new Set(); - var didWarnAboutUnsafeLifecycles = new Set(); - - ReactStrictModeWarnings.discardPendingWarnings = function () { - pendingComponentWillMountWarnings = []; - pendingComponentWillReceivePropsWarnings = []; - pendingComponentWillUpdateWarnings = []; - pendingUnsafeLifecycleWarnings = new Map(); - }; - - ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () { - pendingUnsafeLifecycleWarnings.forEach(function (lifecycleWarningsMap, strictRoot) { - var lifecyclesWarningMesages = []; - - Object.keys(lifecycleWarningsMap).forEach(function (lifecycle) { - var lifecycleWarnings = lifecycleWarningsMap[lifecycle]; - if (lifecycleWarnings.length > 0) { - var componentNames = new Set(); - lifecycleWarnings.forEach(function (fiber) { - componentNames.add(getComponentName(fiber) || 'Component'); - didWarnAboutUnsafeLifecycles.add(fiber.type); - }); - - var formatted = lifecycle.replace('UNSAFE_', ''); - var suggestion = LIFECYCLE_SUGGESTIONS[lifecycle]; - var sortedComponentNames = Array.from(componentNames).sort().join(', '); - - lifecyclesWarningMesages.push(formatted + ': Please update the following components to use ' + (suggestion + ' instead: ' + sortedComponentNames)); - } - }); - - if (lifecyclesWarningMesages.length > 0) { - var strictRootComponentStack = getStackAddendumByWorkInProgressFiber(strictRoot); - - warning(false, 'Unsafe lifecycle methods were found within a strict-mode tree:%s' + '\n\n%s' + '\n\nLearn more about this warning here:' + '\nhttps://fb.me/react-strict-mode-warnings', strictRootComponentStack, lifecyclesWarningMesages.join('\n\n')); - } - }); - - pendingUnsafeLifecycleWarnings = new Map(); - }; - - var getStrictRoot = function (fiber) { - var maybeStrictRoot = null; - - while (fiber !== null) { - if (fiber.mode & StrictMode) { - maybeStrictRoot = fiber; - } - - fiber = fiber['return']; - } - - return maybeStrictRoot; - }; - - ReactStrictModeWarnings.flushPendingDeprecationWarnings = function () { - if (pendingComponentWillMountWarnings.length > 0) { - var uniqueNames = new Set(); - pendingComponentWillMountWarnings.forEach(function (fiber) { - uniqueNames.add(getComponentName(fiber) || 'Component'); - didWarnAboutDeprecatedLifecycles.add(fiber.type); - }); - - var sortedNames = Array.from(uniqueNames).sort().join(', '); - - lowPriorityWarning$1(false, 'componentWillMount is deprecated and will be removed in the next major version. ' + 'Use componentDidMount instead. As a temporary workaround, ' + 'you can rename to UNSAFE_componentWillMount.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here:' + '\nhttps://fb.me/react-async-component-lifecycle-hooks', sortedNames); - - pendingComponentWillMountWarnings = []; - } - - if (pendingComponentWillReceivePropsWarnings.length > 0) { - var _uniqueNames = new Set(); - pendingComponentWillReceivePropsWarnings.forEach(function (fiber) { - _uniqueNames.add(getComponentName(fiber) || 'Component'); - didWarnAboutDeprecatedLifecycles.add(fiber.type); - }); - - var _sortedNames = Array.from(_uniqueNames).sort().join(', '); - - lowPriorityWarning$1(false, 'componentWillReceiveProps is deprecated and will be removed in the next major version. ' + 'Use static getDerivedStateFromProps instead.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here:' + '\nhttps://fb.me/react-async-component-lifecycle-hooks', _sortedNames); - - pendingComponentWillReceivePropsWarnings = []; - } - - if (pendingComponentWillUpdateWarnings.length > 0) { - var _uniqueNames2 = new Set(); - pendingComponentWillUpdateWarnings.forEach(function (fiber) { - _uniqueNames2.add(getComponentName(fiber) || 'Component'); - didWarnAboutDeprecatedLifecycles.add(fiber.type); - }); - - var _sortedNames2 = Array.from(_uniqueNames2).sort().join(', '); - - lowPriorityWarning$1(false, 'componentWillUpdate is deprecated and will be removed in the next major version. ' + 'Use componentDidUpdate instead. As a temporary workaround, ' + 'you can rename to UNSAFE_componentWillUpdate.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here:' + '\nhttps://fb.me/react-async-component-lifecycle-hooks', _sortedNames2); - - pendingComponentWillUpdateWarnings = []; - } - }; - - ReactStrictModeWarnings.recordDeprecationWarnings = function (fiber, instance) { - // Dedup strategy: Warn once per component. - if (didWarnAboutDeprecatedLifecycles.has(fiber.type)) { - return; - } - - // Don't warn about react-lifecycles-compat polyfilled components. - if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) { - pendingComponentWillMountWarnings.push(fiber); - } - if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) { - pendingComponentWillReceivePropsWarnings.push(fiber); - } - if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) { - pendingComponentWillUpdateWarnings.push(fiber); - } - }; - - ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) { - var strictRoot = getStrictRoot(fiber); - - // Dedup strategy: Warn once per component. - // This is difficult to track any other way since component names - // are often vague and are likely to collide between 3rd party libraries. - // An expand property is probably okay to use here since it's DEV-only, - // and will only be set in the event of serious warnings. - if (didWarnAboutUnsafeLifecycles.has(fiber.type)) { - return; - } - - // Don't warn about react-lifecycles-compat polyfilled components. - // Note that it is sufficient to check for the presence of a - // single lifecycle, componentWillMount, with the polyfill flag. - if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning === true) { - return; - } - - var warningsForRoot = void 0; - if (!pendingUnsafeLifecycleWarnings.has(strictRoot)) { - warningsForRoot = { - UNSAFE_componentWillMount: [], - UNSAFE_componentWillReceiveProps: [], - UNSAFE_componentWillUpdate: [] - }; - - pendingUnsafeLifecycleWarnings.set(strictRoot, warningsForRoot); - } else { - warningsForRoot = pendingUnsafeLifecycleWarnings.get(strictRoot); - } - - var unsafeLifecycles = []; - if (typeof instance.componentWillMount === 'function' || typeof instance.UNSAFE_componentWillMount === 'function') { - unsafeLifecycles.push('UNSAFE_componentWillMount'); - } - if (typeof instance.componentWillReceiveProps === 'function' || typeof instance.UNSAFE_componentWillReceiveProps === 'function') { - unsafeLifecycles.push('UNSAFE_componentWillReceiveProps'); - } - if (typeof instance.componentWillUpdate === 'function' || typeof instance.UNSAFE_componentWillUpdate === 'function') { - unsafeLifecycles.push('UNSAFE_componentWillUpdate'); - } - - if (unsafeLifecycles.length > 0) { - unsafeLifecycles.forEach(function (lifecycle) { - warningsForRoot[lifecycle].push(fiber); - }); - } - }; -} - -// Exports ReactDOM.createRoot -var enableUserTimingAPI = true; - -// Mutating mode (React DOM, React ART, React Native): -var enableMutatingReconciler = true; -// Experimental noop mode (currently unused): -var enableNoopReconciler = false; -// Experimental persistent mode (Fabric): -var enablePersistentReconciler = false; -// Experimental error-boundary API that can recover from errors within a single -// render phase -var enableGetDerivedStateFromCatch = false; -// Helps identify side effects in begin-phase lifecycle hooks and setState reducers: -var debugRenderPhaseSideEffects = false; - -// In some cases, StrictMode should also double-render lifecycles. -// This can be confusing for tests though, -// And it can be bad for performance in production. -// This feature flag can be used to control the behavior: -var debugRenderPhaseSideEffectsForStrictMode = true; - -// To preserve the "Pause on caught exceptions" behavior of the debugger, we -// replay the begin phase of a failed component inside invokeGuardedCallback. -var replayFailedUnitOfWorkWithInvokeGuardedCallback = true; - -// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6: -var warnAboutDeprecatedLifecycles = false; - -var alwaysUseRequestIdleCallbackPolyfill = false; - -// Only used in www builds. - -// Prefix measurements so that it's possible to filter them. -// Longer prefixes are hard to read in DevTools. -var reactEmoji = '\u269B'; -var warningEmoji = '\u26D4'; -var supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function'; - -// Keep track of current fiber so that we know the path to unwind on pause. -// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them? -var currentFiber = null; -// If we're in the middle of user code, which fiber and method is it? -// Reusing `currentFiber` would be confusing for this because user code fiber -// can change during commit phase too, but we don't need to unwind it (since -// lifecycles in the commit phase don't resemble a tree). -var currentPhase = null; -var currentPhaseFiber = null; -// Did lifecycle hook schedule an update? This is often a performance problem, -// so we will keep track of it, and include it in the report. -// Track commits caused by cascading updates. -var isCommitting = false; -var hasScheduledUpdateInCurrentCommit = false; -var hasScheduledUpdateInCurrentPhase = false; -var commitCountInCurrentWorkLoop = 0; -var effectCountInCurrentCommit = 0; -var isWaitingForCallback = false; -// During commits, we only show a measurement once per method name -// to avoid stretch the commit phase with measurement overhead. -var labelsInCurrentCommit = new Set(); - -var formatMarkName = function (markName) { - return reactEmoji + ' ' + markName; -}; - -var formatLabel = function (label, warning$$1) { - var prefix = warning$$1 ? warningEmoji + ' ' : reactEmoji + ' '; - var suffix = warning$$1 ? ' Warning: ' + warning$$1 : ''; - return '' + prefix + label + suffix; -}; - -var beginMark = function (markName) { - performance.mark(formatMarkName(markName)); -}; - -var clearMark = function (markName) { - performance.clearMarks(formatMarkName(markName)); -}; - -var endMark = function (label, markName, warning$$1) { - var formattedMarkName = formatMarkName(markName); - var formattedLabel = formatLabel(label, warning$$1); - try { - performance.measure(formattedLabel, formattedMarkName); - } catch (err) {} - // If previous mark was missing for some reason, this will throw. - // This could only happen if React crashed in an unexpected place earlier. - // Don't pile on with more errors. - - // Clear marks immediately to avoid growing buffer. - performance.clearMarks(formattedMarkName); - performance.clearMeasures(formattedLabel); -}; - -var getFiberMarkName = function (label, debugID) { - return label + ' (#' + debugID + ')'; -}; - -var getFiberLabel = function (componentName, isMounted, phase) { - if (phase === null) { - // These are composite component total time measurements. - return componentName + ' [' + (isMounted ? 'update' : 'mount') + ']'; - } else { - // Composite component methods. - return componentName + '.' + phase; - } -}; - -var beginFiberMark = function (fiber, phase) { - var componentName = getComponentName(fiber) || 'Unknown'; - var debugID = fiber._debugID; - var isMounted = fiber.alternate !== null; - var label = getFiberLabel(componentName, isMounted, phase); - - if (isCommitting && labelsInCurrentCommit.has(label)) { - // During the commit phase, we don't show duplicate labels because - // there is a fixed overhead for every measurement, and we don't - // want to stretch the commit phase beyond necessary. - return false; - } - labelsInCurrentCommit.add(label); - - var markName = getFiberMarkName(label, debugID); - beginMark(markName); - return true; -}; - -var clearFiberMark = function (fiber, phase) { - var componentName = getComponentName(fiber) || 'Unknown'; - var debugID = fiber._debugID; - var isMounted = fiber.alternate !== null; - var label = getFiberLabel(componentName, isMounted, phase); - var markName = getFiberMarkName(label, debugID); - clearMark(markName); -}; - -var endFiberMark = function (fiber, phase, warning$$1) { - var componentName = getComponentName(fiber) || 'Unknown'; - var debugID = fiber._debugID; - var isMounted = fiber.alternate !== null; - var label = getFiberLabel(componentName, isMounted, phase); - var markName = getFiberMarkName(label, debugID); - endMark(label, markName, warning$$1); -}; - -var shouldIgnoreFiber = function (fiber) { - // Host components should be skipped in the timeline. - // We could check typeof fiber.type, but does this work with RN? - switch (fiber.tag) { - case HostRoot: - case HostComponent: - case HostText: - case HostPortal: - case CallComponent: - case ReturnComponent: - case Fragment: - case ContextProvider: - case ContextConsumer: - return true; - default: - return false; - } -}; - -var clearPendingPhaseMeasurement = function () { - if (currentPhase !== null && currentPhaseFiber !== null) { - clearFiberMark(currentPhaseFiber, currentPhase); - } - currentPhaseFiber = null; - currentPhase = null; - hasScheduledUpdateInCurrentPhase = false; -}; - -var pauseTimers = function () { - // Stops all currently active measurements so that they can be resumed - // if we continue in a later deferred loop from the same unit of work. - var fiber = currentFiber; - while (fiber) { - if (fiber._debugIsCurrentlyTiming) { - endFiberMark(fiber, null, null); - } - fiber = fiber['return']; - } -}; - -var resumeTimersRecursively = function (fiber) { - if (fiber['return'] !== null) { - resumeTimersRecursively(fiber['return']); - } - if (fiber._debugIsCurrentlyTiming) { - beginFiberMark(fiber, null); - } -}; - -var resumeTimers = function () { - // Resumes all measurements that were active during the last deferred loop. - if (currentFiber !== null) { - resumeTimersRecursively(currentFiber); - } -}; - -function recordEffect() { - if (enableUserTimingAPI) { - effectCountInCurrentCommit++; - } -} - -function recordScheduleUpdate() { - if (enableUserTimingAPI) { - if (isCommitting) { - hasScheduledUpdateInCurrentCommit = true; - } - if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') { - hasScheduledUpdateInCurrentPhase = true; - } - } -} - -function startRequestCallbackTimer() { - if (enableUserTimingAPI) { - if (supportsUserTiming && !isWaitingForCallback) { - isWaitingForCallback = true; - beginMark('(Waiting for async callback...)'); - } - } -} - -function stopRequestCallbackTimer(didExpire, expirationTime) { - if (enableUserTimingAPI) { - if (supportsUserTiming) { - isWaitingForCallback = false; - var warning$$1 = didExpire ? 'React was blocked by main thread' : null; - endMark('(Waiting for async callback... will force flush in ' + expirationTime + ' ms)', '(Waiting for async callback...)', warning$$1); - } - } -} - -function startWorkTimer(fiber) { - if (enableUserTimingAPI) { - if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { - return; - } - // If we pause, this is the fiber to unwind from. - currentFiber = fiber; - if (!beginFiberMark(fiber, null)) { - return; - } - fiber._debugIsCurrentlyTiming = true; - } -} - -function cancelWorkTimer(fiber) { - if (enableUserTimingAPI) { - if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { - return; - } - // Remember we shouldn't complete measurement for this fiber. - // Otherwise flamechart will be deep even for small updates. - fiber._debugIsCurrentlyTiming = false; - clearFiberMark(fiber, null); - } -} - -function stopWorkTimer(fiber) { - if (enableUserTimingAPI) { - if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { - return; - } - // If we pause, its parent is the fiber to unwind from. - currentFiber = fiber['return']; - if (!fiber._debugIsCurrentlyTiming) { - return; - } - fiber._debugIsCurrentlyTiming = false; - endFiberMark(fiber, null, null); - } -} - -function stopFailedWorkTimer(fiber) { - if (enableUserTimingAPI) { - if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { - return; - } - // If we pause, its parent is the fiber to unwind from. - currentFiber = fiber['return']; - if (!fiber._debugIsCurrentlyTiming) { - return; - } - fiber._debugIsCurrentlyTiming = false; - var warning$$1 = 'An error was thrown inside this error boundary'; - endFiberMark(fiber, null, warning$$1); - } -} - -function startPhaseTimer(fiber, phase) { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - clearPendingPhaseMeasurement(); - if (!beginFiberMark(fiber, phase)) { - return; - } - currentPhaseFiber = fiber; - currentPhase = phase; - } -} - -function stopPhaseTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - if (currentPhase !== null && currentPhaseFiber !== null) { - var warning$$1 = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null; - endFiberMark(currentPhaseFiber, currentPhase, warning$$1); - } - currentPhase = null; - currentPhaseFiber = null; - } -} - -function startWorkLoopTimer(nextUnitOfWork) { - if (enableUserTimingAPI) { - currentFiber = nextUnitOfWork; - if (!supportsUserTiming) { - return; - } - commitCountInCurrentWorkLoop = 0; - // This is top level call. - // Any other measurements are performed within. - beginMark('(React Tree Reconciliation)'); - // Resume any measurements that were in progress during the last loop. - resumeTimers(); - } -} - -function stopWorkLoopTimer(interruptedBy) { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - var warning$$1 = null; - if (interruptedBy !== null) { - if (interruptedBy.tag === HostRoot) { - warning$$1 = 'A top-level update interrupted the previous render'; - } else { - var componentName = getComponentName(interruptedBy) || 'Unknown'; - warning$$1 = 'An update to ' + componentName + ' interrupted the previous render'; - } - } else if (commitCountInCurrentWorkLoop > 1) { - warning$$1 = 'There were cascading updates'; - } - commitCountInCurrentWorkLoop = 0; - // Pause any measurements until the next loop. - pauseTimers(); - endMark('(React Tree Reconciliation)', '(React Tree Reconciliation)', warning$$1); - } -} - -function startCommitTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - isCommitting = true; - hasScheduledUpdateInCurrentCommit = false; - labelsInCurrentCommit.clear(); - beginMark('(Committing Changes)'); - } -} - -function stopCommitTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - - var warning$$1 = null; - if (hasScheduledUpdateInCurrentCommit) { - warning$$1 = 'Lifecycle hook scheduled a cascading update'; - } else if (commitCountInCurrentWorkLoop > 0) { - warning$$1 = 'Caused by a cascading update in earlier commit'; - } - hasScheduledUpdateInCurrentCommit = false; - commitCountInCurrentWorkLoop++; - isCommitting = false; - labelsInCurrentCommit.clear(); - - endMark('(Committing Changes)', '(Committing Changes)', warning$$1); - } -} - -function startCommitSnapshotEffectsTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - effectCountInCurrentCommit = 0; - beginMark('(Committing Snapshot Effects)'); - } -} - -function stopCommitSnapshotEffectsTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - var count = effectCountInCurrentCommit; - effectCountInCurrentCommit = 0; - endMark('(Committing Snapshot Effects: ' + count + ' Total)', '(Committing Snapshot Effects)', null); - } -} - -function startCommitHostEffectsTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - effectCountInCurrentCommit = 0; - beginMark('(Committing Host Effects)'); - } -} - -function stopCommitHostEffectsTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - var count = effectCountInCurrentCommit; - effectCountInCurrentCommit = 0; - endMark('(Committing Host Effects: ' + count + ' Total)', '(Committing Host Effects)', null); - } -} - -function startCommitLifeCyclesTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - effectCountInCurrentCommit = 0; - beginMark('(Calling Lifecycle Methods)'); - } -} - -function stopCommitLifeCyclesTimer() { - if (enableUserTimingAPI) { - if (!supportsUserTiming) { - return; - } - var count = effectCountInCurrentCommit; - effectCountInCurrentCommit = 0; - endMark('(Calling Lifecycle Methods: ' + count + ' Total)', '(Calling Lifecycle Methods)', null); - } -} - -var didWarnUpdateInsideUpdate = void 0; - -{ - didWarnUpdateInsideUpdate = false; -} - -// Callbacks are not validated until invocation - - -// Singly linked-list of updates. When an update is scheduled, it is added to -// the queue of the current fiber and the work-in-progress fiber. The two queues -// are separate but they share a persistent structure. -// -// During reconciliation, updates are removed from the work-in-progress fiber, -// but they remain on the current fiber. That ensures that if a work-in-progress -// is aborted, the aborted updates are recovered by cloning from current. -// -// The work-in-progress queue is always a subset of the current queue. -// -// When the tree is committed, the work-in-progress becomes the current. - - -function createUpdateQueue(baseState) { - var queue = { - baseState: baseState, - expirationTime: NoWork, - first: null, - last: null, - callbackList: null, - hasForceUpdate: false, - isInitialized: false, - capturedValues: null - }; - { - queue.isProcessing = false; - } - return queue; -} - -function insertUpdateIntoQueue(queue, update) { - // Append the update to the end of the list. - if (queue.last === null) { - // Queue is empty - queue.first = queue.last = update; - } else { - queue.last.next = update; - queue.last = update; - } - if (queue.expirationTime === NoWork || queue.expirationTime > update.expirationTime) { - queue.expirationTime = update.expirationTime; - } -} - -var q1 = void 0; -var q2 = void 0; -function ensureUpdateQueues(fiber) { - q1 = q2 = null; - // We'll have at least one and at most two distinct update queues. - var alternateFiber = fiber.alternate; - var queue1 = fiber.updateQueue; - if (queue1 === null) { - // TODO: We don't know what the base state will be until we begin work. - // It depends on which fiber is the next current. Initialize with an empty - // base state, then set to the memoizedState when rendering. Not super - // happy with this approach. - queue1 = fiber.updateQueue = createUpdateQueue(null); - } - - var queue2 = void 0; - if (alternateFiber !== null) { - queue2 = alternateFiber.updateQueue; - if (queue2 === null) { - queue2 = alternateFiber.updateQueue = createUpdateQueue(null); - } - } else { - queue2 = null; - } - queue2 = queue2 !== queue1 ? queue2 : null; - - // Use module variables instead of returning a tuple - q1 = queue1; - q2 = queue2; -} - -function insertUpdateIntoFiber(fiber, update) { - ensureUpdateQueues(fiber); - var queue1 = q1; - var queue2 = q2; - - // Warn if an update is scheduled from inside an updater function. - { - if ((queue1.isProcessing || queue2 !== null && queue2.isProcessing) && !didWarnUpdateInsideUpdate) { - warning(false, 'An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.'); - didWarnUpdateInsideUpdate = true; - } - } - - // If there's only one queue, add the update to that queue and exit. - if (queue2 === null) { - insertUpdateIntoQueue(queue1, update); - return; - } - - // If either queue is empty, we need to add to both queues. - if (queue1.last === null || queue2.last === null) { - insertUpdateIntoQueue(queue1, update); - insertUpdateIntoQueue(queue2, update); - return; - } - - // If both lists are not empty, the last update is the same for both lists - // because of structural sharing. So, we should only append to one of - // the lists. - insertUpdateIntoQueue(queue1, update); - // But we still need to update the `last` pointer of queue2. - queue2.last = update; -} - -function getUpdateExpirationTime(fiber) { - switch (fiber.tag) { - case HostRoot: - case ClassComponent: - var updateQueue = fiber.updateQueue; - if (updateQueue === null) { - return NoWork; - } - return updateQueue.expirationTime; - default: - return NoWork; - } -} - -function getStateFromUpdate(update, instance, prevState, props) { - var partialState = update.partialState; - if (typeof partialState === 'function') { - return partialState.call(instance, prevState, props); - } else { - return partialState; - } -} - -function processUpdateQueue(current, workInProgress, queue, instance, props, renderExpirationTime) { - if (current !== null && current.updateQueue === queue) { - // We need to create a work-in-progress queue, by cloning the current queue. - var currentQueue = queue; - queue = workInProgress.updateQueue = { - baseState: currentQueue.baseState, - expirationTime: currentQueue.expirationTime, - first: currentQueue.first, - last: currentQueue.last, - isInitialized: currentQueue.isInitialized, - capturedValues: currentQueue.capturedValues, - // These fields are no longer valid because they were already committed. - // Reset them. - callbackList: null, - hasForceUpdate: false - }; - } - - { - // Set this flag so we can warn if setState is called inside the update - // function of another setState. - queue.isProcessing = true; - } - - // Reset the remaining expiration time. If we skip over any updates, we'll - // increase this accordingly. - queue.expirationTime = NoWork; - - // TODO: We don't know what the base state will be until we begin work. - // It depends on which fiber is the next current. Initialize with an empty - // base state, then set to the memoizedState when rendering. Not super - // happy with this approach. - var state = void 0; - if (queue.isInitialized) { - state = queue.baseState; - } else { - state = queue.baseState = workInProgress.memoizedState; - queue.isInitialized = true; - } - var dontMutatePrevState = true; - var update = queue.first; - var didSkip = false; - while (update !== null) { - var updateExpirationTime = update.expirationTime; - if (updateExpirationTime > renderExpirationTime) { - // This update does not have sufficient priority. Skip it. - var remainingExpirationTime = queue.expirationTime; - if (remainingExpirationTime === NoWork || remainingExpirationTime > updateExpirationTime) { - // Update the remaining expiration time. - queue.expirationTime = updateExpirationTime; - } - if (!didSkip) { - didSkip = true; - queue.baseState = state; - } - // Continue to the next update. - update = update.next; - continue; - } - - // This update does have sufficient priority. - - // If no previous updates were skipped, drop this update from the queue by - // advancing the head of the list. - if (!didSkip) { - queue.first = update.next; - if (queue.first === null) { - queue.last = null; - } - } - - // Invoke setState callback an extra time to help detect side-effects. - // Ignore the return value in this case. - if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) { - getStateFromUpdate(update, instance, state, props); - } - - // Process the update - var _partialState = void 0; - if (update.isReplace) { - state = getStateFromUpdate(update, instance, state, props); - dontMutatePrevState = true; - } else { - _partialState = getStateFromUpdate(update, instance, state, props); - if (_partialState) { - if (dontMutatePrevState) { - // $FlowFixMe: Idk how to type this properly. - state = _assign({}, state, _partialState); - } else { - state = _assign(state, _partialState); - } - dontMutatePrevState = false; - } - } - if (update.isForced) { - queue.hasForceUpdate = true; - } - if (update.callback !== null) { - // Append to list of callbacks. - var _callbackList = queue.callbackList; - if (_callbackList === null) { - _callbackList = queue.callbackList = []; - } - _callbackList.push(update); - } - if (update.capturedValue !== null) { - var _capturedValues = queue.capturedValues; - if (_capturedValues === null) { - queue.capturedValues = [update.capturedValue]; - } else { - _capturedValues.push(update.capturedValue); - } - } - update = update.next; - } - - if (queue.callbackList !== null) { - workInProgress.effectTag |= Callback; - } else if (queue.first === null && !queue.hasForceUpdate && queue.capturedValues === null) { - // The queue is empty. We can reset it. - workInProgress.updateQueue = null; - } - - if (!didSkip) { - didSkip = true; - queue.baseState = state; - } - - { - // No longer processing. - queue.isProcessing = false; - } - - return state; -} - -function commitCallbacks(queue, context) { - var callbackList = queue.callbackList; - if (callbackList === null) { - return; - } - // Set the list to null to make sure they don't get called more than once. - queue.callbackList = null; - for (var i = 0; i < callbackList.length; i++) { - var update = callbackList[i]; - var _callback = update.callback; - // This update might be processed again. Clear the callback so it's only - // called once. - update.callback = null; - !(typeof _callback === 'function') ? invariant(false, 'Invalid argument passed as callback. Expected a function. Instead received: %s', _callback) : void 0; - _callback.call(context); - } -} - -var fakeInternalInstance = {}; -var isArray = Array.isArray; - -var didWarnAboutStateAssignmentForComponent = void 0; -var didWarnAboutUndefinedDerivedState = void 0; -var didWarnAboutUninitializedState = void 0; -var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = void 0; -var didWarnAboutLegacyLifecyclesAndDerivedState = void 0; -var warnOnInvalidCallback$1 = void 0; - -{ - didWarnAboutStateAssignmentForComponent = new Set(); - didWarnAboutUndefinedDerivedState = new Set(); - didWarnAboutUninitializedState = new Set(); - didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set(); - didWarnAboutLegacyLifecyclesAndDerivedState = new Set(); - - var didWarnOnInvalidCallback = new Set(); - - warnOnInvalidCallback$1 = function (callback, callerName) { - if (callback === null || typeof callback === 'function') { - return; - } - var key = callerName + '_' + callback; - if (!didWarnOnInvalidCallback.has(key)) { - didWarnOnInvalidCallback.add(key); - warning(false, '%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback); - } - }; - - // This is so gross but it's at least non-critical and can be removed if - // it causes problems. This is meant to give a nicer error message for - // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component, - // ...)) which otherwise throws a "_processChildContext is not a function" - // exception. - Object.defineProperty(fakeInternalInstance, '_processChildContext', { - enumerable: false, - value: function () { - invariant(false, '_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn\'t supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).'); - } - }); - Object.freeze(fakeInternalInstance); -} -function callGetDerivedStateFromCatch(ctor, capturedValues) { - var resultState = {}; - for (var i = 0; i < capturedValues.length; i++) { - var capturedValue = capturedValues[i]; - var error = capturedValue.value; - var partialState = ctor.getDerivedStateFromCatch.call(null, error); - if (partialState !== null && partialState !== undefined) { - _assign(resultState, partialState); - } - } - return resultState; -} - -var ReactFiberClassComponent = function (legacyContext, scheduleWork, computeExpirationForFiber, memoizeProps, memoizeState) { - var cacheContext = legacyContext.cacheContext, - getMaskedContext = legacyContext.getMaskedContext, - getUnmaskedContext = legacyContext.getUnmaskedContext, - isContextConsumer = legacyContext.isContextConsumer, - hasContextChanged = legacyContext.hasContextChanged; - - // Class component state updater - - var updater = { - isMounted: isMounted, - enqueueSetState: function (instance, partialState, callback) { - var fiber = get(instance); - callback = callback === undefined ? null : callback; - { - warnOnInvalidCallback$1(callback, 'setState'); - } - var expirationTime = computeExpirationForFiber(fiber); - var update = { - expirationTime: expirationTime, - partialState: partialState, - callback: callback, - isReplace: false, - isForced: false, - capturedValue: null, - next: null - }; - insertUpdateIntoFiber(fiber, update); - scheduleWork(fiber, expirationTime); - }, - enqueueReplaceState: function (instance, state, callback) { - var fiber = get(instance); - callback = callback === undefined ? null : callback; - { - warnOnInvalidCallback$1(callback, 'replaceState'); - } - var expirationTime = computeExpirationForFiber(fiber); - var update = { - expirationTime: expirationTime, - partialState: state, - callback: callback, - isReplace: true, - isForced: false, - capturedValue: null, - next: null - }; - insertUpdateIntoFiber(fiber, update); - scheduleWork(fiber, expirationTime); - }, - enqueueForceUpdate: function (instance, callback) { - var fiber = get(instance); - callback = callback === undefined ? null : callback; - { - warnOnInvalidCallback$1(callback, 'forceUpdate'); - } - var expirationTime = computeExpirationForFiber(fiber); - var update = { - expirationTime: expirationTime, - partialState: null, - callback: callback, - isReplace: false, - isForced: true, - capturedValue: null, - next: null - }; - insertUpdateIntoFiber(fiber, update); - scheduleWork(fiber, expirationTime); - } - }; - - function checkShouldComponentUpdate(workInProgress, oldProps, newProps, oldState, newState, newContext) { - if (oldProps === null || workInProgress.updateQueue !== null && workInProgress.updateQueue.hasForceUpdate) { - // If the workInProgress already has an Update effect, return true - return true; - } - - var instance = workInProgress.stateNode; - var ctor = workInProgress.type; - if (typeof instance.shouldComponentUpdate === 'function') { - startPhaseTimer(workInProgress, 'shouldComponentUpdate'); - var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, newContext); - stopPhaseTimer(); - - { - warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(workInProgress) || 'Component'); - } - - return shouldUpdate; - } - - if (ctor.prototype && ctor.prototype.isPureReactComponent) { - return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState); - } - - return true; - } - - function checkClassInstance(workInProgress) { - var instance = workInProgress.stateNode; - var type = workInProgress.type; - { - var name = getComponentName(workInProgress) || 'Component'; - var renderPresent = instance.render; - - if (!renderPresent) { - if (type.prototype && typeof type.prototype.render === 'function') { - warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name); - } else { - warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name); - } - } - - var noGetInitialStateOnES6 = !instance.getInitialState || instance.getInitialState.isReactClassApproved || instance.state; - warning(noGetInitialStateOnES6, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name); - var noGetDefaultPropsOnES6 = !instance.getDefaultProps || instance.getDefaultProps.isReactClassApproved; - warning(noGetDefaultPropsOnES6, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name); - var noInstancePropTypes = !instance.propTypes; - warning(noInstancePropTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name); - var noInstanceContextTypes = !instance.contextTypes; - warning(noInstanceContextTypes, 'contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name); - var noComponentShouldUpdate = typeof instance.componentShouldUpdate !== 'function'; - warning(noComponentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name); - if (type.prototype && type.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') { - warning(false, '%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(workInProgress) || 'A pure component'); - } - var noComponentDidUnmount = typeof instance.componentDidUnmount !== 'function'; - warning(noComponentDidUnmount, '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name); - var noComponentDidReceiveProps = typeof instance.componentDidReceiveProps !== 'function'; - warning(noComponentDidReceiveProps, '%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name); - var noComponentWillRecieveProps = typeof instance.componentWillRecieveProps !== 'function'; - warning(noComponentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name); - var noUnsafeComponentWillRecieveProps = typeof instance.UNSAFE_componentWillRecieveProps !== 'function'; - warning(noUnsafeComponentWillRecieveProps, '%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name); - var hasMutatedProps = instance.props !== workInProgress.pendingProps; - warning(instance.props === undefined || !hasMutatedProps, '%s(...): When calling super() in `%s`, make sure to pass ' + "up the same props that your component's constructor was passed.", name, name); - var noInstanceDefaultProps = !instance.defaultProps; - warning(noInstanceDefaultProps, 'Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name); - - if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(type)) { - didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(type); - warning(false, '%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(workInProgress)); - } - - var noInstanceGetDerivedStateFromProps = typeof instance.getDerivedStateFromProps !== 'function'; - warning(noInstanceGetDerivedStateFromProps, '%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name); - var noInstanceGetDerivedStateFromCatch = typeof instance.getDerivedStateFromCatch !== 'function'; - warning(noInstanceGetDerivedStateFromCatch, '%s: getDerivedStateFromCatch() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name); - var noStaticGetSnapshotBeforeUpdate = typeof type.getSnapshotBeforeUpdate !== 'function'; - warning(noStaticGetSnapshotBeforeUpdate, '%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name); - var _state = instance.state; - if (_state && (typeof _state !== 'object' || isArray(_state))) { - warning(false, '%s.state: must be set to an object or null', name); - } - if (typeof instance.getChildContext === 'function') { - warning(typeof type.childContextTypes === 'object', '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name); - } - } - } - - function resetInputPointers(workInProgress, instance) { - instance.props = workInProgress.memoizedProps; - instance.state = workInProgress.memoizedState; - } - - function adoptClassInstance(workInProgress, instance) { - instance.updater = updater; - workInProgress.stateNode = instance; - // The instance needs access to the fiber so that it can schedule updates - set(instance, workInProgress); - { - instance._reactInternalInstance = fakeInternalInstance; - } - } - - function constructClassInstance(workInProgress, props) { - var ctor = workInProgress.type; - var unmaskedContext = getUnmaskedContext(workInProgress); - var needsContext = isContextConsumer(workInProgress); - var context = needsContext ? getMaskedContext(workInProgress, unmaskedContext) : emptyObject; - - // Instantiate twice to help detect side-effects. - if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) { - new ctor(props, context); // eslint-disable-line no-new - } - - var instance = new ctor(props, context); - var state = instance.state !== null && instance.state !== undefined ? instance.state : null; - adoptClassInstance(workInProgress, instance); - - { - if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) { - var componentName = getComponentName(workInProgress) || 'Component'; - if (!didWarnAboutUninitializedState.has(componentName)) { - didWarnAboutUninitializedState.add(componentName); - warning(false, '%s: Did not properly initialize state during construction. ' + 'Expected state to be an object, but it was %s.', componentName, instance.state === null ? 'null' : 'undefined'); - } - } - - // If new component APIs are defined, "unsafe" lifecycles won't be called. - // Warn about these lifecycles if they are present. - // Don't warn about react-lifecycles-compat polyfilled methods though. - if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') { - var foundWillMountName = null; - var foundWillReceivePropsName = null; - var foundWillUpdateName = null; - if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) { - foundWillMountName = 'componentWillMount'; - } else if (typeof instance.UNSAFE_componentWillMount === 'function') { - foundWillMountName = 'UNSAFE_componentWillMount'; - } - if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) { - foundWillReceivePropsName = 'componentWillReceiveProps'; - } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') { - foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps'; - } - if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) { - foundWillUpdateName = 'componentWillUpdate'; - } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') { - foundWillUpdateName = 'UNSAFE_componentWillUpdate'; - } - if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) { - var _componentName = getComponentName(workInProgress) || 'Component'; - var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()'; - if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) { - didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName); - warning(false, 'Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\n' + 'The above lifecycles should be removed. Learn more about this warning here:\n' + 'https://fb.me/react-async-component-lifecycle-hooks', _componentName, newApiName, foundWillMountName !== null ? '\n ' + foundWillMountName : '', foundWillReceivePropsName !== null ? '\n ' + foundWillReceivePropsName : '', foundWillUpdateName !== null ? '\n ' + foundWillUpdateName : ''); - } - } - } - } - - workInProgress.memoizedState = state; - - var partialState = callGetDerivedStateFromProps(workInProgress, instance, props, state); - - if (partialState !== null && partialState !== undefined) { - // Render-phase updates (like this) should not be added to the update queue, - // So that multiple render passes do not enqueue multiple updates. - // Instead, just synchronously merge the returned state into the instance. - workInProgress.memoizedState = _assign({}, workInProgress.memoizedState, partialState); - } - - // Cache unmasked context so we can avoid recreating masked context unless necessary. - // ReactFiberContext usually updates this cache but can't for newly-created instances. - if (needsContext) { - cacheContext(workInProgress, unmaskedContext, context); - } - - return instance; - } - - function callComponentWillMount(workInProgress, instance) { - startPhaseTimer(workInProgress, 'componentWillMount'); - var oldState = instance.state; - - if (typeof instance.componentWillMount === 'function') { - instance.componentWillMount(); - } - if (typeof instance.UNSAFE_componentWillMount === 'function') { - instance.UNSAFE_componentWillMount(); - } - - stopPhaseTimer(); - - if (oldState !== instance.state) { - { - warning(false, '%s.componentWillMount(): Assigning directly to this.state is ' + "deprecated (except inside a component's " + 'constructor). Use setState instead.', getComponentName(workInProgress) || 'Component'); - } - updater.enqueueReplaceState(instance, instance.state, null); - } - } - - function callComponentWillReceiveProps(workInProgress, instance, newProps, newContext) { - var oldState = instance.state; - startPhaseTimer(workInProgress, 'componentWillReceiveProps'); - if (typeof instance.componentWillReceiveProps === 'function') { - instance.componentWillReceiveProps(newProps, newContext); - } - if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') { - instance.UNSAFE_componentWillReceiveProps(newProps, newContext); - } - stopPhaseTimer(); - - if (instance.state !== oldState) { - { - var componentName = getComponentName(workInProgress) || 'Component'; - if (!didWarnAboutStateAssignmentForComponent.has(componentName)) { - didWarnAboutStateAssignmentForComponent.add(componentName); - warning(false, '%s.componentWillReceiveProps(): Assigning directly to ' + "this.state is deprecated (except inside a component's " + 'constructor). Use setState instead.', componentName); - } - } - updater.enqueueReplaceState(instance, instance.state, null); - } - } - - function callGetDerivedStateFromProps(workInProgress, instance, nextProps, prevState) { - var type = workInProgress.type; - - - if (typeof type.getDerivedStateFromProps === 'function') { - if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) { - // Invoke method an extra time to help detect side-effects. - type.getDerivedStateFromProps.call(null, nextProps, prevState); - } - - var partialState = type.getDerivedStateFromProps.call(null, nextProps, prevState); - - { - if (partialState === undefined) { - var componentName = getComponentName(workInProgress) || 'Component'; - if (!didWarnAboutUndefinedDerivedState.has(componentName)) { - didWarnAboutUndefinedDerivedState.add(componentName); - warning(false, '%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName); - } - } - } - - return partialState; - } - } - - // Invokes the mount life-cycles on a previously never rendered instance. - function mountClassInstance(workInProgress, renderExpirationTime) { - var ctor = workInProgress.type; - var current = workInProgress.alternate; - - { - checkClassInstance(workInProgress); - } - - var instance = workInProgress.stateNode; - var props = workInProgress.pendingProps; - var unmaskedContext = getUnmaskedContext(workInProgress); - - instance.props = props; - instance.state = workInProgress.memoizedState; - instance.refs = emptyObject; - instance.context = getMaskedContext(workInProgress, unmaskedContext); - - { - if (workInProgress.mode & StrictMode) { - ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance); - } - - if (warnAboutDeprecatedLifecycles) { - ReactStrictModeWarnings.recordDeprecationWarnings(workInProgress, instance); - } - } - - // In order to support react-lifecycles-compat polyfilled components, - // Unsafe lifecycles should not be invoked for components using the new APIs. - if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) { - callComponentWillMount(workInProgress, instance); - // If we had additional state updates during this life-cycle, let's - // process them now. - var updateQueue = workInProgress.updateQueue; - if (updateQueue !== null) { - instance.state = processUpdateQueue(current, workInProgress, updateQueue, instance, props, renderExpirationTime); - } - } - if (typeof instance.componentDidMount === 'function') { - workInProgress.effectTag |= Update; - } - } - - function resumeMountClassInstance(workInProgress, renderExpirationTime) { - var ctor = workInProgress.type; - var instance = workInProgress.stateNode; - resetInputPointers(workInProgress, instance); - - var oldProps = workInProgress.memoizedProps; - var newProps = workInProgress.pendingProps; - var oldContext = instance.context; - var newUnmaskedContext = getUnmaskedContext(workInProgress); - var newContext = getMaskedContext(workInProgress, newUnmaskedContext); - - var hasNewLifecycles = typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; - - // Note: During these life-cycles, instance.props/instance.state are what - // ever the previously attempted to render - not the "current". However, - // during componentDidUpdate we pass the "current" props. - - // In order to support react-lifecycles-compat polyfilled components, - // Unsafe lifecycles should not be invoked for components using the new APIs. - if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) { - if (oldProps !== newProps || oldContext !== newContext) { - callComponentWillReceiveProps(workInProgress, instance, newProps, newContext); - } - } - - // Compute the next state using the memoized state and the update queue. - var oldState = workInProgress.memoizedState; - // TODO: Previous state can be null. - var newState = void 0; - var derivedStateFromCatch = void 0; - if (workInProgress.updateQueue !== null) { - newState = processUpdateQueue(null, workInProgress, workInProgress.updateQueue, instance, newProps, renderExpirationTime); - - var updateQueue = workInProgress.updateQueue; - if (updateQueue !== null && updateQueue.capturedValues !== null && enableGetDerivedStateFromCatch && typeof ctor.getDerivedStateFromCatch === 'function') { - var capturedValues = updateQueue.capturedValues; - // Don't remove these from the update queue yet. We need them in - // finishClassComponent. Do the reset there. - // TODO: This is awkward. Refactor class components. - // updateQueue.capturedValues = null; - derivedStateFromCatch = callGetDerivedStateFromCatch(ctor, capturedValues); - } - } else { - newState = oldState; - } - - var derivedStateFromProps = void 0; - if (oldProps !== newProps) { - // The prevState parameter should be the partially updated state. - // Otherwise, spreading state in return values could override updates. - derivedStateFromProps = callGetDerivedStateFromProps(workInProgress, instance, newProps, newState); - } - - if (derivedStateFromProps !== null && derivedStateFromProps !== undefined) { - // Render-phase updates (like this) should not be added to the update queue, - // So that multiple render passes do not enqueue multiple updates. - // Instead, just synchronously merge the returned state into the instance. - newState = newState === null || newState === undefined ? derivedStateFromProps : _assign({}, newState, derivedStateFromProps); - } - if (derivedStateFromCatch !== null && derivedStateFromCatch !== undefined) { - // Render-phase updates (like this) should not be added to the update queue, - // So that multiple render passes do not enqueue multiple updates. - // Instead, just synchronously merge the returned state into the instance. - newState = newState === null || newState === undefined ? derivedStateFromCatch : _assign({}, newState, derivedStateFromCatch); - } - - if (oldProps === newProps && oldState === newState && !hasContextChanged() && !(workInProgress.updateQueue !== null && workInProgress.updateQueue.hasForceUpdate)) { - // If an update was already in progress, we should schedule an Update - // effect even though we're bailing out, so that cWU/cDU are called. - if (typeof instance.componentDidMount === 'function') { - workInProgress.effectTag |= Update; - } - return false; - } - - var shouldUpdate = checkShouldComponentUpdate(workInProgress, oldProps, newProps, oldState, newState, newContext); - - if (shouldUpdate) { - // In order to support react-lifecycles-compat polyfilled components, - // Unsafe lifecycles should not be invoked for components using the new APIs. - if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) { - startPhaseTimer(workInProgress, 'componentWillMount'); - if (typeof instance.componentWillMount === 'function') { - instance.componentWillMount(); - } - if (typeof instance.UNSAFE_componentWillMount === 'function') { - instance.UNSAFE_componentWillMount(); - } - stopPhaseTimer(); - } - if (typeof instance.componentDidMount === 'function') { - workInProgress.effectTag |= Update; - } - } else { - // If an update was already in progress, we should schedule an Update - // effect even though we're bailing out, so that cWU/cDU are called. - if (typeof instance.componentDidMount === 'function') { - workInProgress.effectTag |= Update; - } - - // If shouldComponentUpdate returned false, we should still update the - // memoized props/state to indicate that this work can be reused. - memoizeProps(workInProgress, newProps); - memoizeState(workInProgress, newState); - } - - // Update the existing instance's state, props, and context pointers even - // if shouldComponentUpdate returns false. - instance.props = newProps; - instance.state = newState; - instance.context = newContext; - - return shouldUpdate; - } - - // Invokes the update life-cycles and returns false if it shouldn't rerender. - function updateClassInstance(current, workInProgress, renderExpirationTime) { - var ctor = workInProgress.type; - var instance = workInProgress.stateNode; - resetInputPointers(workInProgress, instance); - - var oldProps = workInProgress.memoizedProps; - var newProps = workInProgress.pendingProps; - var oldContext = instance.context; - var newUnmaskedContext = getUnmaskedContext(workInProgress); - var newContext = getMaskedContext(workInProgress, newUnmaskedContext); - - var hasNewLifecycles = typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; - - // Note: During these life-cycles, instance.props/instance.state are what - // ever the previously attempted to render - not the "current". However, - // during componentDidUpdate we pass the "current" props. - - // In order to support react-lifecycles-compat polyfilled components, - // Unsafe lifecycles should not be invoked for components using the new APIs. - if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) { - if (oldProps !== newProps || oldContext !== newContext) { - callComponentWillReceiveProps(workInProgress, instance, newProps, newContext); - } - } - - // Compute the next state using the memoized state and the update queue. - var oldState = workInProgress.memoizedState; - // TODO: Previous state can be null. - var newState = void 0; - var derivedStateFromCatch = void 0; - - if (workInProgress.updateQueue !== null) { - newState = processUpdateQueue(current, workInProgress, workInProgress.updateQueue, instance, newProps, renderExpirationTime); - - var updateQueue = workInProgress.updateQueue; - if (updateQueue !== null && updateQueue.capturedValues !== null && enableGetDerivedStateFromCatch && typeof ctor.getDerivedStateFromCatch === 'function') { - var capturedValues = updateQueue.capturedValues; - // Don't remove these from the update queue yet. We need them in - // finishClassComponent. Do the reset there. - // TODO: This is awkward. Refactor class components. - // updateQueue.capturedValues = null; - derivedStateFromCatch = callGetDerivedStateFromCatch(ctor, capturedValues); - } - } else { - newState = oldState; - } - - var derivedStateFromProps = void 0; - if (oldProps !== newProps) { - // The prevState parameter should be the partially updated state. - // Otherwise, spreading state in return values could override updates. - derivedStateFromProps = callGetDerivedStateFromProps(workInProgress, instance, newProps, newState); - } - - if (derivedStateFromProps !== null && derivedStateFromProps !== undefined) { - // Render-phase updates (like this) should not be added to the update queue, - // So that multiple render passes do not enqueue multiple updates. - // Instead, just synchronously merge the returned state into the instance. - newState = newState === null || newState === undefined ? derivedStateFromProps : _assign({}, newState, derivedStateFromProps); - } - if (derivedStateFromCatch !== null && derivedStateFromCatch !== undefined) { - // Render-phase updates (like this) should not be added to the update queue, - // So that multiple render passes do not enqueue multiple updates. - // Instead, just synchronously merge the returned state into the instance. - newState = newState === null || newState === undefined ? derivedStateFromCatch : _assign({}, newState, derivedStateFromCatch); - } - - if (oldProps === newProps && oldState === newState && !hasContextChanged() && !(workInProgress.updateQueue !== null && workInProgress.updateQueue.hasForceUpdate)) { - // If an update was already in progress, we should schedule an Update - // effect even though we're bailing out, so that cWU/cDU are called. - if (typeof instance.componentDidUpdate === 'function') { - if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) { - workInProgress.effectTag |= Update; - } - } - if (typeof instance.getSnapshotBeforeUpdate === 'function') { - if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) { - workInProgress.effectTag |= Snapshot; - } - } - return false; - } - - var shouldUpdate = checkShouldComponentUpdate(workInProgress, oldProps, newProps, oldState, newState, newContext); - - if (shouldUpdate) { - // In order to support react-lifecycles-compat polyfilled components, - // Unsafe lifecycles should not be invoked for components using the new APIs. - if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) { - startPhaseTimer(workInProgress, 'componentWillUpdate'); - if (typeof instance.componentWillUpdate === 'function') { - instance.componentWillUpdate(newProps, newState, newContext); - } - if (typeof instance.UNSAFE_componentWillUpdate === 'function') { - instance.UNSAFE_componentWillUpdate(newProps, newState, newContext); - } - stopPhaseTimer(); - } - if (typeof instance.componentDidUpdate === 'function') { - workInProgress.effectTag |= Update; - } - if (typeof instance.getSnapshotBeforeUpdate === 'function') { - workInProgress.effectTag |= Snapshot; - } - } else { - // If an update was already in progress, we should schedule an Update - // effect even though we're bailing out, so that cWU/cDU are called. - if (typeof instance.componentDidUpdate === 'function') { - if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) { - workInProgress.effectTag |= Update; - } - } - if (typeof instance.getSnapshotBeforeUpdate === 'function') { - if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) { - workInProgress.effectTag |= Snapshot; - } - } - - // If shouldComponentUpdate returned false, we should still update the - // memoized props/state to indicate that this work can be reused. - memoizeProps(workInProgress, newProps); - memoizeState(workInProgress, newState); - } - - // Update the existing instance's state, props, and context pointers even - // if shouldComponentUpdate returns false. - instance.props = newProps; - instance.state = newState; - instance.context = newContext; - - return shouldUpdate; - } - - return { - adoptClassInstance: adoptClassInstance, - callGetDerivedStateFromProps: callGetDerivedStateFromProps, - constructClassInstance: constructClassInstance, - mountClassInstance: mountClassInstance, - resumeMountClassInstance: resumeMountClassInstance, - updateClassInstance: updateClassInstance - }; -}; - -var getCurrentFiberStackAddendum$2 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; - - -var didWarnAboutMaps = void 0; -var didWarnAboutStringRefInStrictMode = void 0; -var ownerHasKeyUseWarning = void 0; -var ownerHasFunctionTypeWarning = void 0; -var warnForMissingKey = function (child) {}; - -{ - didWarnAboutMaps = false; - didWarnAboutStringRefInStrictMode = {}; - - /** - * Warn if there's no key explicitly set on dynamic arrays of children or - * object keys are not valid. This allows us to keep track of children between - * updates. - */ - ownerHasKeyUseWarning = {}; - ownerHasFunctionTypeWarning = {}; - - warnForMissingKey = function (child) { - if (child === null || typeof child !== 'object') { - return; - } - if (!child._store || child._store.validated || child.key != null) { - return; - } - !(typeof child._store === 'object') ? invariant(false, 'React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.') : void 0; - child._store.validated = true; - - var currentComponentErrorInfo = 'Each child in an array or iterator should have a unique ' + '"key" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + (getCurrentFiberStackAddendum$2() || ''); - if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { - return; - } - ownerHasKeyUseWarning[currentComponentErrorInfo] = true; - - warning(false, 'Each child in an array or iterator should have a unique ' + '"key" prop. See https://fb.me/react-warning-keys for ' + 'more information.%s', getCurrentFiberStackAddendum$2()); - }; -} - -var isArray$1 = Array.isArray; - -function coerceRef(returnFiber, current, element) { - var mixedRef = element.ref; - if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') { - { - if (returnFiber.mode & StrictMode) { - var componentName = getComponentName(returnFiber) || 'Component'; - if (!didWarnAboutStringRefInStrictMode[componentName]) { - warning(false, 'A string ref, "%s", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using createRef() instead.' + '\n%s' + '\n\nLearn more about using refs safely here:' + '\nhttps://fb.me/react-strict-mode-string-ref', mixedRef, getStackAddendumByWorkInProgressFiber(returnFiber)); - didWarnAboutStringRefInStrictMode[componentName] = true; - } - } - } - - if (element._owner) { - var owner = element._owner; - var inst = void 0; - if (owner) { - var ownerFiber = owner; - !(ownerFiber.tag === ClassComponent) ? invariant(false, 'Stateless function components cannot have refs.') : void 0; - inst = ownerFiber.stateNode; - } - !inst ? invariant(false, 'Missing owner for string ref %s. This error is likely caused by a bug in React. Please file an issue.', mixedRef) : void 0; - var stringRef = '' + mixedRef; - // Check if previous string ref matches new string ref - if (current !== null && current.ref !== null && current.ref._stringRef === stringRef) { - return current.ref; - } - var ref = function (value) { - var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs; - if (value === null) { - delete refs[stringRef]; - } else { - refs[stringRef] = value; - } - }; - ref._stringRef = stringRef; - return ref; - } else { - !(typeof mixedRef === 'string') ? invariant(false, 'Expected ref to be a function or a string.') : void 0; - !element._owner ? invariant(false, 'Element ref was specified as a string (%s) but no owner was set. This could happen for one of the following reasons:\n1. You may be adding a ref to a functional component\n2. You may be adding a ref to a component that was not created inside a component\'s render method\n3. You have multiple copies of React loaded\nSee https://fb.me/react-refs-must-have-owner for more information.', mixedRef) : void 0; - } - } - return mixedRef; -} - -function throwOnInvalidObjectType(returnFiber, newChild) { - if (returnFiber.type !== 'textarea') { - var addendum = ''; - { - addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + (getCurrentFiberStackAddendum$2() || ''); - } - invariant(false, 'Objects are not valid as a React child (found: %s).%s', Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild, addendum); - } -} - -function warnOnFunctionType() { - var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of from render. ' + 'Or maybe you meant to call this function rather than return it.' + (getCurrentFiberStackAddendum$2() || ''); - - if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) { - return; - } - ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true; - - warning(false, 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of from render. ' + 'Or maybe you meant to call this function rather than return it.%s', getCurrentFiberStackAddendum$2() || ''); -} - -// This wrapper function exists because I expect to clone the code in each path -// to be able to optimize each path individually by branching early. This needs -// a compiler or we can do it manually. Helpers that don't need this branching -// live outside of this function. -function ChildReconciler(shouldTrackSideEffects) { - function deleteChild(returnFiber, childToDelete) { - if (!shouldTrackSideEffects) { - // Noop. - return; - } - // Deletions are added in reversed order so we add it to the front. - // At this point, the return fiber's effect list is empty except for - // deletions, so we can just append the deletion to the list. The remaining - // effects aren't added until the complete phase. Once we implement - // resuming, this may not be true. - var last = returnFiber.lastEffect; - if (last !== null) { - last.nextEffect = childToDelete; - returnFiber.lastEffect = childToDelete; - } else { - returnFiber.firstEffect = returnFiber.lastEffect = childToDelete; - } - childToDelete.nextEffect = null; - childToDelete.effectTag = Deletion; - } - - function deleteRemainingChildren(returnFiber, currentFirstChild) { - if (!shouldTrackSideEffects) { - // Noop. - return null; - } - - // TODO: For the shouldClone case, this could be micro-optimized a bit by - // assuming that after the first child we've already added everything. - var childToDelete = currentFirstChild; - while (childToDelete !== null) { - deleteChild(returnFiber, childToDelete); - childToDelete = childToDelete.sibling; - } - return null; - } - - function mapRemainingChildren(returnFiber, currentFirstChild) { - // Add the remaining children to a temporary map so that we can find them by - // keys quickly. Implicit (null) keys get added to this set with their index - var existingChildren = new Map(); - - var existingChild = currentFirstChild; - while (existingChild !== null) { - if (existingChild.key !== null) { - existingChildren.set(existingChild.key, existingChild); - } else { - existingChildren.set(existingChild.index, existingChild); - } - existingChild = existingChild.sibling; - } - return existingChildren; - } - - function useFiber(fiber, pendingProps, expirationTime) { - // We currently set sibling to null and index to 0 here because it is easy - // to forget to do before returning it. E.g. for the single child case. - var clone = createWorkInProgress(fiber, pendingProps, expirationTime); - clone.index = 0; - clone.sibling = null; - return clone; - } - - function placeChild(newFiber, lastPlacedIndex, newIndex) { - newFiber.index = newIndex; - if (!shouldTrackSideEffects) { - // Noop. - return lastPlacedIndex; - } - var current = newFiber.alternate; - if (current !== null) { - var oldIndex = current.index; - if (oldIndex < lastPlacedIndex) { - // This is a move. - newFiber.effectTag = Placement; - return lastPlacedIndex; - } else { - // This item can stay in place. - return oldIndex; - } - } else { - // This is an insertion. - newFiber.effectTag = Placement; - return lastPlacedIndex; - } - } - - function placeSingleChild(newFiber) { - // This is simpler for the single child case. We only need to do a - // placement for inserting new children. - if (shouldTrackSideEffects && newFiber.alternate === null) { - newFiber.effectTag = Placement; - } - return newFiber; - } - - function updateTextNode(returnFiber, current, textContent, expirationTime) { - if (current === null || current.tag !== HostText) { - // Insert - var created = createFiberFromText(textContent, returnFiber.mode, expirationTime); - created['return'] = returnFiber; - return created; - } else { - // Update - var existing = useFiber(current, textContent, expirationTime); - existing['return'] = returnFiber; - return existing; - } - } - - function updateElement(returnFiber, current, element, expirationTime) { - if (current !== null && current.type === element.type) { - // Move based on index - var existing = useFiber(current, element.props, expirationTime); - existing.ref = coerceRef(returnFiber, current, element); - existing['return'] = returnFiber; - { - existing._debugSource = element._source; - existing._debugOwner = element._owner; - } - return existing; - } else { - // Insert - var created = createFiberFromElement(element, returnFiber.mode, expirationTime); - created.ref = coerceRef(returnFiber, current, element); - created['return'] = returnFiber; - return created; - } - } - - function updatePortal(returnFiber, current, portal, expirationTime) { - if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) { - // Insert - var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime); - created['return'] = returnFiber; - return created; - } else { - // Update - var existing = useFiber(current, portal.children || [], expirationTime); - existing['return'] = returnFiber; - return existing; - } - } - - function updateFragment(returnFiber, current, fragment, expirationTime, key) { - if (current === null || current.tag !== Fragment) { - // Insert - var created = createFiberFromFragment(fragment, returnFiber.mode, expirationTime, key); - created['return'] = returnFiber; - return created; - } else { - // Update - var existing = useFiber(current, fragment, expirationTime); - existing['return'] = returnFiber; - return existing; - } - } - - function createChild(returnFiber, newChild, expirationTime) { - if (typeof newChild === 'string' || typeof newChild === 'number') { - // Text nodes don't have keys. If the previous node is implicitly keyed - // we can continue to replace it without aborting even if it is not a text - // node. - var created = createFiberFromText('' + newChild, returnFiber.mode, expirationTime); - created['return'] = returnFiber; - return created; - } - - if (typeof newChild === 'object' && newChild !== null) { - switch (newChild.$$typeof) { - case REACT_ELEMENT_TYPE: - { - var _created = createFiberFromElement(newChild, returnFiber.mode, expirationTime); - _created.ref = coerceRef(returnFiber, null, newChild); - _created['return'] = returnFiber; - return _created; - } - case REACT_PORTAL_TYPE: - { - var _created2 = createFiberFromPortal(newChild, returnFiber.mode, expirationTime); - _created2['return'] = returnFiber; - return _created2; - } - } - - if (isArray$1(newChild) || getIteratorFn(newChild)) { - var _created3 = createFiberFromFragment(newChild, returnFiber.mode, expirationTime, null); - _created3['return'] = returnFiber; - return _created3; - } - - throwOnInvalidObjectType(returnFiber, newChild); - } - - { - if (typeof newChild === 'function') { - warnOnFunctionType(); - } - } - - return null; - } - - function updateSlot(returnFiber, oldFiber, newChild, expirationTime) { - // Update the fiber if the keys match, otherwise return null. - - var key = oldFiber !== null ? oldFiber.key : null; - - if (typeof newChild === 'string' || typeof newChild === 'number') { - // Text nodes don't have keys. If the previous node is implicitly keyed - // we can continue to replace it without aborting even if it is not a text - // node. - if (key !== null) { - return null; - } - return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime); - } - - if (typeof newChild === 'object' && newChild !== null) { - switch (newChild.$$typeof) { - case REACT_ELEMENT_TYPE: - { - if (newChild.key === key) { - if (newChild.type === REACT_FRAGMENT_TYPE) { - return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key); - } - return updateElement(returnFiber, oldFiber, newChild, expirationTime); - } else { - return null; - } - } - case REACT_PORTAL_TYPE: - { - if (newChild.key === key) { - return updatePortal(returnFiber, oldFiber, newChild, expirationTime); - } else { - return null; - } - } - } - - if (isArray$1(newChild) || getIteratorFn(newChild)) { - if (key !== null) { - return null; - } - - return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null); - } - - throwOnInvalidObjectType(returnFiber, newChild); - } - - { - if (typeof newChild === 'function') { - warnOnFunctionType(); - } - } - - return null; - } - - function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) { - if (typeof newChild === 'string' || typeof newChild === 'number') { - // Text nodes don't have keys, so we neither have to check the old nor - // new node for the key. If both are text nodes, they match. - var matchedFiber = existingChildren.get(newIdx) || null; - return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime); - } - - if (typeof newChild === 'object' && newChild !== null) { - switch (newChild.$$typeof) { - case REACT_ELEMENT_TYPE: - { - var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null; - if (newChild.type === REACT_FRAGMENT_TYPE) { - return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key); - } - return updateElement(returnFiber, _matchedFiber, newChild, expirationTime); - } - case REACT_PORTAL_TYPE: - { - var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null; - return updatePortal(returnFiber, _matchedFiber2, newChild, expirationTime); - } - } - - if (isArray$1(newChild) || getIteratorFn(newChild)) { - var _matchedFiber3 = existingChildren.get(newIdx) || null; - return updateFragment(returnFiber, _matchedFiber3, newChild, expirationTime, null); - } - - throwOnInvalidObjectType(returnFiber, newChild); - } - - { - if (typeof newChild === 'function') { - warnOnFunctionType(); - } - } - - return null; - } - - /** - * Warns if there is a duplicate or missing key - */ - function warnOnInvalidKey(child, knownKeys) { - { - if (typeof child !== 'object' || child === null) { - return knownKeys; - } - switch (child.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - warnForMissingKey(child); - var key = child.key; - if (typeof key !== 'string') { - break; - } - if (knownKeys === null) { - knownKeys = new Set(); - knownKeys.add(key); - break; - } - if (!knownKeys.has(key)) { - knownKeys.add(key); - break; - } - warning(false, 'Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.%s', key, getCurrentFiberStackAddendum$2()); - break; - default: - break; - } - } - return knownKeys; - } - - function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) { - // This algorithm can't optimize by searching from boths ends since we - // don't have backpointers on fibers. I'm trying to see how far we can get - // with that model. If it ends up not being worth the tradeoffs, we can - // add it later. - - // Even with a two ended optimization, we'd want to optimize for the case - // where there are few changes and brute force the comparison instead of - // going for the Map. It'd like to explore hitting that path first in - // forward-only mode and only go for the Map once we notice that we need - // lots of look ahead. This doesn't handle reversal as well as two ended - // search but that's unusual. Besides, for the two ended optimization to - // work on Iterables, we'd need to copy the whole set. - - // In this first iteration, we'll just live with hitting the bad case - // (adding everything to a Map) in for every insert/move. - - // If you change this code, also update reconcileChildrenIterator() which - // uses the same algorithm. - - { - // First, validate keys. - var knownKeys = null; - for (var i = 0; i < newChildren.length; i++) { - var child = newChildren[i]; - knownKeys = warnOnInvalidKey(child, knownKeys); - } - } - - var resultingFirstChild = null; - var previousNewFiber = null; - - var oldFiber = currentFirstChild; - var lastPlacedIndex = 0; - var newIdx = 0; - var nextOldFiber = null; - for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) { - if (oldFiber.index > newIdx) { - nextOldFiber = oldFiber; - oldFiber = null; - } else { - nextOldFiber = oldFiber.sibling; - } - var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime); - if (newFiber === null) { - // TODO: This breaks on empty slots like null children. That's - // unfortunate because it triggers the slow path all the time. We need - // a better way to communicate whether this was a miss or null, - // boolean, undefined, etc. - if (oldFiber === null) { - oldFiber = nextOldFiber; - } - break; - } - if (shouldTrackSideEffects) { - if (oldFiber && newFiber.alternate === null) { - // We matched the slot, but we didn't reuse the existing fiber, so we - // need to delete the existing child. - deleteChild(returnFiber, oldFiber); - } - } - lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx); - if (previousNewFiber === null) { - // TODO: Move out of the loop. This only happens for the first run. - resultingFirstChild = newFiber; - } else { - // TODO: Defer siblings if we're not at the right index for this slot. - // I.e. if we had null values before, then we want to defer this - // for each null value. However, we also don't want to call updateSlot - // with the previous one. - previousNewFiber.sibling = newFiber; - } - previousNewFiber = newFiber; - oldFiber = nextOldFiber; - } - - if (newIdx === newChildren.length) { - // We've reached the end of the new children. We can delete the rest. - deleteRemainingChildren(returnFiber, oldFiber); - return resultingFirstChild; - } - - if (oldFiber === null) { - // If we don't have any more existing children we can choose a fast path - // since the rest will all be insertions. - for (; newIdx < newChildren.length; newIdx++) { - var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime); - if (!_newFiber) { - continue; - } - lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx); - if (previousNewFiber === null) { - // TODO: Move out of the loop. This only happens for the first run. - resultingFirstChild = _newFiber; - } else { - previousNewFiber.sibling = _newFiber; - } - previousNewFiber = _newFiber; - } - return resultingFirstChild; - } - - // Add all children to a key map for quick lookups. - var existingChildren = mapRemainingChildren(returnFiber, oldFiber); - - // Keep scanning and use the map to restore deleted items as moves. - for (; newIdx < newChildren.length; newIdx++) { - var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime); - if (_newFiber2) { - if (shouldTrackSideEffects) { - if (_newFiber2.alternate !== null) { - // The new fiber is a work in progress, but if there exists a - // current, that means that we reused the fiber. We need to delete - // it from the child list so that we don't add it to the deletion - // list. - existingChildren['delete'](_newFiber2.key === null ? newIdx : _newFiber2.key); - } - } - lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx); - if (previousNewFiber === null) { - resultingFirstChild = _newFiber2; - } else { - previousNewFiber.sibling = _newFiber2; - } - previousNewFiber = _newFiber2; - } - } - - if (shouldTrackSideEffects) { - // Any existing children that weren't consumed above were deleted. We need - // to add them to the deletion list. - existingChildren.forEach(function (child) { - return deleteChild(returnFiber, child); - }); - } - - return resultingFirstChild; - } - - function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) { - // This is the same implementation as reconcileChildrenArray(), - // but using the iterator instead. - - var iteratorFn = getIteratorFn(newChildrenIterable); - !(typeof iteratorFn === 'function') ? invariant(false, 'An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.') : void 0; - - { - // Warn about using Maps as children - if (typeof newChildrenIterable.entries === 'function') { - var possibleMap = newChildrenIterable; - if (possibleMap.entries === iteratorFn) { - warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', getCurrentFiberStackAddendum$2()); - didWarnAboutMaps = true; - } - } - - // First, validate keys. - // We'll get a different iterator later for the main pass. - var _newChildren = iteratorFn.call(newChildrenIterable); - if (_newChildren) { - var knownKeys = null; - var _step = _newChildren.next(); - for (; !_step.done; _step = _newChildren.next()) { - var child = _step.value; - knownKeys = warnOnInvalidKey(child, knownKeys); - } - } - } - - var newChildren = iteratorFn.call(newChildrenIterable); - !(newChildren != null) ? invariant(false, 'An iterable object provided no iterator.') : void 0; - - var resultingFirstChild = null; - var previousNewFiber = null; - - var oldFiber = currentFirstChild; - var lastPlacedIndex = 0; - var newIdx = 0; - var nextOldFiber = null; - - var step = newChildren.next(); - for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) { - if (oldFiber.index > newIdx) { - nextOldFiber = oldFiber; - oldFiber = null; - } else { - nextOldFiber = oldFiber.sibling; - } - var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime); - if (newFiber === null) { - // TODO: This breaks on empty slots like null children. That's - // unfortunate because it triggers the slow path all the time. We need - // a better way to communicate whether this was a miss or null, - // boolean, undefined, etc. - if (!oldFiber) { - oldFiber = nextOldFiber; - } - break; - } - if (shouldTrackSideEffects) { - if (oldFiber && newFiber.alternate === null) { - // We matched the slot, but we didn't reuse the existing fiber, so we - // need to delete the existing child. - deleteChild(returnFiber, oldFiber); - } - } - lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx); - if (previousNewFiber === null) { - // TODO: Move out of the loop. This only happens for the first run. - resultingFirstChild = newFiber; - } else { - // TODO: Defer siblings if we're not at the right index for this slot. - // I.e. if we had null values before, then we want to defer this - // for each null value. However, we also don't want to call updateSlot - // with the previous one. - previousNewFiber.sibling = newFiber; - } - previousNewFiber = newFiber; - oldFiber = nextOldFiber; - } - - if (step.done) { - // We've reached the end of the new children. We can delete the rest. - deleteRemainingChildren(returnFiber, oldFiber); - return resultingFirstChild; - } - - if (oldFiber === null) { - // If we don't have any more existing children we can choose a fast path - // since the rest will all be insertions. - for (; !step.done; newIdx++, step = newChildren.next()) { - var _newFiber3 = createChild(returnFiber, step.value, expirationTime); - if (_newFiber3 === null) { - continue; - } - lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx); - if (previousNewFiber === null) { - // TODO: Move out of the loop. This only happens for the first run. - resultingFirstChild = _newFiber3; - } else { - previousNewFiber.sibling = _newFiber3; - } - previousNewFiber = _newFiber3; - } - return resultingFirstChild; - } - - // Add all children to a key map for quick lookups. - var existingChildren = mapRemainingChildren(returnFiber, oldFiber); - - // Keep scanning and use the map to restore deleted items as moves. - for (; !step.done; newIdx++, step = newChildren.next()) { - var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime); - if (_newFiber4 !== null) { - if (shouldTrackSideEffects) { - if (_newFiber4.alternate !== null) { - // The new fiber is a work in progress, but if there exists a - // current, that means that we reused the fiber. We need to delete - // it from the child list so that we don't add it to the deletion - // list. - existingChildren['delete'](_newFiber4.key === null ? newIdx : _newFiber4.key); - } - } - lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx); - if (previousNewFiber === null) { - resultingFirstChild = _newFiber4; - } else { - previousNewFiber.sibling = _newFiber4; - } - previousNewFiber = _newFiber4; - } - } - - if (shouldTrackSideEffects) { - // Any existing children that weren't consumed above were deleted. We need - // to add them to the deletion list. - existingChildren.forEach(function (child) { - return deleteChild(returnFiber, child); - }); - } - - return resultingFirstChild; - } - - function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) { - // There's no need to check for keys on text nodes since we don't have a - // way to define them. - if (currentFirstChild !== null && currentFirstChild.tag === HostText) { - // We already have an existing node so let's just update it and delete - // the rest. - deleteRemainingChildren(returnFiber, currentFirstChild.sibling); - var existing = useFiber(currentFirstChild, textContent, expirationTime); - existing['return'] = returnFiber; - return existing; - } - // The existing first child is not a text node so we need to create one - // and delete the existing ones. - deleteRemainingChildren(returnFiber, currentFirstChild); - var created = createFiberFromText(textContent, returnFiber.mode, expirationTime); - created['return'] = returnFiber; - return created; - } - - function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) { - var key = element.key; - var child = currentFirstChild; - while (child !== null) { - // TODO: If key === null and child.key === null, then this only applies to - // the first item in the list. - if (child.key === key) { - if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.type === element.type) { - deleteRemainingChildren(returnFiber, child.sibling); - var existing = useFiber(child, element.type === REACT_FRAGMENT_TYPE ? element.props.children : element.props, expirationTime); - existing.ref = coerceRef(returnFiber, child, element); - existing['return'] = returnFiber; - { - existing._debugSource = element._source; - existing._debugOwner = element._owner; - } - return existing; - } else { - deleteRemainingChildren(returnFiber, child); - break; - } - } else { - deleteChild(returnFiber, child); - } - child = child.sibling; - } - - if (element.type === REACT_FRAGMENT_TYPE) { - var created = createFiberFromFragment(element.props.children, returnFiber.mode, expirationTime, element.key); - created['return'] = returnFiber; - return created; - } else { - var _created4 = createFiberFromElement(element, returnFiber.mode, expirationTime); - _created4.ref = coerceRef(returnFiber, currentFirstChild, element); - _created4['return'] = returnFiber; - return _created4; - } - } - - function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) { - var key = portal.key; - var child = currentFirstChild; - while (child !== null) { - // TODO: If key === null and child.key === null, then this only applies to - // the first item in the list. - if (child.key === key) { - if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) { - deleteRemainingChildren(returnFiber, child.sibling); - var existing = useFiber(child, portal.children || [], expirationTime); - existing['return'] = returnFiber; - return existing; - } else { - deleteRemainingChildren(returnFiber, child); - break; - } - } else { - deleteChild(returnFiber, child); - } - child = child.sibling; - } - - var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime); - created['return'] = returnFiber; - return created; - } - - // This API will tag the children with the side-effect of the reconciliation - // itself. They will be added to the side-effect list as we pass through the - // children and the parent. - function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) { - // This function is not recursive. - // If the top level item is an array, we treat it as a set of children, - // not as a fragment. Nested arrays on the other hand will be treated as - // fragment nodes. Recursion happens at the normal flow. - - // Handle top level unkeyed fragments as if they were arrays. - // This leads to an ambiguity between <>{[...]} and <>.... - // We treat the ambiguous cases above the same. - if (typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null) { - newChild = newChild.props.children; - } - - // Handle object types - var isObject = typeof newChild === 'object' && newChild !== null; - - if (isObject) { - switch (newChild.$$typeof) { - case REACT_ELEMENT_TYPE: - return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime)); - case REACT_PORTAL_TYPE: - return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime)); - } - } - - if (typeof newChild === 'string' || typeof newChild === 'number') { - return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime)); - } - - if (isArray$1(newChild)) { - return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime); - } - - if (getIteratorFn(newChild)) { - return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime); - } - - if (isObject) { - throwOnInvalidObjectType(returnFiber, newChild); - } - - { - if (typeof newChild === 'function') { - warnOnFunctionType(); - } - } - if (typeof newChild === 'undefined') { - // If the new child is undefined, and the return fiber is a composite - // component, throw an error. If Fiber return types are disabled, - // we already threw above. - switch (returnFiber.tag) { - case ClassComponent: - { - { - var instance = returnFiber.stateNode; - if (instance.render._isMockFunction) { - // We allow auto-mocks to proceed as if they're returning null. - break; - } - } - } - // Intentionally fall through to the next case, which handles both - // functions and classes - // eslint-disable-next-lined no-fallthrough - case FunctionalComponent: - { - var Component = returnFiber.type; - invariant(false, '%s(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.', Component.displayName || Component.name || 'Component'); - } - } - } - - // Remaining cases are all treated as empty. - return deleteRemainingChildren(returnFiber, currentFirstChild); - } - - return reconcileChildFibers; -} - -var reconcileChildFibers = ChildReconciler(true); -var mountChildFibers = ChildReconciler(false); - -function cloneChildFibers(current, workInProgress) { - !(current === null || workInProgress.child === current.child) ? invariant(false, 'Resuming work not yet implemented.') : void 0; - - if (workInProgress.child === null) { - return; - } - - var currentChild = workInProgress.child; - var newChild = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime); - workInProgress.child = newChild; - - newChild['return'] = workInProgress; - while (currentChild.sibling !== null) { - currentChild = currentChild.sibling; - newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime); - newChild['return'] = workInProgress; - } - newChild.sibling = null; -} - -var didWarnAboutBadClass = void 0; -var didWarnAboutGetDerivedStateOnFunctionalComponent = void 0; -var didWarnAboutStatelessRefs = void 0; - -{ - didWarnAboutBadClass = {}; - didWarnAboutGetDerivedStateOnFunctionalComponent = {}; - didWarnAboutStatelessRefs = {}; -} - -var ReactFiberBeginWork = function (config, hostContext, legacyContext, newContext, hydrationContext, scheduleWork, computeExpirationForFiber) { - var shouldSetTextContent = config.shouldSetTextContent, - shouldDeprioritizeSubtree = config.shouldDeprioritizeSubtree; - var pushHostContext = hostContext.pushHostContext, - pushHostContainer = hostContext.pushHostContainer; - var pushProvider = newContext.pushProvider; - var getMaskedContext = legacyContext.getMaskedContext, - getUnmaskedContext = legacyContext.getUnmaskedContext, - hasLegacyContextChanged = legacyContext.hasContextChanged, - pushLegacyContextProvider = legacyContext.pushContextProvider, - pushTopLevelContextObject = legacyContext.pushTopLevelContextObject, - invalidateContextProvider = legacyContext.invalidateContextProvider; - var enterHydrationState = hydrationContext.enterHydrationState, - resetHydrationState = hydrationContext.resetHydrationState, - tryToClaimNextHydratableInstance = hydrationContext.tryToClaimNextHydratableInstance; - - var _ReactFiberClassCompo = ReactFiberClassComponent(legacyContext, scheduleWork, computeExpirationForFiber, memoizeProps, memoizeState), - adoptClassInstance = _ReactFiberClassCompo.adoptClassInstance, - callGetDerivedStateFromProps = _ReactFiberClassCompo.callGetDerivedStateFromProps, - constructClassInstance = _ReactFiberClassCompo.constructClassInstance, - mountClassInstance = _ReactFiberClassCompo.mountClassInstance, - resumeMountClassInstance = _ReactFiberClassCompo.resumeMountClassInstance, - updateClassInstance = _ReactFiberClassCompo.updateClassInstance; - - // TODO: Remove this and use reconcileChildrenAtExpirationTime directly. - - - function reconcileChildren(current, workInProgress, nextChildren) { - reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, workInProgress.expirationTime); - } - - function reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, renderExpirationTime) { - if (current === null) { - // If this is a fresh new component that hasn't been rendered yet, we - // won't update its child set by applying minimal side-effects. Instead, - // we will add them all to the child before it gets rendered. That means - // we can optimize this reconciliation pass by not tracking side-effects. - workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime); - } else { - // If the current child is the same as the work in progress, it means that - // we haven't yet started any work on these children. Therefore, we use - // the clone algorithm to create a copy of all the current children. - - // If we had any progressed work already, that is invalid at this point so - // let's throw it out. - workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderExpirationTime); - } - } - - function updateForwardRef(current, workInProgress) { - var render = workInProgress.type.render; - var nextChildren = render(workInProgress.pendingProps, workInProgress.ref); - reconcileChildren(current, workInProgress, nextChildren); - memoizeProps(workInProgress, nextChildren); - return workInProgress.child; - } - - function updateFragment(current, workInProgress) { - var nextChildren = workInProgress.pendingProps; - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else if (workInProgress.memoizedProps === nextChildren) { - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - reconcileChildren(current, workInProgress, nextChildren); - memoizeProps(workInProgress, nextChildren); - return workInProgress.child; - } - - function updateMode(current, workInProgress) { - var nextChildren = workInProgress.pendingProps.children; - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else if (nextChildren === null || workInProgress.memoizedProps === nextChildren) { - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - reconcileChildren(current, workInProgress, nextChildren); - memoizeProps(workInProgress, nextChildren); - return workInProgress.child; - } - - function markRef(current, workInProgress) { - var ref = workInProgress.ref; - if (current === null && ref !== null || current !== null && current.ref !== ref) { - // Schedule a Ref effect - workInProgress.effectTag |= Ref; - } - } - - function updateFunctionalComponent(current, workInProgress) { - var fn = workInProgress.type; - var nextProps = workInProgress.pendingProps; - - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else { - if (workInProgress.memoizedProps === nextProps) { - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - // TODO: consider bringing fn.shouldComponentUpdate() back. - // It used to be here. - } - - var unmaskedContext = getUnmaskedContext(workInProgress); - var context = getMaskedContext(workInProgress, unmaskedContext); - - var nextChildren = void 0; - - { - ReactCurrentOwner.current = workInProgress; - ReactDebugCurrentFiber.setCurrentPhase('render'); - nextChildren = fn(nextProps, context); - ReactDebugCurrentFiber.setCurrentPhase(null); - } - // React DevTools reads this flag. - workInProgress.effectTag |= PerformedWork; - reconcileChildren(current, workInProgress, nextChildren); - memoizeProps(workInProgress, nextProps); - return workInProgress.child; - } - - function updateClassComponent(current, workInProgress, renderExpirationTime) { - // Push context providers early to prevent context stack mismatches. - // During mounting we don't know the child context yet as the instance doesn't exist. - // We will invalidate the child context in finishClassComponent() right after rendering. - var hasContext = pushLegacyContextProvider(workInProgress); - var shouldUpdate = void 0; - if (current === null) { - if (workInProgress.stateNode === null) { - // In the initial pass we might need to construct the instance. - constructClassInstance(workInProgress, workInProgress.pendingProps); - mountClassInstance(workInProgress, renderExpirationTime); - - shouldUpdate = true; - } else { - // In a resume, we'll already have an instance we can reuse. - shouldUpdate = resumeMountClassInstance(workInProgress, renderExpirationTime); - } - } else { - shouldUpdate = updateClassInstance(current, workInProgress, renderExpirationTime); - } - - // We processed the update queue inside updateClassInstance. It may have - // included some errors that were dispatched during the commit phase. - // TODO: Refactor class components so this is less awkward. - var didCaptureError = false; - var updateQueue = workInProgress.updateQueue; - if (updateQueue !== null && updateQueue.capturedValues !== null) { - shouldUpdate = true; - didCaptureError = true; - } - return finishClassComponent(current, workInProgress, shouldUpdate, hasContext, didCaptureError, renderExpirationTime); - } - - function finishClassComponent(current, workInProgress, shouldUpdate, hasContext, didCaptureError, renderExpirationTime) { - // Refs should update even if shouldComponentUpdate returns false - markRef(current, workInProgress); - - if (!shouldUpdate && !didCaptureError) { - // Context providers should defer to sCU for rendering - if (hasContext) { - invalidateContextProvider(workInProgress, false); - } - - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - - var ctor = workInProgress.type; - var instance = workInProgress.stateNode; - - // Rerender - ReactCurrentOwner.current = workInProgress; - var nextChildren = void 0; - if (didCaptureError && (!enableGetDerivedStateFromCatch || typeof ctor.getDerivedStateFromCatch !== 'function')) { - // If we captured an error, but getDerivedStateFrom catch is not defined, - // unmount all the children. componentDidCatch will schedule an update to - // re-render a fallback. This is temporary until we migrate everyone to - // the new API. - // TODO: Warn in a future release. - nextChildren = null; - } else { - { - ReactDebugCurrentFiber.setCurrentPhase('render'); - nextChildren = instance.render(); - if (debugRenderPhaseSideEffects || debugRenderPhaseSideEffectsForStrictMode && workInProgress.mode & StrictMode) { - instance.render(); - } - ReactDebugCurrentFiber.setCurrentPhase(null); - } - } - - // React DevTools reads this flag. - workInProgress.effectTag |= PerformedWork; - if (didCaptureError) { - // If we're recovering from an error, reconcile twice: first to delete - // all the existing children. - reconcileChildrenAtExpirationTime(current, workInProgress, null, renderExpirationTime); - workInProgress.child = null; - // Now we can continue reconciling like normal. This has the effect of - // remounting all children regardless of whether their their - // identity matches. - } - reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, renderExpirationTime); - // Memoize props and state using the values we just used to render. - // TODO: Restructure so we never read values from the instance. - memoizeState(workInProgress, instance.state); - memoizeProps(workInProgress, instance.props); - - // The context might have changed so we need to recalculate it. - if (hasContext) { - invalidateContextProvider(workInProgress, true); - } - - return workInProgress.child; - } - - function pushHostRootContext(workInProgress) { - var root = workInProgress.stateNode; - if (root.pendingContext) { - pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context); - } else if (root.context) { - // Should always be set - pushTopLevelContextObject(workInProgress, root.context, false); - } - pushHostContainer(workInProgress, root.containerInfo); - } - - function updateHostRoot(current, workInProgress, renderExpirationTime) { - pushHostRootContext(workInProgress); - var updateQueue = workInProgress.updateQueue; - if (updateQueue !== null) { - var prevState = workInProgress.memoizedState; - var state = processUpdateQueue(current, workInProgress, updateQueue, null, null, renderExpirationTime); - memoizeState(workInProgress, state); - updateQueue = workInProgress.updateQueue; - - var element = void 0; - if (updateQueue !== null && updateQueue.capturedValues !== null) { - // There's an uncaught error. Unmount the whole root. - element = null; - } else if (prevState === state) { - // If the state is the same as before, that's a bailout because we had - // no work that expires at this time. - resetHydrationState(); - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } else { - element = state.element; - } - var root = workInProgress.stateNode; - if ((current === null || current.child === null) && root.hydrate && enterHydrationState(workInProgress)) { - // If we don't have any current children this might be the first pass. - // We always try to hydrate. If this isn't a hydration pass there won't - // be any children to hydrate which is effectively the same thing as - // not hydrating. - - // This is a bit of a hack. We track the host root as a placement to - // know that we're currently in a mounting state. That way isMounted - // works as expected. We must reset this before committing. - // TODO: Delete this when we delete isMounted and findDOMNode. - workInProgress.effectTag |= Placement; - - // Ensure that children mount into this root without tracking - // side-effects. This ensures that we don't store Placement effects on - // nodes that will be hydrated. - workInProgress.child = mountChildFibers(workInProgress, null, element, renderExpirationTime); - } else { - // Otherwise reset hydration state in case we aborted and resumed another - // root. - resetHydrationState(); - reconcileChildren(current, workInProgress, element); - } - memoizeState(workInProgress, state); - return workInProgress.child; - } - resetHydrationState(); - // If there is no update queue, that's a bailout because the root has no props. - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - - function updateHostComponent(current, workInProgress, renderExpirationTime) { - pushHostContext(workInProgress); - - if (current === null) { - tryToClaimNextHydratableInstance(workInProgress); - } - - var type = workInProgress.type; - var memoizedProps = workInProgress.memoizedProps; - var nextProps = workInProgress.pendingProps; - var prevProps = current !== null ? current.memoizedProps : null; - - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else if (memoizedProps === nextProps) { - var isHidden = workInProgress.mode & AsyncMode && shouldDeprioritizeSubtree(type, nextProps); - if (isHidden) { - // Before bailing out, make sure we've deprioritized a hidden component. - workInProgress.expirationTime = Never; - } - if (!isHidden || renderExpirationTime !== Never) { - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - // If we're rendering a hidden node at hidden priority, don't bailout. The - // parent is complete, but the children may not be. - } - - var nextChildren = nextProps.children; - var isDirectTextChild = shouldSetTextContent(type, nextProps); - - if (isDirectTextChild) { - // We special case a direct text child of a host node. This is a common - // case. We won't handle it as a reified child. We will instead handle - // this in the host environment that also have access to this prop. That - // avoids allocating another HostText fiber and traversing it. - nextChildren = null; - } else if (prevProps && shouldSetTextContent(type, prevProps)) { - // If we're switching from a direct text child to a normal child, or to - // empty, we need to schedule the text content to be reset. - workInProgress.effectTag |= ContentReset; - } - - markRef(current, workInProgress); - - // Check the host config to see if the children are offscreen/hidden. - if (renderExpirationTime !== Never && workInProgress.mode & AsyncMode && shouldDeprioritizeSubtree(type, nextProps)) { - // Down-prioritize the children. - workInProgress.expirationTime = Never; - // Bailout and come back to this fiber later. - workInProgress.memoizedProps = nextProps; - return null; - } - - reconcileChildren(current, workInProgress, nextChildren); - memoizeProps(workInProgress, nextProps); - return workInProgress.child; - } - - function updateHostText(current, workInProgress) { - if (current === null) { - tryToClaimNextHydratableInstance(workInProgress); - } - var nextProps = workInProgress.pendingProps; - memoizeProps(workInProgress, nextProps); - // Nothing to do here. This is terminal. We'll do the completion step - // immediately after. - return null; - } - - function mountIndeterminateComponent(current, workInProgress, renderExpirationTime) { - !(current === null) ? invariant(false, 'An indeterminate component should never have mounted. This error is likely caused by a bug in React. Please file an issue.') : void 0; - var fn = workInProgress.type; - var props = workInProgress.pendingProps; - var unmaskedContext = getUnmaskedContext(workInProgress); - var context = getMaskedContext(workInProgress, unmaskedContext); - - var value = void 0; - - { - if (fn.prototype && typeof fn.prototype.render === 'function') { - var componentName = getComponentName(workInProgress) || 'Unknown'; - - if (!didWarnAboutBadClass[componentName]) { - warning(false, "The <%s /> component appears to have a render method, but doesn't extend React.Component. " + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName); - didWarnAboutBadClass[componentName] = true; - } - } - ReactCurrentOwner.current = workInProgress; - value = fn(props, context); - } - // React DevTools reads this flag. - workInProgress.effectTag |= PerformedWork; - - if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) { - var Component = workInProgress.type; - - // Proceed under the assumption that this is a class instance - workInProgress.tag = ClassComponent; - - workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null; - - if (typeof Component.getDerivedStateFromProps === 'function') { - var partialState = callGetDerivedStateFromProps(workInProgress, value, props, workInProgress.memoizedState); - - if (partialState !== null && partialState !== undefined) { - workInProgress.memoizedState = _assign({}, workInProgress.memoizedState, partialState); - } - } - - // Push context providers early to prevent context stack mismatches. - // During mounting we don't know the child context yet as the instance doesn't exist. - // We will invalidate the child context in finishClassComponent() right after rendering. - var hasContext = pushLegacyContextProvider(workInProgress); - adoptClassInstance(workInProgress, value); - mountClassInstance(workInProgress, renderExpirationTime); - return finishClassComponent(current, workInProgress, true, hasContext, false, renderExpirationTime); - } else { - // Proceed under the assumption that this is a functional component - workInProgress.tag = FunctionalComponent; - { - var _Component = workInProgress.type; - - if (_Component) { - warning(!_Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', _Component.displayName || _Component.name || 'Component'); - } - if (workInProgress.ref !== null) { - var info = ''; - var ownerName = ReactDebugCurrentFiber.getCurrentFiberOwnerName(); - if (ownerName) { - info += '\n\nCheck the render method of `' + ownerName + '`.'; - } - - var warningKey = ownerName || workInProgress._debugID || ''; - var debugSource = workInProgress._debugSource; - if (debugSource) { - warningKey = debugSource.fileName + ':' + debugSource.lineNumber; - } - if (!didWarnAboutStatelessRefs[warningKey]) { - didWarnAboutStatelessRefs[warningKey] = true; - warning(false, 'Stateless function components cannot be given refs. ' + 'Attempts to access this ref will fail.%s%s', info, ReactDebugCurrentFiber.getCurrentFiberStackAddendum()); - } - } - - if (typeof fn.getDerivedStateFromProps === 'function') { - var _componentName = getComponentName(workInProgress) || 'Unknown'; - - if (!didWarnAboutGetDerivedStateOnFunctionalComponent[_componentName]) { - warning(false, '%s: Stateless functional components do not support getDerivedStateFromProps.', _componentName); - didWarnAboutGetDerivedStateOnFunctionalComponent[_componentName] = true; - } - } - } - reconcileChildren(current, workInProgress, value); - memoizeProps(workInProgress, props); - return workInProgress.child; - } - } - - function updateCallComponent(current, workInProgress, renderExpirationTime) { - var nextProps = workInProgress.pendingProps; - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else if (workInProgress.memoizedProps === nextProps) { - nextProps = workInProgress.memoizedProps; - // TODO: When bailing out, we might need to return the stateNode instead - // of the child. To check it for work. - // return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - - var nextChildren = nextProps.children; - - // The following is a fork of reconcileChildrenAtExpirationTime but using - // stateNode to store the child. - if (current === null) { - workInProgress.stateNode = mountChildFibers(workInProgress, workInProgress.stateNode, nextChildren, renderExpirationTime); - } else { - workInProgress.stateNode = reconcileChildFibers(workInProgress, current.stateNode, nextChildren, renderExpirationTime); - } - - memoizeProps(workInProgress, nextProps); - // This doesn't take arbitrary time so we could synchronously just begin - // eagerly do the work of workInProgress.child as an optimization. - return workInProgress.stateNode; - } - - function updatePortalComponent(current, workInProgress, renderExpirationTime) { - pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo); - var nextChildren = workInProgress.pendingProps; - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else if (workInProgress.memoizedProps === nextChildren) { - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - - if (current === null) { - // Portals are special because we don't append the children during mount - // but at commit. Therefore we need to track insertions which the normal - // flow doesn't do during mount. This doesn't happen at the root because - // the root always starts with a "current" with a null child. - // TODO: Consider unifying this with how the root works. - workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime); - memoizeProps(workInProgress, nextChildren); - } else { - reconcileChildren(current, workInProgress, nextChildren); - memoizeProps(workInProgress, nextChildren); - } - return workInProgress.child; - } - - function propagateContextChange(workInProgress, context, changedBits, renderExpirationTime) { - var fiber = workInProgress.child; - if (fiber !== null) { - // Set the return pointer of the child to the work-in-progress fiber. - fiber['return'] = workInProgress; - } - while (fiber !== null) { - var nextFiber = void 0; - // Visit this fiber. - switch (fiber.tag) { - case ContextConsumer: - // Check if the context matches. - var observedBits = fiber.stateNode | 0; - if (fiber.type === context && (observedBits & changedBits) !== 0) { - // Update the expiration time of all the ancestors, including - // the alternates. - var node = fiber; - while (node !== null) { - var alternate = node.alternate; - if (node.expirationTime === NoWork || node.expirationTime > renderExpirationTime) { - node.expirationTime = renderExpirationTime; - if (alternate !== null && (alternate.expirationTime === NoWork || alternate.expirationTime > renderExpirationTime)) { - alternate.expirationTime = renderExpirationTime; - } - } else if (alternate !== null && (alternate.expirationTime === NoWork || alternate.expirationTime > renderExpirationTime)) { - alternate.expirationTime = renderExpirationTime; - } else { - // Neither alternate was updated, which means the rest of the - // ancestor path already has sufficient priority. - break; - } - node = node['return']; - } - // Don't scan deeper than a matching consumer. When we render the - // consumer, we'll continue scanning from that point. This way the - // scanning work is time-sliced. - nextFiber = null; - } else { - // Traverse down. - nextFiber = fiber.child; - } - break; - case ContextProvider: - // Don't scan deeper if this is a matching provider - nextFiber = fiber.type === workInProgress.type ? null : fiber.child; - break; - default: - // Traverse down. - nextFiber = fiber.child; - break; - } - if (nextFiber !== null) { - // Set the return pointer of the child to the work-in-progress fiber. - nextFiber['return'] = fiber; - } else { - // No child. Traverse to next sibling. - nextFiber = fiber; - while (nextFiber !== null) { - if (nextFiber === workInProgress) { - // We're back to the root of this subtree. Exit. - nextFiber = null; - break; - } - var sibling = nextFiber.sibling; - if (sibling !== null) { - nextFiber = sibling; - break; - } - // No more siblings. Traverse up. - nextFiber = nextFiber['return']; - } - } - fiber = nextFiber; - } - } - - function updateContextProvider(current, workInProgress, renderExpirationTime) { - var providerType = workInProgress.type; - var context = providerType.context; - - var newProps = workInProgress.pendingProps; - var oldProps = workInProgress.memoizedProps; - - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else if (oldProps === newProps) { - workInProgress.stateNode = 0; - pushProvider(workInProgress); - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - - var newValue = newProps.value; - workInProgress.memoizedProps = newProps; - - var changedBits = void 0; - if (oldProps === null) { - // Initial render - changedBits = MAX_SIGNED_31_BIT_INT; - } else { - if (oldProps.value === newProps.value) { - // No change. Bailout early if children are the same. - if (oldProps.children === newProps.children) { - workInProgress.stateNode = 0; - pushProvider(workInProgress); - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - changedBits = 0; - } else { - var oldValue = oldProps.value; - // Use Object.is to compare the new context value to the old value. - // Inlined Object.is polyfill. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is - if (oldValue === newValue && (oldValue !== 0 || 1 / oldValue === 1 / newValue) || oldValue !== oldValue && newValue !== newValue // eslint-disable-line no-self-compare - ) { - // No change. Bailout early if children are the same. - if (oldProps.children === newProps.children) { - workInProgress.stateNode = 0; - pushProvider(workInProgress); - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - changedBits = 0; - } else { - changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT; - { - warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits); - } - changedBits |= 0; - - if (changedBits === 0) { - // No change. Bailout early if children are the same. - if (oldProps.children === newProps.children) { - workInProgress.stateNode = 0; - pushProvider(workInProgress); - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - } else { - propagateContextChange(workInProgress, context, changedBits, renderExpirationTime); - } - } - } - } - - workInProgress.stateNode = changedBits; - pushProvider(workInProgress); - - var newChildren = newProps.children; - reconcileChildren(current, workInProgress, newChildren); - return workInProgress.child; - } - - function updateContextConsumer(current, workInProgress, renderExpirationTime) { - var context = workInProgress.type; - var newProps = workInProgress.pendingProps; - var oldProps = workInProgress.memoizedProps; - - var newValue = context._currentValue; - var changedBits = context._changedBits; - - if (hasLegacyContextChanged()) { - // Normally we can bail out on props equality but if context has changed - // we don't do the bailout and we have to reuse existing props instead. - } else if (changedBits === 0 && oldProps === newProps) { - return bailoutOnAlreadyFinishedWork(current, workInProgress); - } - workInProgress.memoizedProps = newProps; - - var observedBits = newProps.unstable_observedBits; - if (observedBits === undefined || observedBits === null) { - // Subscribe to all changes by default - observedBits = MAX_SIGNED_31_BIT_INT; - } - // Store the observedBits on the fiber's stateNode for quick access. - workInProgress.stateNode = observedBits; - - if ((changedBits & observedBits) !== 0) { - // Context change propagation stops at matching consumers, for time- - // slicing. Continue the propagation here. - propagateContextChange(workInProgress, context, changedBits, renderExpirationTime); - } - // There is no bailout on `children` equality because we expect people - // to often pass a bound method as a child, but it may reference - // `this.state` or `this.props` (and thus needs to re-render on `setState`). - - var render = newProps.children; - - { - warning(typeof render === 'function', 'A context consumer was rendered with multiple children, or a child ' + "that isn't a function. A context consumer expects a single child " + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.'); - } - - var newChildren = render(newValue); - reconcileChildren(current, workInProgress, newChildren); - return workInProgress.child; - } - - /* - function reuseChildrenEffects(returnFiber : Fiber, firstChild : Fiber) { - let child = firstChild; - do { - // Ensure that the first and last effect of the parent corresponds - // to the children's first and last effect. - if (!returnFiber.firstEffect) { - returnFiber.firstEffect = child.firstEffect; - } - if (child.lastEffect) { - if (returnFiber.lastEffect) { - returnFiber.lastEffect.nextEffect = child.firstEffect; - } - returnFiber.lastEffect = child.lastEffect; - } - } while (child = child.sibling); - } - */ - - function bailoutOnAlreadyFinishedWork(current, workInProgress) { - cancelWorkTimer(workInProgress); - - // TODO: We should ideally be able to bail out early if the children have no - // more work to do. However, since we don't have a separation of this - // Fiber's priority and its children yet - we don't know without doing lots - // of the same work we do anyway. Once we have that separation we can just - // bail out here if the children has no more work at this priority level. - // if (workInProgress.priorityOfChildren <= priorityLevel) { - // // If there are side-effects in these children that have not yet been - // // committed we need to ensure that they get properly transferred up. - // if (current && current.child !== workInProgress.child) { - // reuseChildrenEffects(workInProgress, child); - // } - // return null; - // } - - cloneChildFibers(current, workInProgress); - return workInProgress.child; - } - - function bailoutOnLowPriority(current, workInProgress) { - cancelWorkTimer(workInProgress); - - // TODO: Handle HostComponent tags here as well and call pushHostContext()? - // See PR 8590 discussion for context - switch (workInProgress.tag) { - case HostRoot: - pushHostRootContext(workInProgress); - break; - case ClassComponent: - pushLegacyContextProvider(workInProgress); - break; - case HostPortal: - pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo); - break; - case ContextProvider: - pushProvider(workInProgress); - break; - } - // TODO: What if this is currently in progress? - // How can that happen? How is this not being cloned? - return null; - } - - // TODO: Delete memoizeProps/State and move to reconcile/bailout instead - function memoizeProps(workInProgress, nextProps) { - workInProgress.memoizedProps = nextProps; - } - - function memoizeState(workInProgress, nextState) { - workInProgress.memoizedState = nextState; - // Don't reset the updateQueue, in case there are pending updates. Resetting - // is handled by processUpdateQueue. - } - - function beginWork(current, workInProgress, renderExpirationTime) { - if (workInProgress.expirationTime === NoWork || workInProgress.expirationTime > renderExpirationTime) { - return bailoutOnLowPriority(current, workInProgress); - } - - switch (workInProgress.tag) { - case IndeterminateComponent: - return mountIndeterminateComponent(current, workInProgress, renderExpirationTime); - case FunctionalComponent: - return updateFunctionalComponent(current, workInProgress); - case ClassComponent: - return updateClassComponent(current, workInProgress, renderExpirationTime); - case HostRoot: - return updateHostRoot(current, workInProgress, renderExpirationTime); - case HostComponent: - return updateHostComponent(current, workInProgress, renderExpirationTime); - case HostText: - return updateHostText(current, workInProgress); - case CallHandlerPhase: - // This is a restart. Reset the tag to the initial phase. - workInProgress.tag = CallComponent; - // Intentionally fall through since this is now the same. - case CallComponent: - return updateCallComponent(current, workInProgress, renderExpirationTime); - case ReturnComponent: - // A return component is just a placeholder, we can just run through the - // next one immediately. - return null; - case HostPortal: - return updatePortalComponent(current, workInProgress, renderExpirationTime); - case ForwardRef: - return updateForwardRef(current, workInProgress); - case Fragment: - return updateFragment(current, workInProgress); - case Mode: - return updateMode(current, workInProgress); - case ContextProvider: - return updateContextProvider(current, workInProgress, renderExpirationTime); - case ContextConsumer: - return updateContextConsumer(current, workInProgress, renderExpirationTime); - default: - invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.'); - } - } - - return { - beginWork: beginWork - }; -}; - -var ReactFiberCompleteWork = function (config, hostContext, legacyContext, newContext, hydrationContext) { - var createInstance = config.createInstance, - createTextInstance = config.createTextInstance, - appendInitialChild = config.appendInitialChild, - finalizeInitialChildren = config.finalizeInitialChildren, - prepareUpdate = config.prepareUpdate, - mutation = config.mutation, - persistence = config.persistence; - var getRootHostContainer = hostContext.getRootHostContainer, - popHostContext = hostContext.popHostContext, - getHostContext = hostContext.getHostContext, - popHostContainer = hostContext.popHostContainer; - var popLegacyContextProvider = legacyContext.popContextProvider, - popTopLevelLegacyContextObject = legacyContext.popTopLevelContextObject; - var popProvider = newContext.popProvider; - var prepareToHydrateHostInstance = hydrationContext.prepareToHydrateHostInstance, - prepareToHydrateHostTextInstance = hydrationContext.prepareToHydrateHostTextInstance, - popHydrationState = hydrationContext.popHydrationState; - - - function markUpdate(workInProgress) { - // Tag the fiber with an update effect. This turns a Placement into - // an UpdateAndPlacement. - workInProgress.effectTag |= Update; - } - - function markRef(workInProgress) { - workInProgress.effectTag |= Ref; - } - - function appendAllReturns(returns, workInProgress) { - var node = workInProgress.stateNode; - if (node) { - node['return'] = workInProgress; - } - while (node !== null) { - if (node.tag === HostComponent || node.tag === HostText || node.tag === HostPortal) { - invariant(false, 'A call cannot have host component children.'); - } else if (node.tag === ReturnComponent) { - returns.push(node.pendingProps.value); - } else if (node.child !== null) { - node.child['return'] = node; - node = node.child; - continue; - } - while (node.sibling === null) { - if (node['return'] === null || node['return'] === workInProgress) { - return; - } - node = node['return']; - } - node.sibling['return'] = node['return']; - node = node.sibling; - } - } - - function moveCallToHandlerPhase(current, workInProgress, renderExpirationTime) { - var props = workInProgress.memoizedProps; - !props ? invariant(false, 'Should be resolved by now. This error is likely caused by a bug in React. Please file an issue.') : void 0; - - // First step of the call has completed. Now we need to do the second. - // TODO: It would be nice to have a multi stage call represented by a - // single component, or at least tail call optimize nested ones. Currently - // that requires additional fields that we don't want to add to the fiber. - // So this requires nested handlers. - // Note: This doesn't mutate the alternate node. I don't think it needs to - // since this stage is reset for every pass. - workInProgress.tag = CallHandlerPhase; - - // Build up the returns. - // TODO: Compare this to a generator or opaque helpers like Children. - var returns = []; - appendAllReturns(returns, workInProgress); - var fn = props.handler; - var childProps = props.props; - var nextChildren = fn(childProps, returns); - - var currentFirstChild = current !== null ? current.child : null; - workInProgress.child = reconcileChildFibers(workInProgress, currentFirstChild, nextChildren, renderExpirationTime); - return workInProgress.child; - } - - function appendAllChildren(parent, workInProgress) { - // We only have the top Fiber that was created but we need recurse down its - // children to find all the terminal nodes. - var node = workInProgress.child; - while (node !== null) { - if (node.tag === HostComponent || node.tag === HostText) { - appendInitialChild(parent, node.stateNode); - } else if (node.tag === HostPortal) { - // If we have a portal child, then we don't want to traverse - // down its children. Instead, we'll get insertions from each child in - // the portal directly. - } else if (node.child !== null) { - node.child['return'] = node; - node = node.child; - continue; - } - if (node === workInProgress) { - return; - } - while (node.sibling === null) { - if (node['return'] === null || node['return'] === workInProgress) { - return; - } - node = node['return']; - } - node.sibling['return'] = node['return']; - node = node.sibling; - } - } - - var updateHostContainer = void 0; - var updateHostComponent = void 0; - var updateHostText = void 0; - if (mutation) { - if (enableMutatingReconciler) { - // Mutation mode - updateHostContainer = function (workInProgress) { - // Noop - }; - updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance, currentHostContext) { - // TODO: Type this specific to this type of component. - workInProgress.updateQueue = updatePayload; - // If the update payload indicates that there is a change or if there - // is a new ref we mark this as an update. All the work is done in commitWork. - if (updatePayload) { - markUpdate(workInProgress); - } - }; - updateHostText = function (current, workInProgress, oldText, newText) { - // If the text differs, mark it as an update. All the work in done in commitWork. - if (oldText !== newText) { - markUpdate(workInProgress); - } - }; - } else { - invariant(false, 'Mutating reconciler is disabled.'); - } - } else if (persistence) { - if (enablePersistentReconciler) { - // Persistent host tree mode - var cloneInstance = persistence.cloneInstance, - createContainerChildSet = persistence.createContainerChildSet, - appendChildToContainerChildSet = persistence.appendChildToContainerChildSet, - finalizeContainerChildren = persistence.finalizeContainerChildren; - - // An unfortunate fork of appendAllChildren because we have two different parent types. - - var appendAllChildrenToContainer = function (containerChildSet, workInProgress) { - // We only have the top Fiber that was created but we need recurse down its - // children to find all the terminal nodes. - var node = workInProgress.child; - while (node !== null) { - if (node.tag === HostComponent || node.tag === HostText) { - appendChildToContainerChildSet(containerChildSet, node.stateNode); - } else if (node.tag === HostPortal) { - // If we have a portal child, then we don't want to traverse - // down its children. Instead, we'll get insertions from each child in - // the portal directly. - } else if (node.child !== null) { - node.child['return'] = node; - node = node.child; - continue; - } - if (node === workInProgress) { - return; - } - while (node.sibling === null) { - if (node['return'] === null || node['return'] === workInProgress) { - return; - } - node = node['return']; - } - node.sibling['return'] = node['return']; - node = node.sibling; - } - }; - updateHostContainer = function (workInProgress) { - var portalOrRoot = workInProgress.stateNode; - var childrenUnchanged = workInProgress.firstEffect === null; - if (childrenUnchanged) { - // No changes, just reuse the existing instance. - } else { - var container = portalOrRoot.containerInfo; - var newChildSet = createContainerChildSet(container); - // If children might have changed, we have to add them all to the set. - appendAllChildrenToContainer(newChildSet, workInProgress); - portalOrRoot.pendingChildren = newChildSet; - // Schedule an update on the container to swap out the container. - markUpdate(workInProgress); - finalizeContainerChildren(container, newChildSet); - } - }; - updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance, currentHostContext) { - // If there are no effects associated with this node, then none of our children had any updates. - // This guarantees that we can reuse all of them. - var childrenUnchanged = workInProgress.firstEffect === null; - var currentInstance = current.stateNode; - if (childrenUnchanged && updatePayload === null) { - // No changes, just reuse the existing instance. - // Note that this might release a previous clone. - workInProgress.stateNode = currentInstance; - } else { - var recyclableInstance = workInProgress.stateNode; - var newInstance = cloneInstance(currentInstance, updatePayload, type, oldProps, newProps, workInProgress, childrenUnchanged, recyclableInstance); - if (finalizeInitialChildren(newInstance, type, newProps, rootContainerInstance, currentHostContext)) { - markUpdate(workInProgress); - } - workInProgress.stateNode = newInstance; - if (childrenUnchanged) { - // If there are no other effects in this tree, we need to flag this node as having one. - // Even though we're not going to use it for anything. - // Otherwise parents won't know that there are new children to propagate upwards. - markUpdate(workInProgress); - } else { - // If children might have changed, we have to add them all to the set. - appendAllChildren(newInstance, workInProgress); - } - } - }; - updateHostText = function (current, workInProgress, oldText, newText) { - if (oldText !== newText) { - // If the text content differs, we'll create a new text instance for it. - var rootContainerInstance = getRootHostContainer(); - var currentHostContext = getHostContext(); - workInProgress.stateNode = createTextInstance(newText, rootContainerInstance, currentHostContext, workInProgress); - // We'll have to mark it as having an effect, even though we won't use the effect for anything. - // This lets the parents know that at least one of their children has changed. - markUpdate(workInProgress); - } - }; - } else { - invariant(false, 'Persistent reconciler is disabled.'); - } - } else { - if (enableNoopReconciler) { - // No host operations - updateHostContainer = function (workInProgress) { - // Noop - }; - updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance, currentHostContext) { - // Noop - }; - updateHostText = function (current, workInProgress, oldText, newText) { - // Noop - }; - } else { - invariant(false, 'Noop reconciler is disabled.'); - } - } - - function completeWork(current, workInProgress, renderExpirationTime) { - var newProps = workInProgress.pendingProps; - switch (workInProgress.tag) { - case FunctionalComponent: - return null; - case ClassComponent: - { - // We are leaving this subtree, so pop context if any. - popLegacyContextProvider(workInProgress); - - // If this component caught an error, schedule an error log effect. - var instance = workInProgress.stateNode; - var updateQueue = workInProgress.updateQueue; - if (updateQueue !== null && updateQueue.capturedValues !== null) { - workInProgress.effectTag &= ~DidCapture; - if (typeof instance.componentDidCatch === 'function') { - workInProgress.effectTag |= ErrLog; - } else { - // Normally we clear this in the commit phase, but since we did not - // schedule an effect, we need to reset it here. - updateQueue.capturedValues = null; - } - } - return null; - } - case HostRoot: - { - popHostContainer(workInProgress); - popTopLevelLegacyContextObject(workInProgress); - var fiberRoot = workInProgress.stateNode; - if (fiberRoot.pendingContext) { - fiberRoot.context = fiberRoot.pendingContext; - fiberRoot.pendingContext = null; - } - if (current === null || current.child === null) { - // If we hydrated, pop so that we can delete any remaining children - // that weren't hydrated. - popHydrationState(workInProgress); - // This resets the hacky state to fix isMounted before committing. - // TODO: Delete this when we delete isMounted and findDOMNode. - workInProgress.effectTag &= ~Placement; - } - updateHostContainer(workInProgress); - - var _updateQueue = workInProgress.updateQueue; - if (_updateQueue !== null && _updateQueue.capturedValues !== null) { - workInProgress.effectTag |= ErrLog; - } - return null; - } - case HostComponent: - { - popHostContext(workInProgress); - var rootContainerInstance = getRootHostContainer(); - var type = workInProgress.type; - if (current !== null && workInProgress.stateNode != null) { - // If we have an alternate, that means this is an update and we need to - // schedule a side-effect to do the updates. - var oldProps = current.memoizedProps; - // If we get updated because one of our children updated, we don't - // have newProps so we'll have to reuse them. - // TODO: Split the update API as separate for the props vs. children. - // Even better would be if children weren't special cased at all tho. - var _instance = workInProgress.stateNode; - var currentHostContext = getHostContext(); - // TODO: Experiencing an error where oldProps is null. Suggests a host - // component is hitting the resume path. Figure out why. Possibly - // related to `hidden`. - var updatePayload = prepareUpdate(_instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); - - updateHostComponent(current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance, currentHostContext); - - if (current.ref !== workInProgress.ref) { - markRef(workInProgress); - } - } else { - if (!newProps) { - !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0; - // This can happen when we abort work. - return null; - } - - var _currentHostContext = getHostContext(); - // TODO: Move createInstance to beginWork and keep it on a context - // "stack" as the parent. Then append children as we go in beginWork - // or completeWork depending on we want to add then top->down or - // bottom->up. Top->down is faster in IE11. - var wasHydrated = popHydrationState(workInProgress); - if (wasHydrated) { - // TODO: Move this and createInstance step into the beginPhase - // to consolidate. - if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, _currentHostContext)) { - // If changes to the hydrated node needs to be applied at the - // commit-phase we mark this as such. - markUpdate(workInProgress); - } - } else { - var _instance2 = createInstance(type, newProps, rootContainerInstance, _currentHostContext, workInProgress); - - appendAllChildren(_instance2, workInProgress); - - // Certain renderers require commit-time effects for initial mount. - // (eg DOM renderer supports auto-focus for certain elements). - // Make sure such renderers get scheduled for later work. - if (finalizeInitialChildren(_instance2, type, newProps, rootContainerInstance, _currentHostContext)) { - markUpdate(workInProgress); - } - workInProgress.stateNode = _instance2; - } - - if (workInProgress.ref !== null) { - // If there is a ref on a host node we need to schedule a callback - markRef(workInProgress); - } - } - return null; - } - case HostText: - { - var newText = newProps; - if (current && workInProgress.stateNode != null) { - var oldText = current.memoizedProps; - // If we have an alternate, that means this is an update and we need - // to schedule a side-effect to do the updates. - updateHostText(current, workInProgress, oldText, newText); - } else { - if (typeof newText !== 'string') { - !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0; - // This can happen when we abort work. - return null; - } - var _rootContainerInstance = getRootHostContainer(); - var _currentHostContext2 = getHostContext(); - var _wasHydrated = popHydrationState(workInProgress); - if (_wasHydrated) { - if (prepareToHydrateHostTextInstance(workInProgress)) { - markUpdate(workInProgress); - } - } else { - workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext2, workInProgress); - } - } - return null; - } - case CallComponent: - return moveCallToHandlerPhase(current, workInProgress, renderExpirationTime); - case CallHandlerPhase: - // Reset the tag to now be a first phase call. - workInProgress.tag = CallComponent; - return null; - case ReturnComponent: - // Does nothing. - return null; - case ForwardRef: - return null; - case Fragment: - return null; - case Mode: - return null; - case HostPortal: - popHostContainer(workInProgress); - updateHostContainer(workInProgress); - return null; - case ContextProvider: - // Pop provider fiber - popProvider(workInProgress); - return null; - case ContextConsumer: - return null; - // Error cases - case IndeterminateComponent: - invariant(false, 'An indeterminate component should have become determinate before completing. This error is likely caused by a bug in React. Please file an issue.'); - // eslint-disable-next-line no-fallthrough - default: - invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.'); - } - } - - return { - completeWork: completeWork - }; -}; - -function createCapturedValue(value, source) { - // If the value is an error, call this function immediately after it is thrown - // so the stack is accurate. - return { - value: value, - source: source, - stack: getStackAddendumByWorkInProgressFiber(source) - }; -} - -var ReactFiberUnwindWork = function (hostContext, legacyContext, newContext, scheduleWork, isAlreadyFailedLegacyErrorBoundary) { - var popHostContainer = hostContext.popHostContainer, - popHostContext = hostContext.popHostContext; - var popLegacyContextProvider = legacyContext.popContextProvider, - popTopLevelLegacyContextObject = legacyContext.popTopLevelContextObject; - var popProvider = newContext.popProvider; - - - function throwException(returnFiber, sourceFiber, rawValue) { - // The source fiber did not complete. - sourceFiber.effectTag |= Incomplete; - // Its effect list is no longer valid. - sourceFiber.firstEffect = sourceFiber.lastEffect = null; - - var value = createCapturedValue(rawValue, sourceFiber); - - var workInProgress = returnFiber; - do { - switch (workInProgress.tag) { - case HostRoot: - { - // Uncaught error - var errorInfo = value; - ensureUpdateQueues(workInProgress); - var updateQueue = workInProgress.updateQueue; - updateQueue.capturedValues = [errorInfo]; - workInProgress.effectTag |= ShouldCapture; - return; - } - case ClassComponent: - // Capture and retry - var ctor = workInProgress.type; - var _instance = workInProgress.stateNode; - if ((workInProgress.effectTag & DidCapture) === NoEffect && (typeof ctor.getDerivedStateFromCatch === 'function' && enableGetDerivedStateFromCatch || _instance !== null && typeof _instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(_instance))) { - ensureUpdateQueues(workInProgress); - var _updateQueue = workInProgress.updateQueue; - var capturedValues = _updateQueue.capturedValues; - if (capturedValues === null) { - _updateQueue.capturedValues = [value]; - } else { - capturedValues.push(value); - } - workInProgress.effectTag |= ShouldCapture; - return; - } - break; - default: - break; - } - workInProgress = workInProgress['return']; - } while (workInProgress !== null); - } - - function unwindWork(workInProgress) { - switch (workInProgress.tag) { - case ClassComponent: - { - popLegacyContextProvider(workInProgress); - var effectTag = workInProgress.effectTag; - if (effectTag & ShouldCapture) { - workInProgress.effectTag = effectTag & ~ShouldCapture | DidCapture; - return workInProgress; - } - return null; - } - case HostRoot: - { - popHostContainer(workInProgress); - popTopLevelLegacyContextObject(workInProgress); - var _effectTag = workInProgress.effectTag; - if (_effectTag & ShouldCapture) { - workInProgress.effectTag = _effectTag & ~ShouldCapture | DidCapture; - return workInProgress; - } - return null; - } - case HostComponent: - { - popHostContext(workInProgress); - return null; - } - case HostPortal: - popHostContainer(workInProgress); - return null; - case ContextProvider: - popProvider(workInProgress); - return null; - default: - return null; - } - } - - function unwindInterruptedWork(interruptedWork) { - switch (interruptedWork.tag) { - case ClassComponent: - { - popLegacyContextProvider(interruptedWork); - break; - } - case HostRoot: - { - popHostContainer(interruptedWork); - popTopLevelLegacyContextObject(interruptedWork); - break; - } - case HostComponent: - { - popHostContext(interruptedWork); - break; - } - case HostPortal: - popHostContainer(interruptedWork); - break; - case ContextProvider: - popProvider(interruptedWork); - break; - default: - break; - } - } - - return { - throwException: throwException, - unwindWork: unwindWork, - unwindInterruptedWork: unwindInterruptedWork - }; -}; - -// This module is forked in different environments. -// By default, return `true` to log errors to the console. -// Forks can return `false` if this isn't desirable. -function showErrorDialog(capturedError) { - return true; -} - -function logCapturedError(capturedError) { - var logError = showErrorDialog(capturedError); - - // Allow injected showErrorDialog() to prevent default console.error logging. - // This enables renderers like ReactNative to better manage redbox behavior. - if (logError === false) { - return; - } - - var error = capturedError.error; - var suppressLogging = error && error.suppressReactErrorLogging; - if (suppressLogging) { - return; - } - - { - var componentName = capturedError.componentName, - componentStack = capturedError.componentStack, - errorBoundaryName = capturedError.errorBoundaryName, - errorBoundaryFound = capturedError.errorBoundaryFound, - willRetry = capturedError.willRetry; - - - var componentNameMessage = componentName ? 'The above error occurred in the <' + componentName + '> component:' : 'The above error occurred in one of your React components:'; - - var errorBoundaryMessage = void 0; - // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow. - if (errorBoundaryFound && errorBoundaryName) { - if (willRetry) { - errorBoundaryMessage = 'React will try to recreate this component tree from scratch ' + ('using the error boundary you provided, ' + errorBoundaryName + '.'); - } else { - errorBoundaryMessage = 'This error was initially handled by the error boundary ' + errorBoundaryName + '.\n' + 'Recreating the tree from scratch failed so React will unmount the tree.'; - } - } else { - errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.'; - } - var combinedMessage = '' + componentNameMessage + componentStack + '\n\n' + ('' + errorBoundaryMessage); - - // In development, we provide our own message with just the component stack. - // We don't include the original error message and JS stack because the browser - // has already printed it. Even if the application swallows the error, it is still - // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils. - console.error(combinedMessage); - } -} - -var invokeGuardedCallback$3 = ReactErrorUtils.invokeGuardedCallback; -var hasCaughtError$1 = ReactErrorUtils.hasCaughtError; -var clearCaughtError$1 = ReactErrorUtils.clearCaughtError; - - -var didWarnAboutUndefinedSnapshotBeforeUpdate = null; -{ - didWarnAboutUndefinedSnapshotBeforeUpdate = new Set(); -} - -function logError(boundary, errorInfo) { - var source = errorInfo.source; - var stack = errorInfo.stack; - if (stack === null) { - stack = getStackAddendumByWorkInProgressFiber(source); - } - - var capturedError = { - componentName: source !== null ? getComponentName(source) : null, - componentStack: stack !== null ? stack : '', - error: errorInfo.value, - errorBoundary: null, - errorBoundaryName: null, - errorBoundaryFound: false, - willRetry: false - }; - - if (boundary !== null && boundary.tag === ClassComponent) { - capturedError.errorBoundary = boundary.stateNode; - capturedError.errorBoundaryName = getComponentName(boundary); - capturedError.errorBoundaryFound = true; - capturedError.willRetry = true; - } - - try { - logCapturedError(capturedError); - } catch (e) { - // Prevent cycle if logCapturedError() throws. - // A cycle may still occur if logCapturedError renders a component that throws. - var suppressLogging = e && e.suppressReactErrorLogging; - if (!suppressLogging) { - console.error(e); - } - } -} - -var ReactFiberCommitWork = function (config, captureError, scheduleWork, computeExpirationForFiber, markLegacyErrorBoundaryAsFailed, recalculateCurrentTime) { - var getPublicInstance = config.getPublicInstance, - mutation = config.mutation, - persistence = config.persistence; - - - var callComponentWillUnmountWithTimer = function (current, instance) { - startPhaseTimer(current, 'componentWillUnmount'); - instance.props = current.memoizedProps; - instance.state = current.memoizedState; - instance.componentWillUnmount(); - stopPhaseTimer(); - }; - - // Capture errors so they don't interrupt unmounting. - function safelyCallComponentWillUnmount(current, instance) { - { - invokeGuardedCallback$3(null, callComponentWillUnmountWithTimer, null, current, instance); - if (hasCaughtError$1()) { - var unmountError = clearCaughtError$1(); - captureError(current, unmountError); - } - } - } - - function safelyDetachRef(current) { - var ref = current.ref; - if (ref !== null) { - if (typeof ref === 'function') { - { - invokeGuardedCallback$3(null, ref, null, null); - if (hasCaughtError$1()) { - var refError = clearCaughtError$1(); - captureError(current, refError); - } - } - } else { - ref.current = null; - } - } - } - - function commitBeforeMutationLifeCycles(current, finishedWork) { - switch (finishedWork.tag) { - case ClassComponent: - { - if (finishedWork.effectTag & Snapshot) { - if (current !== null) { - var prevProps = current.memoizedProps; - var prevState = current.memoizedState; - startPhaseTimer(finishedWork, 'getSnapshotBeforeUpdate'); - var _instance = finishedWork.stateNode; - _instance.props = finishedWork.memoizedProps; - _instance.state = finishedWork.memoizedState; - var snapshot = _instance.getSnapshotBeforeUpdate(prevProps, prevState); - { - var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate; - if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) { - didWarnSet.add(finishedWork.type); - warning(false, '%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork)); - } - } - _instance.__reactInternalSnapshotBeforeUpdate = snapshot; - stopPhaseTimer(); - } - } - return; - } - case HostRoot: - case HostComponent: - case HostText: - case HostPortal: - // Nothing to do for these component types - return; - default: - { - invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.'); - } - } - } - - function commitLifeCycles(finishedRoot, current, finishedWork, currentTime, committedExpirationTime) { - switch (finishedWork.tag) { - case ClassComponent: - { - var _instance2 = finishedWork.stateNode; - if (finishedWork.effectTag & Update) { - if (current === null) { - startPhaseTimer(finishedWork, 'componentDidMount'); - _instance2.props = finishedWork.memoizedProps; - _instance2.state = finishedWork.memoizedState; - _instance2.componentDidMount(); - stopPhaseTimer(); - } else { - var prevProps = current.memoizedProps; - var prevState = current.memoizedState; - startPhaseTimer(finishedWork, 'componentDidUpdate'); - _instance2.props = finishedWork.memoizedProps; - _instance2.state = finishedWork.memoizedState; - _instance2.componentDidUpdate(prevProps, prevState, _instance2.__reactInternalSnapshotBeforeUpdate); - stopPhaseTimer(); - } - } - var updateQueue = finishedWork.updateQueue; - if (updateQueue !== null) { - commitCallbacks(updateQueue, _instance2); - } - return; - } - case HostRoot: - { - var _updateQueue = finishedWork.updateQueue; - if (_updateQueue !== null) { - var _instance3 = null; - if (finishedWork.child !== null) { - switch (finishedWork.child.tag) { - case HostComponent: - _instance3 = getPublicInstance(finishedWork.child.stateNode); - break; - case ClassComponent: - _instance3 = finishedWork.child.stateNode; - break; - } - } - commitCallbacks(_updateQueue, _instance3); - } - return; - } - case HostComponent: - { - var _instance4 = finishedWork.stateNode; - - // Renderers may schedule work to be done after host components are mounted - // (eg DOM renderer may schedule auto-focus for inputs and form controls). - // These effects should only be committed when components are first mounted, - // aka when there is no current/alternate. - if (current === null && finishedWork.effectTag & Update) { - var type = finishedWork.type; - var props = finishedWork.memoizedProps; - commitMount(_instance4, type, props, finishedWork); - } - - return; - } - case HostText: - { - // We have no life-cycles associated with text. - return; - } - case HostPortal: - { - // We have no life-cycles associated with portals. - return; - } - default: - { - invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.'); - } - } - } - - function commitErrorLogging(finishedWork, onUncaughtError) { - switch (finishedWork.tag) { - case ClassComponent: - { - var ctor = finishedWork.type; - var _instance5 = finishedWork.stateNode; - var updateQueue = finishedWork.updateQueue; - !(updateQueue !== null && updateQueue.capturedValues !== null) ? invariant(false, 'An error logging effect should not have been scheduled if no errors were captured. This error is likely caused by a bug in React. Please file an issue.') : void 0; - var capturedErrors = updateQueue.capturedValues; - updateQueue.capturedValues = null; - - if (typeof ctor.getDerivedStateFromCatch !== 'function') { - // To preserve the preexisting retry behavior of error boundaries, - // we keep track of which ones already failed during this batch. - // This gets reset before we yield back to the browser. - // TODO: Warn in strict mode if getDerivedStateFromCatch is - // not defined. - markLegacyErrorBoundaryAsFailed(_instance5); - } - - _instance5.props = finishedWork.memoizedProps; - _instance5.state = finishedWork.memoizedState; - for (var i = 0; i < capturedErrors.length; i++) { - var errorInfo = capturedErrors[i]; - var _error = errorInfo.value; - var stack = errorInfo.stack; - logError(finishedWork, errorInfo); - _instance5.componentDidCatch(_error, { - componentStack: stack !== null ? stack : '' - }); - } - } - break; - case HostRoot: - { - var _updateQueue2 = finishedWork.updateQueue; - !(_updateQueue2 !== null && _updateQueue2.capturedValues !== null) ? invariant(false, 'An error logging effect should not have been scheduled if no errors were captured. This error is likely caused by a bug in React. Please file an issue.') : void 0; - var _capturedErrors = _updateQueue2.capturedValues; - _updateQueue2.capturedValues = null; - for (var _i = 0; _i < _capturedErrors.length; _i++) { - var _errorInfo = _capturedErrors[_i]; - logError(finishedWork, _errorInfo); - onUncaughtError(_errorInfo.value); - } - break; - } - default: - invariant(false, 'This unit of work tag cannot capture errors. This error is likely caused by a bug in React. Please file an issue.'); - } - } - - function commitAttachRef(finishedWork) { - var ref = finishedWork.ref; - if (ref !== null) { - var _instance6 = finishedWork.stateNode; - var instanceToUse = void 0; - switch (finishedWork.tag) { - case HostComponent: - instanceToUse = getPublicInstance(_instance6); - break; - default: - instanceToUse = _instance6; - } - if (typeof ref === 'function') { - ref(instanceToUse); - } else { - { - if (!ref.hasOwnProperty('current')) { - warning(false, 'Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().%s', getComponentName(finishedWork), getStackAddendumByWorkInProgressFiber(finishedWork)); - } - } - - ref.current = instanceToUse; - } - } - } - - function commitDetachRef(current) { - var currentRef = current.ref; - if (currentRef !== null) { - if (typeof currentRef === 'function') { - currentRef(null); - } else { - currentRef.current = null; - } - } - } - - // User-originating errors (lifecycles and refs) should not interrupt - // deletion, so don't let them throw. Host-originating errors should - // interrupt deletion, so it's okay - function commitUnmount(current) { - if (typeof onCommitUnmount === 'function') { - onCommitUnmount(current); - } - - switch (current.tag) { - case ClassComponent: - { - safelyDetachRef(current); - var _instance7 = current.stateNode; - if (typeof _instance7.componentWillUnmount === 'function') { - safelyCallComponentWillUnmount(current, _instance7); - } - return; - } - case HostComponent: - { - safelyDetachRef(current); - return; - } - case CallComponent: - { - commitNestedUnmounts(current.stateNode); - return; - } - case HostPortal: - { - // TODO: this is recursive. - // We are also not using this parent because - // the portal will get pushed immediately. - if (enableMutatingReconciler && mutation) { - unmountHostComponents(current); - } else if (enablePersistentReconciler && persistence) { - emptyPortalContainer(current); - } - return; - } - } - } - - function commitNestedUnmounts(root) { - // While we're inside a removed host node we don't want to call - // removeChild on the inner nodes because they're removed by the top - // call anyway. We also want to call componentWillUnmount on all - // composites before this host node is removed from the tree. Therefore - var node = root; - while (true) { - commitUnmount(node); - // Visit children because they may contain more composite or host nodes. - // Skip portals because commitUnmount() currently visits them recursively. - if (node.child !== null && ( - // If we use mutation we drill down into portals using commitUnmount above. - // If we don't use mutation we drill down into portals here instead. - !mutation || node.tag !== HostPortal)) { - node.child['return'] = node; - node = node.child; - continue; - } - if (node === root) { - return; - } - while (node.sibling === null) { - if (node['return'] === null || node['return'] === root) { - return; - } - node = node['return']; - } - node.sibling['return'] = node['return']; - node = node.sibling; - } - } - - function detachFiber(current) { - // Cut off the return pointers to disconnect it from the tree. Ideally, we - // should clear the child pointer of the parent alternate to let this - // get GC:ed but we don't know which for sure which parent is the current - // one so we'll settle for GC:ing the subtree of this child. This child - // itself will be GC:ed when the parent updates the next time. - current['return'] = null; - current.child = null; - if (current.alternate) { - current.alternate.child = null; - current.alternate['return'] = null; - } - } - - var emptyPortalContainer = void 0; - - if (!mutation) { - var commitContainer = void 0; - if (persistence) { - var replaceContainerChildren = persistence.replaceContainerChildren, - createContainerChildSet = persistence.createContainerChildSet; - - emptyPortalContainer = function (current) { - var portal = current.stateNode; - var containerInfo = portal.containerInfo; - - var emptyChildSet = createContainerChildSet(containerInfo); - replaceContainerChildren(containerInfo, emptyChildSet); - }; - commitContainer = function (finishedWork) { - switch (finishedWork.tag) { - case ClassComponent: - { - return; - } - case HostComponent: - { - return; - } - case HostText: - { - return; - } - case HostRoot: - case HostPortal: - { - var portalOrRoot = finishedWork.stateNode; - var containerInfo = portalOrRoot.containerInfo, - _pendingChildren = portalOrRoot.pendingChildren; - - replaceContainerChildren(containerInfo, _pendingChildren); - return; - } - default: - { - invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.'); - } - } - }; - } else { - commitContainer = function (finishedWork) { - // Noop - }; - } - if (enablePersistentReconciler || enableNoopReconciler) { - return { - commitResetTextContent: function (finishedWork) {}, - commitPlacement: function (finishedWork) {}, - commitDeletion: function (current) { - // Detach refs and call componentWillUnmount() on the whole subtree. - commitNestedUnmounts(current); - detachFiber(current); - }, - commitWork: function (current, finishedWork) { - commitContainer(finishedWork); - }, - - commitLifeCycles: commitLifeCycles, - commitBeforeMutationLifeCycles: commitBeforeMutationLifeCycles, - commitErrorLogging: commitErrorLogging, - commitAttachRef: commitAttachRef, - commitDetachRef: commitDetachRef - }; - } else if (persistence) { - invariant(false, 'Persistent reconciler is disabled.'); - } else { - invariant(false, 'Noop reconciler is disabled.'); - } - } - var commitMount = mutation.commitMount, - commitUpdate = mutation.commitUpdate, - resetTextContent = mutation.resetTextContent, - commitTextUpdate = mutation.commitTextUpdate, - appendChild = mutation.appendChild, - appendChildToContainer = mutation.appendChildToContainer, - insertBefore = mutation.insertBefore, - insertInContainerBefore = mutation.insertInContainerBefore, - removeChild = mutation.removeChild, - removeChildFromContainer = mutation.removeChildFromContainer; - - - function getHostParentFiber(fiber) { - var parent = fiber['return']; - while (parent !== null) { - if (isHostParent(parent)) { - return parent; - } - parent = parent['return']; - } - invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.'); - } - - function isHostParent(fiber) { - return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal; - } - - function getHostSibling(fiber) { - // We're going to search forward into the tree until we find a sibling host - // node. Unfortunately, if multiple insertions are done in a row we have to - // search past them. This leads to exponential search for the next sibling. - var node = fiber; - siblings: while (true) { - // If we didn't find anything, let's try the next sibling. - while (node.sibling === null) { - if (node['return'] === null || isHostParent(node['return'])) { - // If we pop out of the root or hit the parent the fiber we are the - // last sibling. - return null; - } - node = node['return']; - } - node.sibling['return'] = node['return']; - node = node.sibling; - while (node.tag !== HostComponent && node.tag !== HostText) { - // If it is not host node and, we might have a host node inside it. - // Try to search down until we find one. - if (node.effectTag & Placement) { - // If we don't have a child, try the siblings instead. - continue siblings; - } - // If we don't have a child, try the siblings instead. - // We also skip portals because they are not part of this host tree. - if (node.child === null || node.tag === HostPortal) { - continue siblings; - } else { - node.child['return'] = node; - node = node.child; - } - } - // Check if this host node is stable or about to be placed. - if (!(node.effectTag & Placement)) { - // Found it! - return node.stateNode; - } - } - } - - function commitPlacement(finishedWork) { - // Recursively insert all host nodes into the parent. - var parentFiber = getHostParentFiber(finishedWork); - var parent = void 0; - var isContainer = void 0; - switch (parentFiber.tag) { - case HostComponent: - parent = parentFiber.stateNode; - isContainer = false; - break; - case HostRoot: - parent = parentFiber.stateNode.containerInfo; - isContainer = true; - break; - case HostPortal: - parent = parentFiber.stateNode.containerInfo; - isContainer = true; - break; - default: - invariant(false, 'Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.'); - } - if (parentFiber.effectTag & ContentReset) { - // Reset the text content of the parent before doing any insertions - resetTextContent(parent); - // Clear ContentReset from the effect tag - parentFiber.effectTag &= ~ContentReset; - } - - var before = getHostSibling(finishedWork); - // We only have the top Fiber that was inserted but we need recurse down its - // children to find all the terminal nodes. - var node = finishedWork; - while (true) { - if (node.tag === HostComponent || node.tag === HostText) { - if (before) { - if (isContainer) { - insertInContainerBefore(parent, node.stateNode, before); - } else { - insertBefore(parent, node.stateNode, before); - } - } else { - if (isContainer) { - appendChildToContainer(parent, node.stateNode); - } else { - appendChild(parent, node.stateNode); - } - } - } else if (node.tag === HostPortal) { - // If the insertion itself is a portal, then we don't want to traverse - // down its children. Instead, we'll get insertions from each child in - // the portal directly. - } else if (node.child !== null) { - node.child['return'] = node; - node = node.child; - continue; - } - if (node === finishedWork) { - return; - } - while (node.sibling === null) { - if (node['return'] === null || node['return'] === finishedWork) { - return; - } - node = node['return']; - } - node.sibling['return'] = node['return']; - node = node.sibling; - } - } - - function unmountHostComponents(current) { - // We only have the top Fiber that was inserted but we need recurse down its - var node = current; - - // Each iteration, currentParent is populated with node's host parent if not - // currentParentIsValid. - var currentParentIsValid = false; - var currentParent = void 0; - var currentParentIsContainer = void 0; - - while (true) { - if (!currentParentIsValid) { - var parent = node['return']; - findParent: while (true) { - !(parent !== null) ? invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.') : void 0; - switch (parent.tag) { - case HostComponent: - currentParent = parent.stateNode; - currentParentIsContainer = false; - break findParent; - case HostRoot: - currentParent = parent.stateNode.containerInfo; - currentParentIsContainer = true; - break findParent; - case HostPortal: - currentParent = parent.stateNode.containerInfo; - currentParentIsContainer = true; - break findParent; - } - parent = parent['return']; - } - currentParentIsValid = true; - } - - if (node.tag === HostComponent || node.tag === HostText) { - commitNestedUnmounts(node); - // After all the children have unmounted, it is now safe to remove the - // node from the tree. - if (currentParentIsContainer) { - removeChildFromContainer(currentParent, node.stateNode); - } else { - removeChild(currentParent, node.stateNode); - } - // Don't visit children because we already visited them. - } else if (node.tag === HostPortal) { - // When we go into a portal, it becomes the parent to remove from. - // We will reassign it back when we pop the portal on the way up. - currentParent = node.stateNode.containerInfo; - // Visit children because portals might contain host components. - if (node.child !== null) { - node.child['return'] = node; - node = node.child; - continue; - } - } else { - commitUnmount(node); - // Visit children because we may find more host components below. - if (node.child !== null) { - node.child['return'] = node; - node = node.child; - continue; - } - } - if (node === current) { - return; - } - while (node.sibling === null) { - if (node['return'] === null || node['return'] === current) { - return; - } - node = node['return']; - if (node.tag === HostPortal) { - // When we go out of the portal, we need to restore the parent. - // Since we don't keep a stack of them, we will search for it. - currentParentIsValid = false; - } - } - node.sibling['return'] = node['return']; - node = node.sibling; - } - } - - function commitDeletion(current) { - // Recursively delete all host nodes from the parent. - // Detach refs and call componentWillUnmount() on the whole subtree. - unmountHostComponents(current); - detachFiber(current); - } - - function commitWork(current, finishedWork) { - switch (finishedWork.tag) { - case ClassComponent: - { - return; - } - case HostComponent: - { - var _instance8 = finishedWork.stateNode; - if (_instance8 != null) { - // Commit the work prepared earlier. - var newProps = finishedWork.memoizedProps; - // For hydration we reuse the update path but we treat the oldProps - // as the newProps. The updatePayload will contain the real change in - // this case. - var oldProps = current !== null ? current.memoizedProps : newProps; - var type = finishedWork.type; - // TODO: Type the updateQueue to be specific to host components. - var updatePayload = finishedWork.updateQueue; - finishedWork.updateQueue = null; - if (updatePayload !== null) { - commitUpdate(_instance8, updatePayload, type, oldProps, newProps, finishedWork); - } - } - return; - } - case HostText: - { - !(finishedWork.stateNode !== null) ? invariant(false, 'This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.') : void 0; - var textInstance = finishedWork.stateNode; - var newText = finishedWork.memoizedProps; - // For hydration we reuse the update path but we treat the oldProps - // as the newProps. The updatePayload will contain the real change in - // this case. - var oldText = current !== null ? current.memoizedProps : newText; - commitTextUpdate(textInstance, oldText, newText); - return; - } - case HostRoot: - { - return; - } - default: - { - invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.'); - } - } - } - - function commitResetTextContent(current) { - resetTextContent(current.stateNode); - } - - if (enableMutatingReconciler) { - return { - commitBeforeMutationLifeCycles: commitBeforeMutationLifeCycles, - commitResetTextContent: commitResetTextContent, - commitPlacement: commitPlacement, - commitDeletion: commitDeletion, - commitWork: commitWork, - commitLifeCycles: commitLifeCycles, - commitErrorLogging: commitErrorLogging, - commitAttachRef: commitAttachRef, - commitDetachRef: commitDetachRef - }; - } else { - invariant(false, 'Mutating reconciler is disabled.'); - } -}; - -var NO_CONTEXT = {}; - -var ReactFiberHostContext = function (config, stack) { - var getChildHostContext = config.getChildHostContext, - getRootHostContext = config.getRootHostContext; - var createCursor = stack.createCursor, - push = stack.push, - pop = stack.pop; - - - var contextStackCursor = createCursor(NO_CONTEXT); - var contextFiberStackCursor = createCursor(NO_CONTEXT); - var rootInstanceStackCursor = createCursor(NO_CONTEXT); - - function requiredContext(c) { - !(c !== NO_CONTEXT) ? invariant(false, 'Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.') : void 0; - return c; - } - - function getRootHostContainer() { - var rootInstance = requiredContext(rootInstanceStackCursor.current); - return rootInstance; - } - - function pushHostContainer(fiber, nextRootInstance) { - // Push current root instance onto the stack; - // This allows us to reset root when portals are popped. - push(rootInstanceStackCursor, nextRootInstance, fiber); - - var nextRootContext = getRootHostContext(nextRootInstance); - - // Track the context and the Fiber that provided it. - // This enables us to pop only Fibers that provide unique contexts. - push(contextFiberStackCursor, fiber, fiber); - push(contextStackCursor, nextRootContext, fiber); - } - - function popHostContainer(fiber) { - pop(contextStackCursor, fiber); - pop(contextFiberStackCursor, fiber); - pop(rootInstanceStackCursor, fiber); - } - - function getHostContext() { - var context = requiredContext(contextStackCursor.current); - return context; - } - - function pushHostContext(fiber) { - var rootInstance = requiredContext(rootInstanceStackCursor.current); - var context = requiredContext(contextStackCursor.current); - var nextContext = getChildHostContext(context, fiber.type, rootInstance); - - // Don't push this Fiber's context unless it's unique. - if (context === nextContext) { - return; - } - - // Track the context and the Fiber that provided it. - // This enables us to pop only Fibers that provide unique contexts. - push(contextFiberStackCursor, fiber, fiber); - push(contextStackCursor, nextContext, fiber); - } - - function popHostContext(fiber) { - // Do not pop unless this Fiber provided the current context. - // pushHostContext() only pushes Fibers that provide unique contexts. - if (contextFiberStackCursor.current !== fiber) { - return; - } - - pop(contextStackCursor, fiber); - pop(contextFiberStackCursor, fiber); - } - - return { - getHostContext: getHostContext, - getRootHostContainer: getRootHostContainer, - popHostContainer: popHostContainer, - popHostContext: popHostContext, - pushHostContainer: pushHostContainer, - pushHostContext: pushHostContext - }; -}; - -var ReactFiberHydrationContext = function (config) { - var shouldSetTextContent = config.shouldSetTextContent, - hydration = config.hydration; - - // If this doesn't have hydration mode. - - if (!hydration) { - return { - enterHydrationState: function () { - return false; - }, - resetHydrationState: function () {}, - tryToClaimNextHydratableInstance: function () {}, - prepareToHydrateHostInstance: function () { - invariant(false, 'Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.'); - }, - prepareToHydrateHostTextInstance: function () { - invariant(false, 'Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.'); - }, - popHydrationState: function (fiber) { - return false; - } - }; - } - - var canHydrateInstance = hydration.canHydrateInstance, - canHydrateTextInstance = hydration.canHydrateTextInstance, - getNextHydratableSibling = hydration.getNextHydratableSibling, - getFirstHydratableChild = hydration.getFirstHydratableChild, - hydrateInstance = hydration.hydrateInstance, - hydrateTextInstance = hydration.hydrateTextInstance, - didNotMatchHydratedContainerTextInstance = hydration.didNotMatchHydratedContainerTextInstance, - didNotMatchHydratedTextInstance = hydration.didNotMatchHydratedTextInstance, - didNotHydrateContainerInstance = hydration.didNotHydrateContainerInstance, - didNotHydrateInstance = hydration.didNotHydrateInstance, - didNotFindHydratableContainerInstance = hydration.didNotFindHydratableContainerInstance, - didNotFindHydratableContainerTextInstance = hydration.didNotFindHydratableContainerTextInstance, - didNotFindHydratableInstance = hydration.didNotFindHydratableInstance, - didNotFindHydratableTextInstance = hydration.didNotFindHydratableTextInstance; - - // The deepest Fiber on the stack involved in a hydration context. - // This may have been an insertion or a hydration. - - var hydrationParentFiber = null; - var nextHydratableInstance = null; - var isHydrating = false; - - function enterHydrationState(fiber) { - var parentInstance = fiber.stateNode.containerInfo; - nextHydratableInstance = getFirstHydratableChild(parentInstance); - hydrationParentFiber = fiber; - isHydrating = true; - return true; - } - - function deleteHydratableInstance(returnFiber, instance) { - { - switch (returnFiber.tag) { - case HostRoot: - didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance); - break; - case HostComponent: - didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance); - break; - } - } - - var childToDelete = createFiberFromHostInstanceForDeletion(); - childToDelete.stateNode = instance; - childToDelete['return'] = returnFiber; - childToDelete.effectTag = Deletion; - - // This might seem like it belongs on progressedFirstDeletion. However, - // these children are not part of the reconciliation list of children. - // Even if we abort and rereconcile the children, that will try to hydrate - // again and the nodes are still in the host tree so these will be - // recreated. - if (returnFiber.lastEffect !== null) { - returnFiber.lastEffect.nextEffect = childToDelete; - returnFiber.lastEffect = childToDelete; - } else { - returnFiber.firstEffect = returnFiber.lastEffect = childToDelete; - } - } - - function insertNonHydratedInstance(returnFiber, fiber) { - fiber.effectTag |= Placement; - { - switch (returnFiber.tag) { - case HostRoot: - { - var parentContainer = returnFiber.stateNode.containerInfo; - switch (fiber.tag) { - case HostComponent: - var type = fiber.type; - var props = fiber.pendingProps; - didNotFindHydratableContainerInstance(parentContainer, type, props); - break; - case HostText: - var text = fiber.pendingProps; - didNotFindHydratableContainerTextInstance(parentContainer, text); - break; - } - break; - } - case HostComponent: - { - var parentType = returnFiber.type; - var parentProps = returnFiber.memoizedProps; - var parentInstance = returnFiber.stateNode; - switch (fiber.tag) { - case HostComponent: - var _type = fiber.type; - var _props = fiber.pendingProps; - didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props); - break; - case HostText: - var _text = fiber.pendingProps; - didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text); - break; - } - break; - } - default: - return; - } - } - } - - function tryHydrate(fiber, nextInstance) { - switch (fiber.tag) { - case HostComponent: - { - var type = fiber.type; - var props = fiber.pendingProps; - var instance = canHydrateInstance(nextInstance, type, props); - if (instance !== null) { - fiber.stateNode = instance; - return true; - } - return false; - } - case HostText: - { - var text = fiber.pendingProps; - var textInstance = canHydrateTextInstance(nextInstance, text); - if (textInstance !== null) { - fiber.stateNode = textInstance; - return true; - } - return false; - } - default: - return false; - } - } - - function tryToClaimNextHydratableInstance(fiber) { - if (!isHydrating) { - return; - } - var nextInstance = nextHydratableInstance; - if (!nextInstance) { - // Nothing to hydrate. Make it an insertion. - insertNonHydratedInstance(hydrationParentFiber, fiber); - isHydrating = false; - hydrationParentFiber = fiber; - return; - } - if (!tryHydrate(fiber, nextInstance)) { - // If we can't hydrate this instance let's try the next one. - // We use this as a heuristic. It's based on intuition and not data so it - // might be flawed or unnecessary. - nextInstance = getNextHydratableSibling(nextInstance); - if (!nextInstance || !tryHydrate(fiber, nextInstance)) { - // Nothing to hydrate. Make it an insertion. - insertNonHydratedInstance(hydrationParentFiber, fiber); - isHydrating = false; - hydrationParentFiber = fiber; - return; - } - // We matched the next one, we'll now assume that the first one was - // superfluous and we'll delete it. Since we can't eagerly delete it - // we'll have to schedule a deletion. To do that, this node needs a dummy - // fiber associated with it. - deleteHydratableInstance(hydrationParentFiber, nextHydratableInstance); - } - hydrationParentFiber = fiber; - nextHydratableInstance = getFirstHydratableChild(nextInstance); - } - - function prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) { - var instance = fiber.stateNode; - var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); - // TODO: Type this specific to this type of component. - fiber.updateQueue = updatePayload; - // If the update payload indicates that there is a change or if there - // is a new ref we mark this as an update. - if (updatePayload !== null) { - return true; - } - return false; - } - - function prepareToHydrateHostTextInstance(fiber) { - var textInstance = fiber.stateNode; - var textContent = fiber.memoizedProps; - var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber); - { - if (shouldUpdate) { - // We assume that prepareToHydrateHostTextInstance is called in a context where the - // hydration parent is the parent host component of this host text. - var returnFiber = hydrationParentFiber; - if (returnFiber !== null) { - switch (returnFiber.tag) { - case HostRoot: - { - var parentContainer = returnFiber.stateNode.containerInfo; - didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent); - break; - } - case HostComponent: - { - var parentType = returnFiber.type; - var parentProps = returnFiber.memoizedProps; - var parentInstance = returnFiber.stateNode; - didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent); - break; - } - } - } - } - } - return shouldUpdate; - } - - function popToNextHostParent(fiber) { - var parent = fiber['return']; - while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot) { - parent = parent['return']; - } - hydrationParentFiber = parent; - } - - function popHydrationState(fiber) { - if (fiber !== hydrationParentFiber) { - // We're deeper than the current hydration context, inside an inserted - // tree. - return false; - } - if (!isHydrating) { - // If we're not currently hydrating but we're in a hydration context, then - // we were an insertion and now need to pop up reenter hydration of our - // siblings. - popToNextHostParent(fiber); - isHydrating = true; - return false; - } - - var type = fiber.type; - - // If we have any remaining hydratable nodes, we need to delete them now. - // We only do this deeper than head and body since they tend to have random - // other nodes in them. We also ignore components with pure text content in - // side of them. - // TODO: Better heuristic. - if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) { - var nextInstance = nextHydratableInstance; - while (nextInstance) { - deleteHydratableInstance(fiber, nextInstance); - nextInstance = getNextHydratableSibling(nextInstance); - } - } - - popToNextHostParent(fiber); - nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null; - return true; - } - - function resetHydrationState() { - hydrationParentFiber = null; - nextHydratableInstance = null; - isHydrating = false; - } - - return { - enterHydrationState: enterHydrationState, - resetHydrationState: resetHydrationState, - tryToClaimNextHydratableInstance: tryToClaimNextHydratableInstance, - prepareToHydrateHostInstance: prepareToHydrateHostInstance, - prepareToHydrateHostTextInstance: prepareToHydrateHostTextInstance, - popHydrationState: popHydrationState - }; -}; - -// This lets us hook into Fiber to debug what it's doing. -// See https://github.com/facebook/react/pull/8033. -// This is not part of the public API, not even for React DevTools. -// You may only inject a debugTool if you work on React Fiber itself. -var ReactFiberInstrumentation = { - debugTool: null -}; - -var ReactFiberInstrumentation_1 = ReactFiberInstrumentation; - -var warnedAboutMissingGetChildContext = void 0; - -{ - warnedAboutMissingGetChildContext = {}; -} - -var ReactFiberLegacyContext = function (stack) { - var createCursor = stack.createCursor, - push = stack.push, - pop = stack.pop; - - // A cursor to the current merged context object on the stack. - - var contextStackCursor = createCursor(emptyObject); - // A cursor to a boolean indicating whether the context has changed. - var didPerformWorkStackCursor = createCursor(false); - // Keep track of the previous context object that was on the stack. - // We use this to get access to the parent context after we have already - // pushed the next context provider, and now need to merge their contexts. - var previousContext = emptyObject; - - function getUnmaskedContext(workInProgress) { - var hasOwnContext = isContextProvider(workInProgress); - if (hasOwnContext) { - // If the fiber is a context provider itself, when we read its context - // we have already pushed its own child context on the stack. A context - // provider should not "see" its own child context. Therefore we read the - // previous (parent) context instead for a context provider. - return previousContext; - } - return contextStackCursor.current; - } - - function cacheContext(workInProgress, unmaskedContext, maskedContext) { - var instance = workInProgress.stateNode; - instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext; - instance.__reactInternalMemoizedMaskedChildContext = maskedContext; - } - - function getMaskedContext(workInProgress, unmaskedContext) { - var type = workInProgress.type; - var contextTypes = type.contextTypes; - if (!contextTypes) { - return emptyObject; - } - - // Avoid recreating masked context unless unmasked context has changed. - // Failing to do this will result in unnecessary calls to componentWillReceiveProps. - // This may trigger infinite loops if componentWillReceiveProps calls setState. - var instance = workInProgress.stateNode; - if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) { - return instance.__reactInternalMemoizedMaskedChildContext; - } - - var context = {}; - for (var key in contextTypes) { - context[key] = unmaskedContext[key]; - } - - { - var name = getComponentName(workInProgress) || 'Unknown'; - checkPropTypes(contextTypes, context, 'context', name, ReactDebugCurrentFiber.getCurrentFiberStackAddendum); - } - - // Cache unmasked context so we can avoid recreating masked context unless necessary. - // Context is created before the class component is instantiated so check for instance. - if (instance) { - cacheContext(workInProgress, unmaskedContext, context); - } - - return context; - } - - function hasContextChanged() { - return didPerformWorkStackCursor.current; - } - - function isContextConsumer(fiber) { - return fiber.tag === ClassComponent && fiber.type.contextTypes != null; - } - - function isContextProvider(fiber) { - return fiber.tag === ClassComponent && fiber.type.childContextTypes != null; - } - - function popContextProvider(fiber) { - if (!isContextProvider(fiber)) { - return; - } - - pop(didPerformWorkStackCursor, fiber); - pop(contextStackCursor, fiber); - } - - function popTopLevelContextObject(fiber) { - pop(didPerformWorkStackCursor, fiber); - pop(contextStackCursor, fiber); - } - - function pushTopLevelContextObject(fiber, context, didChange) { - !(contextStackCursor.cursor == null) ? invariant(false, 'Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.') : void 0; - - push(contextStackCursor, context, fiber); - push(didPerformWorkStackCursor, didChange, fiber); - } - - function processChildContext(fiber, parentContext) { - var instance = fiber.stateNode; - var childContextTypes = fiber.type.childContextTypes; - - // TODO (bvaughn) Replace this behavior with an invariant() in the future. - // It has only been added in Fiber to match the (unintentional) behavior in Stack. - if (typeof instance.getChildContext !== 'function') { - { - var componentName = getComponentName(fiber) || 'Unknown'; - - if (!warnedAboutMissingGetChildContext[componentName]) { - warnedAboutMissingGetChildContext[componentName] = true; - warning(false, '%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName); - } - } - return parentContext; - } - - var childContext = void 0; - { - ReactDebugCurrentFiber.setCurrentPhase('getChildContext'); - } - startPhaseTimer(fiber, 'getChildContext'); - childContext = instance.getChildContext(); - stopPhaseTimer(); - { - ReactDebugCurrentFiber.setCurrentPhase(null); - } - for (var contextKey in childContext) { - !(contextKey in childContextTypes) ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', getComponentName(fiber) || 'Unknown', contextKey) : void 0; - } - { - var name = getComponentName(fiber) || 'Unknown'; - checkPropTypes(childContextTypes, childContext, 'child context', name, - // In practice, there is one case in which we won't get a stack. It's when - // somebody calls unstable_renderSubtreeIntoContainer() and we process - // context from the parent component instance. The stack will be missing - // because it's outside of the reconciliation, and so the pointer has not - // been set. This is rare and doesn't matter. We'll also remove that API. - ReactDebugCurrentFiber.getCurrentFiberStackAddendum); - } - - return _assign({}, parentContext, childContext); - } - - function pushContextProvider(workInProgress) { - if (!isContextProvider(workInProgress)) { - return false; - } - - var instance = workInProgress.stateNode; - // We push the context as early as possible to ensure stack integrity. - // If the instance does not exist yet, we will push null at first, - // and replace it on the stack later when invalidating the context. - var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyObject; - - // Remember the parent context so we can merge with it later. - // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates. - previousContext = contextStackCursor.current; - push(contextStackCursor, memoizedMergedChildContext, workInProgress); - push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress); - - return true; - } - - function invalidateContextProvider(workInProgress, didChange) { - var instance = workInProgress.stateNode; - !instance ? invariant(false, 'Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.') : void 0; - - if (didChange) { - // Merge parent and own context. - // Skip this if we're not updating due to sCU. - // This avoids unnecessarily recomputing memoized values. - var mergedContext = processChildContext(workInProgress, previousContext); - instance.__reactInternalMemoizedMergedChildContext = mergedContext; - - // Replace the old (or empty) context with the new one. - // It is important to unwind the context in the reverse order. - pop(didPerformWorkStackCursor, workInProgress); - pop(contextStackCursor, workInProgress); - // Now push the new context and mark that it has changed. - push(contextStackCursor, mergedContext, workInProgress); - push(didPerformWorkStackCursor, didChange, workInProgress); - } else { - pop(didPerformWorkStackCursor, workInProgress); - push(didPerformWorkStackCursor, didChange, workInProgress); - } - } - - function findCurrentUnmaskedContext(fiber) { - // Currently this is only used with renderSubtreeIntoContainer; not sure if it - // makes sense elsewhere - !(isFiberMounted(fiber) && fiber.tag === ClassComponent) ? invariant(false, 'Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.') : void 0; - - var node = fiber; - while (node.tag !== HostRoot) { - if (isContextProvider(node)) { - return node.stateNode.__reactInternalMemoizedMergedChildContext; - } - var parent = node['return']; - !parent ? invariant(false, 'Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.') : void 0; - node = parent; - } - return node.stateNode.context; - } - - return { - getUnmaskedContext: getUnmaskedContext, - cacheContext: cacheContext, - getMaskedContext: getMaskedContext, - hasContextChanged: hasContextChanged, - isContextConsumer: isContextConsumer, - isContextProvider: isContextProvider, - popContextProvider: popContextProvider, - popTopLevelContextObject: popTopLevelContextObject, - pushTopLevelContextObject: pushTopLevelContextObject, - processChildContext: processChildContext, - pushContextProvider: pushContextProvider, - invalidateContextProvider: invalidateContextProvider, - findCurrentUnmaskedContext: findCurrentUnmaskedContext - }; -}; - -var ReactFiberNewContext = function (stack) { - var createCursor = stack.createCursor, - push = stack.push, - pop = stack.pop; - - - var providerCursor = createCursor(null); - var valueCursor = createCursor(null); - var changedBitsCursor = createCursor(0); - - var rendererSigil = void 0; - { - // Use this to detect multiple renderers using the same context - rendererSigil = {}; - } - - function pushProvider(providerFiber) { - var context = providerFiber.type.context; - - push(changedBitsCursor, context._changedBits, providerFiber); - push(valueCursor, context._currentValue, providerFiber); - push(providerCursor, providerFiber, providerFiber); - - context._currentValue = providerFiber.pendingProps.value; - context._changedBits = providerFiber.stateNode; - - { - warning(context._currentRenderer === null || context._currentRenderer === rendererSigil, 'Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.'); - context._currentRenderer = rendererSigil; - } - } - - function popProvider(providerFiber) { - var changedBits = changedBitsCursor.current; - var currentValue = valueCursor.current; - - pop(providerCursor, providerFiber); - pop(valueCursor, providerFiber); - pop(changedBitsCursor, providerFiber); - - var context = providerFiber.type.context; - context._currentValue = currentValue; - context._changedBits = changedBits; - } - - return { - pushProvider: pushProvider, - popProvider: popProvider - }; -}; - -var ReactFiberStack = function () { - var valueStack = []; - - var fiberStack = void 0; - - { - fiberStack = []; - } - - var index = -1; - - function createCursor(defaultValue) { - return { - current: defaultValue - }; - } - - function isEmpty() { - return index === -1; - } - - function pop(cursor, fiber) { - if (index < 0) { - { - warning(false, 'Unexpected pop.'); - } - return; - } - - { - if (fiber !== fiberStack[index]) { - warning(false, 'Unexpected Fiber popped.'); - } - } - - cursor.current = valueStack[index]; - - valueStack[index] = null; - - { - fiberStack[index] = null; - } - - index--; - } - - function push(cursor, value, fiber) { - index++; - - valueStack[index] = cursor.current; - - { - fiberStack[index] = fiber; - } - - cursor.current = value; - } - - function checkThatStackIsEmpty() { - { - if (index !== -1) { - warning(false, 'Expected an empty stack. Something was not reset properly.'); - } - } - } - - function resetStackAfterFatalErrorInDev() { - { - index = -1; - valueStack.length = 0; - fiberStack.length = 0; - } - } - - return { - createCursor: createCursor, - isEmpty: isEmpty, - pop: pop, - push: push, - checkThatStackIsEmpty: checkThatStackIsEmpty, - resetStackAfterFatalErrorInDev: resetStackAfterFatalErrorInDev - }; -}; - -var invokeGuardedCallback$2 = ReactErrorUtils.invokeGuardedCallback; -var hasCaughtError = ReactErrorUtils.hasCaughtError; -var clearCaughtError = ReactErrorUtils.clearCaughtError; - - -var didWarnAboutStateTransition = void 0; -var didWarnSetStateChildContext = void 0; -var warnAboutUpdateOnUnmounted = void 0; -var warnAboutInvalidUpdates = void 0; - -{ - didWarnAboutStateTransition = false; - didWarnSetStateChildContext = false; - var didWarnStateUpdateForUnmountedComponent = {}; - - warnAboutUpdateOnUnmounted = function (fiber) { - // We show the whole stack but dedupe on the top component's name because - // the problematic code almost always lies inside that component. - var componentName = getComponentName(fiber) || 'ReactClass'; - if (didWarnStateUpdateForUnmountedComponent[componentName]) { - return; - } - warning(false, "Can't call setState (or forceUpdate) on an unmounted component. This " + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in the ' + 'componentWillUnmount method.%s', getStackAddendumByWorkInProgressFiber(fiber)); - didWarnStateUpdateForUnmountedComponent[componentName] = true; - }; - - warnAboutInvalidUpdates = function (instance) { - switch (ReactDebugCurrentFiber.phase) { - case 'getChildContext': - if (didWarnSetStateChildContext) { - return; - } - warning(false, 'setState(...): Cannot call setState() inside getChildContext()'); - didWarnSetStateChildContext = true; - break; - case 'render': - if (didWarnAboutStateTransition) { - return; - } - warning(false, 'Cannot update during an existing state transition (such as within ' + "`render` or another component's constructor). Render methods should " + 'be a pure function of props and state; constructor side-effects are ' + 'an anti-pattern, but can be moved to `componentWillMount`.'); - didWarnAboutStateTransition = true; - break; - } - }; -} - -var ReactFiberScheduler = function (config) { - var stack = ReactFiberStack(); - var hostContext = ReactFiberHostContext(config, stack); - var legacyContext = ReactFiberLegacyContext(stack); - var newContext = ReactFiberNewContext(stack); - var popHostContext = hostContext.popHostContext, - popHostContainer = hostContext.popHostContainer; - var popTopLevelLegacyContextObject = legacyContext.popTopLevelContextObject, - popLegacyContextProvider = legacyContext.popContextProvider; - var popProvider = newContext.popProvider; - - var hydrationContext = ReactFiberHydrationContext(config); - - var _ReactFiberBeginWork = ReactFiberBeginWork(config, hostContext, legacyContext, newContext, hydrationContext, scheduleWork, computeExpirationForFiber), - beginWork = _ReactFiberBeginWork.beginWork; - - var _ReactFiberCompleteWo = ReactFiberCompleteWork(config, hostContext, legacyContext, newContext, hydrationContext), - completeWork = _ReactFiberCompleteWo.completeWork; - - var _ReactFiberUnwindWork = ReactFiberUnwindWork(hostContext, legacyContext, newContext, scheduleWork, isAlreadyFailedLegacyErrorBoundary), - throwException = _ReactFiberUnwindWork.throwException, - unwindWork = _ReactFiberUnwindWork.unwindWork, - unwindInterruptedWork = _ReactFiberUnwindWork.unwindInterruptedWork; - - var _ReactFiberCommitWork = ReactFiberCommitWork(config, onCommitPhaseError, scheduleWork, computeExpirationForFiber, markLegacyErrorBoundaryAsFailed, recalculateCurrentTime), - commitBeforeMutationLifeCycles = _ReactFiberCommitWork.commitBeforeMutationLifeCycles, - commitResetTextContent = _ReactFiberCommitWork.commitResetTextContent, - commitPlacement = _ReactFiberCommitWork.commitPlacement, - commitDeletion = _ReactFiberCommitWork.commitDeletion, - commitWork = _ReactFiberCommitWork.commitWork, - commitLifeCycles = _ReactFiberCommitWork.commitLifeCycles, - commitErrorLogging = _ReactFiberCommitWork.commitErrorLogging, - commitAttachRef = _ReactFiberCommitWork.commitAttachRef, - commitDetachRef = _ReactFiberCommitWork.commitDetachRef; - - var now = config.now, - scheduleDeferredCallback = config.scheduleDeferredCallback, - cancelDeferredCallback = config.cancelDeferredCallback, - prepareForCommit = config.prepareForCommit, - resetAfterCommit = config.resetAfterCommit; - - // Represents the current time in ms. - - var originalStartTimeMs = now(); - var mostRecentCurrentTime = msToExpirationTime(0); - var mostRecentCurrentTimeMs = originalStartTimeMs; - - // Used to ensure computeUniqueAsyncExpiration is monotonically increases. - var lastUniqueAsyncExpiration = 0; - - // Represents the expiration time that incoming updates should use. (If this - // is NoWork, use the default strategy: async updates in async mode, sync - // updates in sync mode.) - var expirationContext = NoWork; - - var isWorking = false; - - // The next work in progress fiber that we're currently working on. - var nextUnitOfWork = null; - var nextRoot = null; - // The time at which we're currently rendering work. - var nextRenderExpirationTime = NoWork; - - // The next fiber with an effect that we're currently committing. - var nextEffect = null; - - var isCommitting = false; - - var isRootReadyForCommit = false; - - var legacyErrorBoundariesThatAlreadyFailed = null; - - // Used for performance tracking. - var interruptedBy = null; - - var stashedWorkInProgressProperties = void 0; - var replayUnitOfWork = void 0; - if (true && replayFailedUnitOfWorkWithInvokeGuardedCallback) { - stashedWorkInProgressProperties = null; - replayUnitOfWork = function (failedUnitOfWork, isAsync) { - // Retore the original state of the work-in-progress - _assign(failedUnitOfWork, stashedWorkInProgressProperties); - switch (failedUnitOfWork.tag) { - case HostRoot: - popHostContainer(failedUnitOfWork); - popTopLevelLegacyContextObject(failedUnitOfWork); - break; - case HostComponent: - popHostContext(failedUnitOfWork); - break; - case ClassComponent: - popLegacyContextProvider(failedUnitOfWork); - break; - case HostPortal: - popHostContainer(failedUnitOfWork); - break; - case ContextProvider: - popProvider(failedUnitOfWork); - break; - } - // Replay the begin phase. - invokeGuardedCallback$2(null, workLoop, null, isAsync); - if (hasCaughtError()) { - clearCaughtError(); - } else { - // This should be unreachable because the render phase is - // idempotent - } - }; - } - - function resetStack() { - if (nextUnitOfWork !== null) { - var interruptedWork = nextUnitOfWork['return']; - while (interruptedWork !== null) { - unwindInterruptedWork(interruptedWork); - interruptedWork = interruptedWork['return']; - } - } - - { - ReactStrictModeWarnings.discardPendingWarnings(); - stack.checkThatStackIsEmpty(); - } - - nextRoot = null; - nextRenderExpirationTime = NoWork; - nextUnitOfWork = null; - - isRootReadyForCommit = false; - } - - function commitAllHostEffects() { - while (nextEffect !== null) { - { - ReactDebugCurrentFiber.setCurrentFiber(nextEffect); - } - recordEffect(); - - var effectTag = nextEffect.effectTag; - - if (effectTag & ContentReset) { - commitResetTextContent(nextEffect); - } - - if (effectTag & Ref) { - var current = nextEffect.alternate; - if (current !== null) { - commitDetachRef(current); - } - } - - // The following switch statement is only concerned about placement, - // updates, and deletions. To avoid needing to add a case for every - // possible bitmap value, we remove the secondary effects from the - // effect tag and switch on that value. - var primaryEffectTag = effectTag & (Placement | Update | Deletion); - switch (primaryEffectTag) { - case Placement: - { - commitPlacement(nextEffect); - // Clear the "placement" from effect tag so that we know that this is inserted, before - // any life-cycles like componentDidMount gets called. - // TODO: findDOMNode doesn't rely on this any more but isMounted - // does and isMounted is deprecated anyway so we should be able - // to kill this. - nextEffect.effectTag &= ~Placement; - break; - } - case PlacementAndUpdate: - { - // Placement - commitPlacement(nextEffect); - // Clear the "placement" from effect tag so that we know that this is inserted, before - // any life-cycles like componentDidMount gets called. - nextEffect.effectTag &= ~Placement; - - // Update - var _current = nextEffect.alternate; - commitWork(_current, nextEffect); - break; - } - case Update: - { - var _current2 = nextEffect.alternate; - commitWork(_current2, nextEffect); - break; - } - case Deletion: - { - commitDeletion(nextEffect); - break; - } - } - nextEffect = nextEffect.nextEffect; - } - - { - ReactDebugCurrentFiber.resetCurrentFiber(); - } - } - - function commitBeforeMutationLifecycles() { - while (nextEffect !== null) { - var effectTag = nextEffect.effectTag; - - if (effectTag & Snapshot) { - recordEffect(); - var current = nextEffect.alternate; - commitBeforeMutationLifeCycles(current, nextEffect); - } - - // Don't cleanup effects yet; - // This will be done by commitAllLifeCycles() - nextEffect = nextEffect.nextEffect; - } - } - - function commitAllLifeCycles(finishedRoot, currentTime, committedExpirationTime) { - { - ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings(); - - if (warnAboutDeprecatedLifecycles) { - ReactStrictModeWarnings.flushPendingDeprecationWarnings(); - } - } - while (nextEffect !== null) { - var effectTag = nextEffect.effectTag; - - if (effectTag & (Update | Callback)) { - recordEffect(); - var current = nextEffect.alternate; - commitLifeCycles(finishedRoot, current, nextEffect, currentTime, committedExpirationTime); - } - - if (effectTag & ErrLog) { - commitErrorLogging(nextEffect, onUncaughtError); - } - - if (effectTag & Ref) { - recordEffect(); - commitAttachRef(nextEffect); - } - - var next = nextEffect.nextEffect; - // Ensure that we clean these up so that we don't accidentally keep them. - // I'm not actually sure this matters because we can't reset firstEffect - // and lastEffect since they're on every node, not just the effectful - // ones. So we have to clean everything as we reuse nodes anyway. - nextEffect.nextEffect = null; - // Ensure that we reset the effectTag here so that we can rely on effect - // tags to reason about the current life-cycle. - nextEffect = next; - } - } - - function isAlreadyFailedLegacyErrorBoundary(instance) { - return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance); - } - - function markLegacyErrorBoundaryAsFailed(instance) { - if (legacyErrorBoundariesThatAlreadyFailed === null) { - legacyErrorBoundariesThatAlreadyFailed = new Set([instance]); - } else { - legacyErrorBoundariesThatAlreadyFailed.add(instance); - } - } - - function commitRoot(finishedWork) { - isWorking = true; - isCommitting = true; - startCommitTimer(); - - var root = finishedWork.stateNode; - !(root.current !== finishedWork) ? invariant(false, 'Cannot commit the same tree as before. This is probably a bug related to the return field. This error is likely caused by a bug in React. Please file an issue.') : void 0; - var committedExpirationTime = root.pendingCommitExpirationTime; - !(committedExpirationTime !== NoWork) ? invariant(false, 'Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.') : void 0; - root.pendingCommitExpirationTime = NoWork; - - var currentTime = recalculateCurrentTime(); - - // Reset this to null before calling lifecycles - ReactCurrentOwner.current = null; - - var firstEffect = void 0; - if (finishedWork.effectTag > PerformedWork) { - // A fiber's effect list consists only of its children, not itself. So if - // the root has an effect, we need to add it to the end of the list. The - // resulting list is the set that would belong to the root's parent, if - // it had one; that is, all the effects in the tree including the root. - if (finishedWork.lastEffect !== null) { - finishedWork.lastEffect.nextEffect = finishedWork; - firstEffect = finishedWork.firstEffect; - } else { - firstEffect = finishedWork; - } - } else { - // There is no effect on the root. - firstEffect = finishedWork.firstEffect; - } - - prepareForCommit(root.containerInfo); - - // Invoke instances of getSnapshotBeforeUpdate before mutation. - nextEffect = firstEffect; - startCommitSnapshotEffectsTimer(); - while (nextEffect !== null) { - var didError = false; - var error = void 0; - { - invokeGuardedCallback$2(null, commitBeforeMutationLifecycles, null); - if (hasCaughtError()) { - didError = true; - error = clearCaughtError(); - } - } - if (didError) { - !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0; - onCommitPhaseError(nextEffect, error); - // Clean-up - if (nextEffect !== null) { - nextEffect = nextEffect.nextEffect; - } - } - } - stopCommitSnapshotEffectsTimer(); - - // Commit all the side-effects within a tree. We'll do this in two passes. - // The first pass performs all the host insertions, updates, deletions and - // ref unmounts. - nextEffect = firstEffect; - startCommitHostEffectsTimer(); - while (nextEffect !== null) { - var _didError = false; - var _error = void 0; - { - invokeGuardedCallback$2(null, commitAllHostEffects, null); - if (hasCaughtError()) { - _didError = true; - _error = clearCaughtError(); - } - } - if (_didError) { - !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0; - onCommitPhaseError(nextEffect, _error); - // Clean-up - if (nextEffect !== null) { - nextEffect = nextEffect.nextEffect; - } - } - } - stopCommitHostEffectsTimer(); - - resetAfterCommit(root.containerInfo); - - // The work-in-progress tree is now the current tree. This must come after - // the first pass of the commit phase, so that the previous tree is still - // current during componentWillUnmount, but before the second pass, so that - // the finished work is current during componentDidMount/Update. - root.current = finishedWork; - - // In the second pass we'll perform all life-cycles and ref callbacks. - // Life-cycles happen as a separate pass so that all placements, updates, - // and deletions in the entire tree have already been invoked. - // This pass also triggers any renderer-specific initial effects. - nextEffect = firstEffect; - startCommitLifeCyclesTimer(); - while (nextEffect !== null) { - var _didError2 = false; - var _error2 = void 0; - { - invokeGuardedCallback$2(null, commitAllLifeCycles, null, root, currentTime, committedExpirationTime); - if (hasCaughtError()) { - _didError2 = true; - _error2 = clearCaughtError(); - } - } - if (_didError2) { - !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0; - onCommitPhaseError(nextEffect, _error2); - if (nextEffect !== null) { - nextEffect = nextEffect.nextEffect; - } - } - } - - isCommitting = false; - isWorking = false; - stopCommitLifeCyclesTimer(); - stopCommitTimer(); - if (typeof onCommitRoot === 'function') { - onCommitRoot(finishedWork.stateNode); - } - if (true && ReactFiberInstrumentation_1.debugTool) { - ReactFiberInstrumentation_1.debugTool.onCommitWork(finishedWork); - } - - var remainingTime = root.current.expirationTime; - if (remainingTime === NoWork) { - // If there's no remaining work, we can clear the set of already failed - // error boundaries. - legacyErrorBoundariesThatAlreadyFailed = null; - } - return remainingTime; - } - - function resetExpirationTime(workInProgress, renderTime) { - if (renderTime !== Never && workInProgress.expirationTime === Never) { - // The children of this component are hidden. Don't bubble their - // expiration times. - return; - } - - // Check for pending updates. - var newExpirationTime = getUpdateExpirationTime(workInProgress); - - // TODO: Calls need to visit stateNode - - // Bubble up the earliest expiration time. - var child = workInProgress.child; - while (child !== null) { - if (child.expirationTime !== NoWork && (newExpirationTime === NoWork || newExpirationTime > child.expirationTime)) { - newExpirationTime = child.expirationTime; - } - child = child.sibling; - } - workInProgress.expirationTime = newExpirationTime; - } - - function completeUnitOfWork(workInProgress) { - // Attempt to complete the current unit of work, then move to the - // next sibling. If there are no more siblings, return to the - // parent fiber. - while (true) { - // The current, flushed, state of this fiber is the alternate. - // Ideally nothing should rely on this, but relying on it here - // means that we don't need an additional field on the work in - // progress. - var current = workInProgress.alternate; - { - ReactDebugCurrentFiber.setCurrentFiber(workInProgress); - } - - var returnFiber = workInProgress['return']; - var siblingFiber = workInProgress.sibling; - - if ((workInProgress.effectTag & Incomplete) === NoEffect) { - // This fiber completed. - var next = completeWork(current, workInProgress, nextRenderExpirationTime); - stopWorkTimer(workInProgress); - resetExpirationTime(workInProgress, nextRenderExpirationTime); - { - ReactDebugCurrentFiber.resetCurrentFiber(); - } - - if (next !== null) { - stopWorkTimer(workInProgress); - if (true && ReactFiberInstrumentation_1.debugTool) { - ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress); - } - // If completing this work spawned new work, do that next. We'll come - // back here again. - return next; - } - - if (returnFiber !== null && - // Do not append effects to parents if a sibling failed to complete - (returnFiber.effectTag & Incomplete) === NoEffect) { - // Append all the effects of the subtree and this fiber onto the effect - // list of the parent. The completion order of the children affects the - // side-effect order. - if (returnFiber.firstEffect === null) { - returnFiber.firstEffect = workInProgress.firstEffect; - } - if (workInProgress.lastEffect !== null) { - if (returnFiber.lastEffect !== null) { - returnFiber.lastEffect.nextEffect = workInProgress.firstEffect; - } - returnFiber.lastEffect = workInProgress.lastEffect; - } - - // If this fiber had side-effects, we append it AFTER the children's - // side-effects. We can perform certain side-effects earlier if - // needed, by doing multiple passes over the effect list. We don't want - // to schedule our own side-effect on our own list because if end up - // reusing children we'll schedule this effect onto itself since we're - // at the end. - var effectTag = workInProgress.effectTag; - // Skip both NoWork and PerformedWork tags when creating the effect list. - // PerformedWork effect is read by React DevTools but shouldn't be committed. - if (effectTag > PerformedWork) { - if (returnFiber.lastEffect !== null) { - returnFiber.lastEffect.nextEffect = workInProgress; - } else { - returnFiber.firstEffect = workInProgress; - } - returnFiber.lastEffect = workInProgress; - } - } - - if (true && ReactFiberInstrumentation_1.debugTool) { - ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress); - } - - if (siblingFiber !== null) { - // If there is more work to do in this returnFiber, do that next. - return siblingFiber; - } else if (returnFiber !== null) { - // If there's no more work in this returnFiber. Complete the returnFiber. - workInProgress = returnFiber; - continue; - } else { - // We've reached the root. - isRootReadyForCommit = true; - return null; - } - } else { - // This fiber did not complete because something threw. Pop values off - // the stack without entering the complete phase. If this is a boundary, - // capture values if possible. - var _next = unwindWork(workInProgress); - // Because this fiber did not complete, don't reset its expiration time. - if (workInProgress.effectTag & DidCapture) { - // Restarting an error boundary - stopFailedWorkTimer(workInProgress); - } else { - stopWorkTimer(workInProgress); - } - - { - ReactDebugCurrentFiber.resetCurrentFiber(); - } - - if (_next !== null) { - stopWorkTimer(workInProgress); - if (true && ReactFiberInstrumentation_1.debugTool) { - ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress); - } - // If completing this work spawned new work, do that next. We'll come - // back here again. - // Since we're restarting, remove anything that is not a host effect - // from the effect tag. - _next.effectTag &= HostEffectMask; - return _next; - } - - if (returnFiber !== null) { - // Mark the parent fiber as incomplete and clear its effect list. - returnFiber.firstEffect = returnFiber.lastEffect = null; - returnFiber.effectTag |= Incomplete; - } - - if (true && ReactFiberInstrumentation_1.debugTool) { - ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress); - } - - if (siblingFiber !== null) { - // If there is more work to do in this returnFiber, do that next. - return siblingFiber; - } else if (returnFiber !== null) { - // If there's no more work in this returnFiber. Complete the returnFiber. - workInProgress = returnFiber; - continue; - } else { - return null; - } - } - } - - // Without this explicit null return Flow complains of invalid return type - // TODO Remove the above while(true) loop - // eslint-disable-next-line no-unreachable - return null; - } - - function performUnitOfWork(workInProgress) { - // The current, flushed, state of this fiber is the alternate. - // Ideally nothing should rely on this, but relying on it here - // means that we don't need an additional field on the work in - // progress. - var current = workInProgress.alternate; - - // See if beginning this work spawns more work. - startWorkTimer(workInProgress); - { - ReactDebugCurrentFiber.setCurrentFiber(workInProgress); - } - - if (true && replayFailedUnitOfWorkWithInvokeGuardedCallback) { - stashedWorkInProgressProperties = _assign({}, workInProgress); - } - var next = beginWork(current, workInProgress, nextRenderExpirationTime); - - { - ReactDebugCurrentFiber.resetCurrentFiber(); - } - if (true && ReactFiberInstrumentation_1.debugTool) { - ReactFiberInstrumentation_1.debugTool.onBeginWork(workInProgress); - } - - if (next === null) { - // If this doesn't spawn new work, complete the current work. - next = completeUnitOfWork(workInProgress); - } - - ReactCurrentOwner.current = null; - - return next; - } - - function workLoop(isAsync) { - if (!isAsync) { - // Flush all expired work. - while (nextUnitOfWork !== null) { - nextUnitOfWork = performUnitOfWork(nextUnitOfWork); - } - } else { - // Flush asynchronous work until the deadline runs out of time. - while (nextUnitOfWork !== null && !shouldYield()) { - nextUnitOfWork = performUnitOfWork(nextUnitOfWork); - } - } - } - - function renderRoot(root, expirationTime, isAsync) { - !!isWorking ? invariant(false, 'renderRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0; - isWorking = true; - - // Check if we're starting from a fresh stack, or if we're resuming from - // previously yielded work. - if (expirationTime !== nextRenderExpirationTime || root !== nextRoot || nextUnitOfWork === null) { - // Reset the stack and start working from the root. - resetStack(); - nextRoot = root; - nextRenderExpirationTime = expirationTime; - nextUnitOfWork = createWorkInProgress(nextRoot.current, null, nextRenderExpirationTime); - root.pendingCommitExpirationTime = NoWork; - } - - var didFatal = false; - - startWorkLoopTimer(nextUnitOfWork); - - do { - try { - workLoop(isAsync); - } catch (thrownValue) { - if (nextUnitOfWork === null) { - // This is a fatal error. - didFatal = true; - onUncaughtError(thrownValue); - break; - } - - if (true && replayFailedUnitOfWorkWithInvokeGuardedCallback) { - var failedUnitOfWork = nextUnitOfWork; - replayUnitOfWork(failedUnitOfWork, isAsync); - } - - var sourceFiber = nextUnitOfWork; - var returnFiber = sourceFiber['return']; - if (returnFiber === null) { - // This is the root. The root could capture its own errors. However, - // we don't know if it errors before or after we pushed the host - // context. This information is needed to avoid a stack mismatch. - // Because we're not sure, treat this as a fatal error. We could track - // which phase it fails in, but doesn't seem worth it. At least - // for now. - didFatal = true; - onUncaughtError(thrownValue); - break; - } - throwException(returnFiber, sourceFiber, thrownValue); - nextUnitOfWork = completeUnitOfWork(sourceFiber); - } - break; - } while (true); - - // We're done performing work. Time to clean up. - stopWorkLoopTimer(interruptedBy); - interruptedBy = null; - isWorking = false; - - // Yield back to main thread. - if (didFatal) { - // There was a fatal error. - { - stack.resetStackAfterFatalErrorInDev(); - } - return null; - } else if (nextUnitOfWork === null) { - // We reached the root. - if (isRootReadyForCommit) { - // The root successfully completed. It's ready for commit. - root.pendingCommitExpirationTime = expirationTime; - var finishedWork = root.current.alternate; - return finishedWork; - } else { - // The root did not complete. - invariant(false, 'Expired work should have completed. This error is likely caused by a bug in React. Please file an issue.'); - } - } else { - // There's more work to do, but we ran out of time. Yield back to - // the renderer. - return null; - } - } - - function scheduleCapture(sourceFiber, boundaryFiber, value, expirationTime) { - // TODO: We only support dispatching errors. - var capturedValue = createCapturedValue(value, sourceFiber); - var update = { - expirationTime: expirationTime, - partialState: null, - callback: null, - isReplace: false, - isForced: false, - capturedValue: capturedValue, - next: null - }; - insertUpdateIntoFiber(boundaryFiber, update); - scheduleWork(boundaryFiber, expirationTime); - } - - function dispatch(sourceFiber, value, expirationTime) { - !(!isWorking || isCommitting) ? invariant(false, 'dispatch: Cannot dispatch during the render phase.') : void 0; - - // TODO: Handle arrays - - var fiber = sourceFiber['return']; - while (fiber !== null) { - switch (fiber.tag) { - case ClassComponent: - var ctor = fiber.type; - var instance = fiber.stateNode; - if (typeof ctor.getDerivedStateFromCatch === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) { - scheduleCapture(sourceFiber, fiber, value, expirationTime); - return; - } - break; - // TODO: Handle async boundaries - case HostRoot: - scheduleCapture(sourceFiber, fiber, value, expirationTime); - return; - } - fiber = fiber['return']; - } - - if (sourceFiber.tag === HostRoot) { - // Error was thrown at the root. There is no parent, so the root - // itself should capture it. - scheduleCapture(sourceFiber, sourceFiber, value, expirationTime); - } - } - - function onCommitPhaseError(fiber, error) { - return dispatch(fiber, error, Sync); - } - - function computeAsyncExpiration(currentTime) { - // Given the current clock time, returns an expiration time. We use rounding - // to batch like updates together. - // Should complete within ~1000ms. 1200ms max. - var expirationMs = 5000; - var bucketSizeMs = 250; - return computeExpirationBucket(currentTime, expirationMs, bucketSizeMs); - } - - function computeInteractiveExpiration(currentTime) { - // Should complete within ~500ms. 600ms max. - var expirationMs = 500; - var bucketSizeMs = 100; - return computeExpirationBucket(currentTime, expirationMs, bucketSizeMs); - } - - // Creates a unique async expiration time. - function computeUniqueAsyncExpiration() { - var currentTime = recalculateCurrentTime(); - var result = computeAsyncExpiration(currentTime); - if (result <= lastUniqueAsyncExpiration) { - // Since we assume the current time monotonically increases, we only hit - // this branch when computeUniqueAsyncExpiration is fired multiple times - // within a 200ms window (or whatever the async bucket size is). - result = lastUniqueAsyncExpiration + 1; - } - lastUniqueAsyncExpiration = result; - return lastUniqueAsyncExpiration; - } - - function computeExpirationForFiber(fiber) { - var expirationTime = void 0; - if (expirationContext !== NoWork) { - // An explicit expiration context was set; - expirationTime = expirationContext; - } else if (isWorking) { - if (isCommitting) { - // Updates that occur during the commit phase should have sync priority - // by default. - expirationTime = Sync; - } else { - // Updates during the render phase should expire at the same time as - // the work that is being rendered. - expirationTime = nextRenderExpirationTime; - } - } else { - // No explicit expiration context was set, and we're not currently - // performing work. Calculate a new expiration time. - if (fiber.mode & AsyncMode) { - if (isBatchingInteractiveUpdates) { - // This is an interactive update - var currentTime = recalculateCurrentTime(); - expirationTime = computeInteractiveExpiration(currentTime); - } else { - // This is an async update - var _currentTime = recalculateCurrentTime(); - expirationTime = computeAsyncExpiration(_currentTime); - } - } else { - // This is a sync update - expirationTime = Sync; - } - } - if (isBatchingInteractiveUpdates) { - // This is an interactive update. Keep track of the lowest pending - // interactive expiration time. This allows us to synchronously flush - // all interactive updates when needed. - if (lowestPendingInteractiveExpirationTime === NoWork || expirationTime > lowestPendingInteractiveExpirationTime) { - lowestPendingInteractiveExpirationTime = expirationTime; - } - } - return expirationTime; - } - - function scheduleWork(fiber, expirationTime) { - return scheduleWorkImpl(fiber, expirationTime, false); - } - - function scheduleWorkImpl(fiber, expirationTime, isErrorRecovery) { - recordScheduleUpdate(); - - { - if (!isErrorRecovery && fiber.tag === ClassComponent) { - var instance = fiber.stateNode; - warnAboutInvalidUpdates(instance); - } - } - - var node = fiber; - while (node !== null) { - // Walk the parent path to the root and update each node's - // expiration time. - if (node.expirationTime === NoWork || node.expirationTime > expirationTime) { - node.expirationTime = expirationTime; - } - if (node.alternate !== null) { - if (node.alternate.expirationTime === NoWork || node.alternate.expirationTime > expirationTime) { - node.alternate.expirationTime = expirationTime; - } - } - if (node['return'] === null) { - if (node.tag === HostRoot) { - var root = node.stateNode; - if (!isWorking && nextRenderExpirationTime !== NoWork && expirationTime < nextRenderExpirationTime) { - // This is an interruption. (Used for performance tracking.) - interruptedBy = fiber; - resetStack(); - } - if ( - // If we're in the render phase, we don't need to schedule this root - // for an update, because we'll do it before we exit... - !isWorking || isCommitting || - // ...unless this is a different root than the one we're rendering. - nextRoot !== root) { - // Add this root to the root schedule. - requestWork(root, expirationTime); - } - if (nestedUpdateCount > NESTED_UPDATE_LIMIT) { - invariant(false, 'Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.'); - } - } else { - { - if (!isErrorRecovery && fiber.tag === ClassComponent) { - warnAboutUpdateOnUnmounted(fiber); - } - } - return; - } - } - node = node['return']; - } - } - - function recalculateCurrentTime() { - // Subtract initial time so it fits inside 32bits - mostRecentCurrentTimeMs = now() - originalStartTimeMs; - mostRecentCurrentTime = msToExpirationTime(mostRecentCurrentTimeMs); - return mostRecentCurrentTime; - } - - function deferredUpdates(fn) { - var previousExpirationContext = expirationContext; - var currentTime = recalculateCurrentTime(); - expirationContext = computeAsyncExpiration(currentTime); - try { - return fn(); - } finally { - expirationContext = previousExpirationContext; - } - } - function syncUpdates(fn, a, b, c, d) { - var previousExpirationContext = expirationContext; - expirationContext = Sync; - try { - return fn(a, b, c, d); - } finally { - expirationContext = previousExpirationContext; - } - } - - // TODO: Everything below this is written as if it has been lifted to the - // renderers. I'll do this in a follow-up. - - // Linked-list of roots - var firstScheduledRoot = null; - var lastScheduledRoot = null; - - var callbackExpirationTime = NoWork; - var callbackID = -1; - var isRendering = false; - var nextFlushedRoot = null; - var nextFlushedExpirationTime = NoWork; - var lowestPendingInteractiveExpirationTime = NoWork; - var deadlineDidExpire = false; - var hasUnhandledError = false; - var unhandledError = null; - var deadline = null; - - var isBatchingUpdates = false; - var isUnbatchingUpdates = false; - var isBatchingInteractiveUpdates = false; - - var completedBatches = null; - - // Use these to prevent an infinite loop of nested updates - var NESTED_UPDATE_LIMIT = 1000; - var nestedUpdateCount = 0; - - var timeHeuristicForUnitOfWork = 1; - - function scheduleCallbackWithExpiration(expirationTime) { - if (callbackExpirationTime !== NoWork) { - // A callback is already scheduled. Check its expiration time (timeout). - if (expirationTime > callbackExpirationTime) { - // Existing callback has sufficient timeout. Exit. - return; - } else { - // Existing callback has insufficient timeout. Cancel and schedule a - // new one. - cancelDeferredCallback(callbackID); - } - // The request callback timer is already running. Don't start a new one. - } else { - startRequestCallbackTimer(); - } - - // Compute a timeout for the given expiration time. - var currentMs = now() - originalStartTimeMs; - var expirationMs = expirationTimeToMs(expirationTime); - var timeout = expirationMs - currentMs; - - callbackExpirationTime = expirationTime; - callbackID = scheduleDeferredCallback(performAsyncWork, { timeout: timeout }); - } - - // requestWork is called by the scheduler whenever a root receives an update. - // It's up to the renderer to call renderRoot at some point in the future. - function requestWork(root, expirationTime) { - addRootToSchedule(root, expirationTime); - - if (isRendering) { - // Prevent reentrancy. Remaining work will be scheduled at the end of - // the currently rendering batch. - return; - } - - if (isBatchingUpdates) { - // Flush work at the end of the batch. - if (isUnbatchingUpdates) { - // ...unless we're inside unbatchedUpdates, in which case we should - // flush it now. - nextFlushedRoot = root; - nextFlushedExpirationTime = Sync; - performWorkOnRoot(root, Sync, false); - } - return; - } - - // TODO: Get rid of Sync and use current time? - if (expirationTime === Sync) { - performSyncWork(); - } else { - scheduleCallbackWithExpiration(expirationTime); - } - } - - function addRootToSchedule(root, expirationTime) { - // Add the root to the schedule. - // Check if this root is already part of the schedule. - if (root.nextScheduledRoot === null) { - // This root is not already scheduled. Add it. - root.remainingExpirationTime = expirationTime; - if (lastScheduledRoot === null) { - firstScheduledRoot = lastScheduledRoot = root; - root.nextScheduledRoot = root; - } else { - lastScheduledRoot.nextScheduledRoot = root; - lastScheduledRoot = root; - lastScheduledRoot.nextScheduledRoot = firstScheduledRoot; - } - } else { - // This root is already scheduled, but its priority may have increased. - var remainingExpirationTime = root.remainingExpirationTime; - if (remainingExpirationTime === NoWork || expirationTime < remainingExpirationTime) { - // Update the priority. - root.remainingExpirationTime = expirationTime; - } - } - } - - function findHighestPriorityRoot() { - var highestPriorityWork = NoWork; - var highestPriorityRoot = null; - if (lastScheduledRoot !== null) { - var previousScheduledRoot = lastScheduledRoot; - var root = firstScheduledRoot; - while (root !== null) { - var remainingExpirationTime = root.remainingExpirationTime; - if (remainingExpirationTime === NoWork) { - // This root no longer has work. Remove it from the scheduler. - - // TODO: This check is redudant, but Flow is confused by the branch - // below where we set lastScheduledRoot to null, even though we break - // from the loop right after. - !(previousScheduledRoot !== null && lastScheduledRoot !== null) ? invariant(false, 'Should have a previous and last root. This error is likely caused by a bug in React. Please file an issue.') : void 0; - if (root === root.nextScheduledRoot) { - // This is the only root in the list. - root.nextScheduledRoot = null; - firstScheduledRoot = lastScheduledRoot = null; - break; - } else if (root === firstScheduledRoot) { - // This is the first root in the list. - var next = root.nextScheduledRoot; - firstScheduledRoot = next; - lastScheduledRoot.nextScheduledRoot = next; - root.nextScheduledRoot = null; - } else if (root === lastScheduledRoot) { - // This is the last root in the list. - lastScheduledRoot = previousScheduledRoot; - lastScheduledRoot.nextScheduledRoot = firstScheduledRoot; - root.nextScheduledRoot = null; - break; - } else { - previousScheduledRoot.nextScheduledRoot = root.nextScheduledRoot; - root.nextScheduledRoot = null; - } - root = previousScheduledRoot.nextScheduledRoot; - } else { - if (highestPriorityWork === NoWork || remainingExpirationTime < highestPriorityWork) { - // Update the priority, if it's higher - highestPriorityWork = remainingExpirationTime; - highestPriorityRoot = root; - } - if (root === lastScheduledRoot) { - break; - } - previousScheduledRoot = root; - root = root.nextScheduledRoot; - } - } - } - - // If the next root is the same as the previous root, this is a nested - // update. To prevent an infinite loop, increment the nested update count. - var previousFlushedRoot = nextFlushedRoot; - if (previousFlushedRoot !== null && previousFlushedRoot === highestPriorityRoot && highestPriorityWork === Sync) { - nestedUpdateCount++; - } else { - // Reset whenever we switch roots. - nestedUpdateCount = 0; - } - nextFlushedRoot = highestPriorityRoot; - nextFlushedExpirationTime = highestPriorityWork; - } - - function performAsyncWork(dl) { - performWork(NoWork, true, dl); - } - - function performSyncWork() { - performWork(Sync, false, null); - } - - function performWork(minExpirationTime, isAsync, dl) { - deadline = dl; - - // Keep working on roots until there's no more work, or until the we reach - // the deadline. - findHighestPriorityRoot(); - - if (enableUserTimingAPI && deadline !== null) { - var didExpire = nextFlushedExpirationTime < recalculateCurrentTime(); - var timeout = expirationTimeToMs(nextFlushedExpirationTime); - stopRequestCallbackTimer(didExpire, timeout); - } - - if (isAsync) { - while (nextFlushedRoot !== null && nextFlushedExpirationTime !== NoWork && (minExpirationTime === NoWork || minExpirationTime >= nextFlushedExpirationTime) && (!deadlineDidExpire || recalculateCurrentTime() >= nextFlushedExpirationTime)) { - performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime, !deadlineDidExpire); - findHighestPriorityRoot(); - } - } else { - while (nextFlushedRoot !== null && nextFlushedExpirationTime !== NoWork && (minExpirationTime === NoWork || minExpirationTime >= nextFlushedExpirationTime)) { - performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime, false); - findHighestPriorityRoot(); - } - } - - // We're done flushing work. Either we ran out of time in this callback, - // or there's no more work left with sufficient priority. - - // If we're inside a callback, set this to false since we just completed it. - if (deadline !== null) { - callbackExpirationTime = NoWork; - callbackID = -1; - } - // If there's work left over, schedule a new callback. - if (nextFlushedExpirationTime !== NoWork) { - scheduleCallbackWithExpiration(nextFlushedExpirationTime); - } - - // Clean-up. - deadline = null; - deadlineDidExpire = false; - - finishRendering(); - } - - function flushRoot(root, expirationTime) { - !!isRendering ? invariant(false, 'work.commit(): Cannot commit while already rendering. This likely means you attempted to commit from inside a lifecycle method.') : void 0; - // Perform work on root as if the given expiration time is the current time. - // This has the effect of synchronously flushing all work up to and - // including the given time. - nextFlushedRoot = root; - nextFlushedExpirationTime = expirationTime; - performWorkOnRoot(root, expirationTime, false); - // Flush any sync work that was scheduled by lifecycles - performSyncWork(); - finishRendering(); - } - - function finishRendering() { - nestedUpdateCount = 0; - - if (completedBatches !== null) { - var batches = completedBatches; - completedBatches = null; - for (var i = 0; i < batches.length; i++) { - var batch = batches[i]; - try { - batch._onComplete(); - } catch (error) { - if (!hasUnhandledError) { - hasUnhandledError = true; - unhandledError = error; - } - } - } - } - - if (hasUnhandledError) { - var error = unhandledError; - unhandledError = null; - hasUnhandledError = false; - throw error; - } - } - - function performWorkOnRoot(root, expirationTime, isAsync) { - !!isRendering ? invariant(false, 'performWorkOnRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0; - - isRendering = true; - - // Check if this is async work or sync/expired work. - if (!isAsync) { - // Flush sync work. - var finishedWork = root.finishedWork; - if (finishedWork !== null) { - // This root is already complete. We can commit it. - completeRoot(root, finishedWork, expirationTime); - } else { - root.finishedWork = null; - finishedWork = renderRoot(root, expirationTime, false); - if (finishedWork !== null) { - // We've completed the root. Commit it. - completeRoot(root, finishedWork, expirationTime); - } - } - } else { - // Flush async work. - var _finishedWork = root.finishedWork; - if (_finishedWork !== null) { - // This root is already complete. We can commit it. - completeRoot(root, _finishedWork, expirationTime); - } else { - root.finishedWork = null; - _finishedWork = renderRoot(root, expirationTime, true); - if (_finishedWork !== null) { - // We've completed the root. Check the deadline one more time - // before committing. - if (!shouldYield()) { - // Still time left. Commit the root. - completeRoot(root, _finishedWork, expirationTime); - } else { - // There's no time left. Mark this root as complete. We'll come - // back and commit it later. - root.finishedWork = _finishedWork; - } - } - } - } - - isRendering = false; - } - - function completeRoot(root, finishedWork, expirationTime) { - // Check if there's a batch that matches this expiration time. - var firstBatch = root.firstBatch; - if (firstBatch !== null && firstBatch._expirationTime <= expirationTime) { - if (completedBatches === null) { - completedBatches = [firstBatch]; - } else { - completedBatches.push(firstBatch); - } - if (firstBatch._defer) { - // This root is blocked from committing by a batch. Unschedule it until - // we receive another update. - root.finishedWork = finishedWork; - root.remainingExpirationTime = NoWork; - return; - } - } - - // Commit the root. - root.finishedWork = null; - root.remainingExpirationTime = commitRoot(finishedWork); - } - - // When working on async work, the reconciler asks the renderer if it should - // yield execution. For DOM, we implement this with requestIdleCallback. - function shouldYield() { - if (deadline === null) { - return false; - } - if (deadline.timeRemaining() > timeHeuristicForUnitOfWork) { - // Disregard deadline.didTimeout. Only expired work should be flushed - // during a timeout. This path is only hit for non-expired work. - return false; - } - deadlineDidExpire = true; - return true; - } - - function onUncaughtError(error) { - !(nextFlushedRoot !== null) ? invariant(false, 'Should be working on a root. This error is likely caused by a bug in React. Please file an issue.') : void 0; - // Unschedule this root so we don't work on it again until there's - // another update. - nextFlushedRoot.remainingExpirationTime = NoWork; - if (!hasUnhandledError) { - hasUnhandledError = true; - unhandledError = error; - } - } - - // TODO: Batching should be implemented at the renderer level, not inside - // the reconciler. - function batchedUpdates(fn, a) { - var previousIsBatchingUpdates = isBatchingUpdates; - isBatchingUpdates = true; - try { - return fn(a); - } finally { - isBatchingUpdates = previousIsBatchingUpdates; - if (!isBatchingUpdates && !isRendering) { - performSyncWork(); - } - } - } - - // TODO: Batching should be implemented at the renderer level, not inside - // the reconciler. - function unbatchedUpdates(fn, a) { - if (isBatchingUpdates && !isUnbatchingUpdates) { - isUnbatchingUpdates = true; - try { - return fn(a); - } finally { - isUnbatchingUpdates = false; - } - } - return fn(a); - } - - // TODO: Batching should be implemented at the renderer level, not within - // the reconciler. - function flushSync(fn, a) { - !!isRendering ? invariant(false, 'flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.') : void 0; - var previousIsBatchingUpdates = isBatchingUpdates; - isBatchingUpdates = true; - try { - return syncUpdates(fn, a); - } finally { - isBatchingUpdates = previousIsBatchingUpdates; - performSyncWork(); - } - } - - function interactiveUpdates(fn, a, b) { - if (isBatchingInteractiveUpdates) { - return fn(a, b); - } - // If there are any pending interactive updates, synchronously flush them. - // This needs to happen before we read any handlers, because the effect of - // the previous event may influence which handlers are called during - // this event. - if (!isBatchingUpdates && !isRendering && lowestPendingInteractiveExpirationTime !== NoWork) { - // Synchronously flush pending interactive updates. - performWork(lowestPendingInteractiveExpirationTime, false, null); - lowestPendingInteractiveExpirationTime = NoWork; - } - var previousIsBatchingInteractiveUpdates = isBatchingInteractiveUpdates; - var previousIsBatchingUpdates = isBatchingUpdates; - isBatchingInteractiveUpdates = true; - isBatchingUpdates = true; - try { - return fn(a, b); - } finally { - isBatchingInteractiveUpdates = previousIsBatchingInteractiveUpdates; - isBatchingUpdates = previousIsBatchingUpdates; - if (!isBatchingUpdates && !isRendering) { - performSyncWork(); - } - } - } - - function flushInteractiveUpdates() { - if (!isRendering && lowestPendingInteractiveExpirationTime !== NoWork) { - // Synchronously flush pending interactive updates. - performWork(lowestPendingInteractiveExpirationTime, false, null); - lowestPendingInteractiveExpirationTime = NoWork; - } - } - - function flushControlled(fn) { - var previousIsBatchingUpdates = isBatchingUpdates; - isBatchingUpdates = true; - try { - syncUpdates(fn); - } finally { - isBatchingUpdates = previousIsBatchingUpdates; - if (!isBatchingUpdates && !isRendering) { - performWork(Sync, false, null); - } - } - } - - return { - recalculateCurrentTime: recalculateCurrentTime, - computeExpirationForFiber: computeExpirationForFiber, - scheduleWork: scheduleWork, - requestWork: requestWork, - flushRoot: flushRoot, - batchedUpdates: batchedUpdates, - unbatchedUpdates: unbatchedUpdates, - flushSync: flushSync, - flushControlled: flushControlled, - deferredUpdates: deferredUpdates, - syncUpdates: syncUpdates, - interactiveUpdates: interactiveUpdates, - flushInteractiveUpdates: flushInteractiveUpdates, - computeUniqueAsyncExpiration: computeUniqueAsyncExpiration, - legacyContext: legacyContext - }; -}; - -var didWarnAboutNestedUpdates = void 0; - -{ - didWarnAboutNestedUpdates = false; -} - -// 0 is PROD, 1 is DEV. -// Might add PROFILE later. - - -var ReactFiberReconciler$1 = function (config) { - var getPublicInstance = config.getPublicInstance; - - var _ReactFiberScheduler = ReactFiberScheduler(config), - computeUniqueAsyncExpiration = _ReactFiberScheduler.computeUniqueAsyncExpiration, - recalculateCurrentTime = _ReactFiberScheduler.recalculateCurrentTime, - computeExpirationForFiber = _ReactFiberScheduler.computeExpirationForFiber, - scheduleWork = _ReactFiberScheduler.scheduleWork, - requestWork = _ReactFiberScheduler.requestWork, - flushRoot = _ReactFiberScheduler.flushRoot, - batchedUpdates = _ReactFiberScheduler.batchedUpdates, - unbatchedUpdates = _ReactFiberScheduler.unbatchedUpdates, - flushSync = _ReactFiberScheduler.flushSync, - flushControlled = _ReactFiberScheduler.flushControlled, - deferredUpdates = _ReactFiberScheduler.deferredUpdates, - syncUpdates = _ReactFiberScheduler.syncUpdates, - interactiveUpdates = _ReactFiberScheduler.interactiveUpdates, - flushInteractiveUpdates = _ReactFiberScheduler.flushInteractiveUpdates, - legacyContext = _ReactFiberScheduler.legacyContext; - - var findCurrentUnmaskedContext = legacyContext.findCurrentUnmaskedContext, - isContextProvider = legacyContext.isContextProvider, - processChildContext = legacyContext.processChildContext; - - - function getContextForSubtree(parentComponent) { - if (!parentComponent) { - return emptyObject; - } - - var fiber = get(parentComponent); - var parentContext = findCurrentUnmaskedContext(fiber); - return isContextProvider(fiber) ? processChildContext(fiber, parentContext) : parentContext; - } - - function scheduleRootUpdate(current, element, currentTime, expirationTime, callback) { - { - if (ReactDebugCurrentFiber.phase === 'render' && ReactDebugCurrentFiber.current !== null && !didWarnAboutNestedUpdates) { - didWarnAboutNestedUpdates = true; - warning(false, 'Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\n\n' + 'Check the render method of %s.', getComponentName(ReactDebugCurrentFiber.current) || 'Unknown'); - } - } - - callback = callback === undefined ? null : callback; - { - warning(callback === null || typeof callback === 'function', 'render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback); - } - - var update = { - expirationTime: expirationTime, - partialState: { element: element }, - callback: callback, - isReplace: false, - isForced: false, - capturedValue: null, - next: null - }; - insertUpdateIntoFiber(current, update); - scheduleWork(current, expirationTime); - - return expirationTime; - } - - function updateContainerAtExpirationTime(element, container, parentComponent, currentTime, expirationTime, callback) { - // TODO: If this is a nested container, this won't be the root. - var current = container.current; - - { - if (ReactFiberInstrumentation_1.debugTool) { - if (current.alternate === null) { - ReactFiberInstrumentation_1.debugTool.onMountContainer(container); - } else if (element === null) { - ReactFiberInstrumentation_1.debugTool.onUnmountContainer(container); - } else { - ReactFiberInstrumentation_1.debugTool.onUpdateContainer(container); - } - } - } - - var context = getContextForSubtree(parentComponent); - if (container.context === null) { - container.context = context; - } else { - container.pendingContext = context; - } - - return scheduleRootUpdate(current, element, currentTime, expirationTime, callback); - } - - function findHostInstance(fiber) { - var hostFiber = findCurrentHostFiber(fiber); - if (hostFiber === null) { - return null; - } - return hostFiber.stateNode; - } - - return { - createContainer: function (containerInfo, isAsync, hydrate) { - return createFiberRoot(containerInfo, isAsync, hydrate); - }, - updateContainer: function (element, container, parentComponent, callback) { - var current = container.current; - var currentTime = recalculateCurrentTime(); - var expirationTime = computeExpirationForFiber(current); - return updateContainerAtExpirationTime(element, container, parentComponent, currentTime, expirationTime, callback); - }, - updateContainerAtExpirationTime: function (element, container, parentComponent, expirationTime, callback) { - var currentTime = recalculateCurrentTime(); - return updateContainerAtExpirationTime(element, container, parentComponent, currentTime, expirationTime, callback); - }, - - - flushRoot: flushRoot, - - requestWork: requestWork, - - computeUniqueAsyncExpiration: computeUniqueAsyncExpiration, - - batchedUpdates: batchedUpdates, - - unbatchedUpdates: unbatchedUpdates, - - deferredUpdates: deferredUpdates, - - syncUpdates: syncUpdates, - - interactiveUpdates: interactiveUpdates, - - flushInteractiveUpdates: flushInteractiveUpdates, - - flushControlled: flushControlled, - - flushSync: flushSync, - - getPublicRootInstance: function (container) { - var containerFiber = container.current; - if (!containerFiber.child) { - return null; - } - switch (containerFiber.child.tag) { - case HostComponent: - return getPublicInstance(containerFiber.child.stateNode); - default: - return containerFiber.child.stateNode; - } - }, - - - findHostInstance: findHostInstance, - - findHostInstanceWithNoPortals: function (fiber) { - var hostFiber = findCurrentHostFiberWithNoPortals(fiber); - if (hostFiber === null) { - return null; - } - return hostFiber.stateNode; - }, - injectIntoDevTools: function (devToolsConfig) { - var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance; - - return injectInternals(_assign({}, devToolsConfig, { - findHostInstanceByFiber: function (fiber) { - return findHostInstance(fiber); - }, - findFiberByHostInstance: function (instance) { - if (!findFiberByHostInstance) { - // Might not be implemented by the renderer. - return null; - } - return findFiberByHostInstance(instance); - } - })); - } - }; -}; - -var ReactFiberReconciler$2 = Object.freeze({ - default: ReactFiberReconciler$1 -}); - -var ReactFiberReconciler$3 = ( ReactFiberReconciler$2 && ReactFiberReconciler$1 ) || ReactFiberReconciler$2; - -// TODO: bundle Flow types with the package. - - - -// TODO: decide on the top-level export form. -// This is hacky but makes it work with both Rollup and Jest. -var reactReconciler = ReactFiberReconciler$3['default'] ? ReactFiberReconciler$3['default'] : ReactFiberReconciler$3; - -function createPortal$1(children, containerInfo, -// TODO: figure out the API for cross-renderer implementation. -implementation) { - var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - - return { - // This tag allow us to uniquely identify this as a React Portal - $$typeof: REACT_PORTAL_TYPE, - key: key == null ? null : '' + key, - children: children, - containerInfo: containerInfo, - implementation: implementation - }; -} - -// TODO: this is special because it gets imported during build. - -var ReactVersion = '16.3.0'; - +// This is a built-in polyfill for requestIdleCallback. It works by scheduling // a requestAnimationFrame, storing the time for the start of the frame, then // scheduling a postMessage which gets scheduled after paint. Within the // postMessage handler do as much work as possible until time + frame rate. @@ -40743,33 +33933,43 @@ var ReactVersion = '16.3.0'; // layout, paint and other browser work is counted against the available time. // The frame rate is dynamically adjusted. -{ - if (ExecutionEnvironment.canUseDOM && typeof requestAnimationFrame !== 'function') { - warning(false, 'React depends on requestAnimationFrame. Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills'); - } -} +// We capture a local reference to any global, in case it gets polyfilled after +// this module is initially evaluated. +// We want to be using a consistent implementation. +var localDate = Date; +var localSetTimeout = setTimeout; +var localClearTimeout = clearTimeout; var hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function'; -var now = void 0; +var now$1 = void 0; if (hasNativePerformanceNow) { - now = function () { - return performance.now(); + var Performance = performance; + now$1 = function () { + return Performance.now(); }; } else { - now = function () { - return Date.now(); + now$1 = function () { + return localDate.now(); }; } -// TODO: There's no way to cancel, because Fiber doesn't atm. -var rIC = void 0; -var cIC = void 0; +var scheduleWork = void 0; +var cancelScheduledWork = void 0; if (!ExecutionEnvironment.canUseDOM) { - rIC = function (frameCallback) { - return setTimeout(function () { - frameCallback({ + var timeoutIds = new Map(); + + scheduleWork = function (callback, options) { + // keeping return type consistent + var callbackConfig = { + scheduledCallback: callback, + timeoutTime: 0, + next: null, + prev: null + }; + var timeoutId = localSetTimeout(function () { + callback({ timeRemaining: function () { return Infinity; }, @@ -40777,17 +33977,34 @@ if (!ExecutionEnvironment.canUseDOM) { didTimeout: false }); }); + timeoutIds.set(callback, timeoutId); + return callbackConfig; }; - cIC = function (timeoutID) { - clearTimeout(timeoutID); + cancelScheduledWork = function (callbackId) { + var callback = callbackId.scheduledCallback; + var timeoutId = timeoutIds.get(callback); + timeoutIds.delete(callbackId); + localClearTimeout(timeoutId); }; -} else if (alwaysUseRequestIdleCallbackPolyfill || typeof requestIdleCallback !== 'function' || typeof cancelIdleCallback !== 'function') { - // Polyfill requestIdleCallback and cancelIdleCallback +} else { + { + if (typeof localRequestAnimationFrame$1 !== 'function') { + warning(false, 'React depends on requestAnimationFrame. Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills'); + } + } + + var localRequestAnimationFrame = typeof localRequestAnimationFrame$1 === 'function' ? localRequestAnimationFrame$1 : function (callback) { + invariant(false, 'React depends on requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills'); + }; + + var headOfPendingCallbacksLinkedList = null; + var tailOfPendingCallbacksLinkedList = null; + + // We track what the next soonest timeoutTime is, to be able to quickly tell + // if none of the scheduled callbacks have timed out. + var nextSoonestTimeoutTime = -1; - var scheduledRICCallback = null; var isIdleScheduled = false; - var timeoutTime = -1; - var isAnimationFrameScheduled = false; var frameDeadline = 0; @@ -40797,27 +34014,94 @@ if (!ExecutionEnvironment.canUseDOM) { var previousFrameTime = 33; var activeFrameTime = 33; - var frameDeadlineObject = void 0; - if (hasNativePerformanceNow) { - frameDeadlineObject = { - didTimeout: false, - timeRemaining: function () { - // We assume that if we have a performance timer that the rAF callback - // gets a performance timer value. Not sure if this is always true. - var remaining = frameDeadline - performance.now(); - return remaining > 0 ? remaining : 0; + var frameDeadlineObject = { + didTimeout: false, + timeRemaining: function () { + var remaining = frameDeadline - now$1(); + return remaining > 0 ? remaining : 0; + } + }; + + /** + * Handles the case where a callback errors: + * - don't catch the error, because this changes debugging behavior + * - do start a new postMessage callback, to call any remaining callbacks, + * - but only if there is an error, so there is not extra overhead. + */ + var callUnsafely = function (callbackConfig, arg) { + var callback = callbackConfig.scheduledCallback; + var finishedCalling = false; + try { + callback(arg); + finishedCalling = true; + } finally { + // always remove it from linked list + cancelScheduledWork(callbackConfig); + + if (!finishedCalling) { + // an error must have been thrown + isIdleScheduled = true; + window.postMessage(messageKey, '*'); } - }; - } else { - frameDeadlineObject = { - didTimeout: false, - timeRemaining: function () { - // Fallback to Date.now() - var remaining = frameDeadline - Date.now(); - return remaining > 0 ? remaining : 0; + } + }; + + /** + * Checks for timed out callbacks, runs them, and then checks again to see if + * any more have timed out. + * Keeps doing this until there are none which have currently timed out. + */ + var callTimedOutCallbacks = function () { + if (headOfPendingCallbacksLinkedList === null) { + return; + } + + var currentTime = now$1(); + // TODO: this would be more efficient if deferred callbacks are stored in + // min heap. + // Or in a linked list with links for both timeoutTime order and insertion + // order. + // For now an easy compromise is the current approach: + // Keep a pointer to the soonest timeoutTime, and check that first. + // If it has not expired, we can skip traversing the whole list. + // If it has expired, then we step through all the callbacks. + if (nextSoonestTimeoutTime === -1 || nextSoonestTimeoutTime > currentTime) { + // We know that none of them have timed out yet. + return; + } + // NOTE: we intentionally wait to update the nextSoonestTimeoutTime until + // after successfully calling any timed out callbacks. + // If a timed out callback throws an error, we could get stuck in a state + // where the nextSoonestTimeoutTime was set wrong. + var updatedNextSoonestTimeoutTime = -1; // we will update nextSoonestTimeoutTime below + var timedOutCallbacks = []; + + // iterate once to find timed out callbacks and find nextSoonestTimeoutTime + var currentCallbackConfig = headOfPendingCallbacksLinkedList; + while (currentCallbackConfig !== null) { + var _timeoutTime = currentCallbackConfig.timeoutTime; + if (_timeoutTime !== -1 && _timeoutTime <= currentTime) { + // it has timed out! + timedOutCallbacks.push(currentCallbackConfig); + } else { + if (_timeoutTime !== -1 && (updatedNextSoonestTimeoutTime === -1 || _timeoutTime < updatedNextSoonestTimeoutTime)) { + updatedNextSoonestTimeoutTime = _timeoutTime; + } } - }; - } + currentCallbackConfig = currentCallbackConfig.next; + } + + if (timedOutCallbacks.length > 0) { + frameDeadlineObject.didTimeout = true; + for (var i = 0, len = timedOutCallbacks.length; i < len; i++) { + callUnsafely(timedOutCallbacks[i], frameDeadlineObject); + } + } + + // NOTE: we intentionally wait to update the nextSoonestTimeoutTime until + // after successfully calling any timed out callbacks. + nextSoonestTimeoutTime = updatedNextSoonestTimeoutTime; + }; // We use the postMessage trick to defer idle work until after the repaint. var messageKey = '__reactIdleCallback$' + Math.random().toString(36).slice(2); @@ -40825,37 +34109,30 @@ if (!ExecutionEnvironment.canUseDOM) { if (event.source !== window || event.data !== messageKey) { return; } - isIdleScheduled = false; - var currentTime = now(); - if (frameDeadline - currentTime <= 0) { - // There's no time left in this idle period. Check if the callback has - // a timeout and whether it's been exceeded. - if (timeoutTime !== -1 && timeoutTime <= currentTime) { - // Exceeded the timeout. Invoke the callback even though there's no - // time left. - frameDeadlineObject.didTimeout = true; - } else { - // No timeout. - if (!isAnimationFrameScheduled) { - // Schedule another animation callback so we retry later. - isAnimationFrameScheduled = true; - requestAnimationFrame(animationTick); - } - // Exit without invoking the callback. - return; - } - } else { - // There's still time left in this idle period. - frameDeadlineObject.didTimeout = false; + if (headOfPendingCallbacksLinkedList === null) { + return; } - timeoutTime = -1; - var callback = scheduledRICCallback; - scheduledRICCallback = null; - if (callback !== null) { - callback(frameDeadlineObject); + // First call anything which has timed out, until we have caught up. + callTimedOutCallbacks(); + + var currentTime = now$1(); + // Next, as long as we have idle time, try calling more callbacks. + while (frameDeadline - currentTime > 0 && headOfPendingCallbacksLinkedList !== null) { + var latestCallbackConfig = headOfPendingCallbacksLinkedList; + frameDeadlineObject.didTimeout = false; + // callUnsafely will remove it from the head of the linked list + callUnsafely(latestCallbackConfig, frameDeadlineObject); + currentTime = now$1(); + } + if (headOfPendingCallbacksLinkedList !== null) { + if (!isAnimationFrameScheduled) { + // Schedule another animation callback so we retry later. + isAnimationFrameScheduled = true; + localRequestAnimationFrame(animationTick); + } } }; // Assumes that we have addEventListener in this environment. Might need @@ -40889,32 +34166,110 @@ if (!ExecutionEnvironment.canUseDOM) { } }; - rIC = function (callback, options) { - // This assumes that we only schedule one callback at a time because that's - // how Fiber uses it. - scheduledRICCallback = callback; + scheduleWork = function (callback, options) /* CallbackConfigType */{ + var timeoutTime = -1; if (options != null && typeof options.timeout === 'number') { - timeoutTime = now() + options.timeout; + timeoutTime = now$1() + options.timeout; } + if (nextSoonestTimeoutTime === -1 || timeoutTime !== -1 && timeoutTime < nextSoonestTimeoutTime) { + nextSoonestTimeoutTime = timeoutTime; + } + + var scheduledCallbackConfig = { + scheduledCallback: callback, + timeoutTime: timeoutTime, + prev: null, + next: null + }; + if (headOfPendingCallbacksLinkedList === null) { + // Make this callback the head and tail of our list + headOfPendingCallbacksLinkedList = scheduledCallbackConfig; + tailOfPendingCallbacksLinkedList = scheduledCallbackConfig; + } else { + // Add latest callback as the new tail of the list + scheduledCallbackConfig.prev = tailOfPendingCallbacksLinkedList; + // renaming for clarity + var oldTailOfPendingCallbacksLinkedList = tailOfPendingCallbacksLinkedList; + if (oldTailOfPendingCallbacksLinkedList !== null) { + oldTailOfPendingCallbacksLinkedList.next = scheduledCallbackConfig; + } + tailOfPendingCallbacksLinkedList = scheduledCallbackConfig; + } + if (!isAnimationFrameScheduled) { // If rAF didn't already schedule one, we need to schedule a frame. // TODO: If this rAF doesn't materialize because the browser throttles, we - // might want to still have setTimeout trigger rIC as a backup to ensure + // might want to still have setTimeout trigger scheduleWork as a backup to ensure // that we keep performing work. isAnimationFrameScheduled = true; - requestAnimationFrame(animationTick); + localRequestAnimationFrame(animationTick); } - return 0; + return scheduledCallbackConfig; }; - cIC = function () { - scheduledRICCallback = null; - isIdleScheduled = false; - timeoutTime = -1; + cancelScheduledWork = function (callbackConfig /* CallbackConfigType */ + ) { + if (callbackConfig.prev === null && headOfPendingCallbacksLinkedList !== callbackConfig) { + // this callbackConfig has already been cancelled. + // cancelScheduledWork should be idempotent, a no-op after first call. + return; + } + + /** + * There are four possible cases: + * - Head/nodeToRemove/Tail -> null + * In this case we set Head and Tail to null. + * - Head -> ... middle nodes... -> Tail/nodeToRemove + * In this case we point the middle.next to null and put middle as the new + * Tail. + * - Head/nodeToRemove -> ...middle nodes... -> Tail + * In this case we point the middle.prev at null and move the Head to + * middle. + * - Head -> ... ?some nodes ... -> nodeToRemove -> ... ?some nodes ... -> Tail + * In this case we point the Head.next to the Tail and the Tail.prev to + * the Head. + */ + var next = callbackConfig.next; + var prev = callbackConfig.prev; + callbackConfig.next = null; + callbackConfig.prev = null; + if (next !== null) { + // we have a next + + if (prev !== null) { + // we have a prev + + // callbackConfig is somewhere in the middle of a list of 3 or more nodes. + prev.next = next; + next.prev = prev; + return; + } else { + // there is a next but not a previous one; + // callbackConfig is the head of a list of 2 or more other nodes. + next.prev = null; + headOfPendingCallbacksLinkedList = next; + return; + } + } else { + // there is no next callback config; this must the tail of the list + + if (prev !== null) { + // we have a prev + + // callbackConfig is the tail of a list of 2 or more other nodes. + prev.next = null; + tailOfPendingCallbacksLinkedList = prev; + return; + } else { + // there is no previous callback config; + // callbackConfig is the only thing in the linked list, + // so both head and tail point to it. + headOfPendingCallbacksLinkedList = null; + tailOfPendingCallbacksLinkedList = null; + return; + } + } }; -} else { - rIC = window.requestIdleCallback; - cIC = window.cancelIdleCallback; } var didWarnSelectedSetOnOption = false; @@ -40972,7 +34327,7 @@ function getHostProps$1(element, props) { // TODO: direct imports like some-package/src/* are bad. Fix me. var getCurrentFiberOwnerName$3 = ReactDebugCurrentFiber.getCurrentFiberOwnerName; -var getCurrentFiberStackAddendum$4 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; +var getCurrentFiberStackAddendum$3 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; var didWarnValueDefaultValue$1 = void 0; @@ -40995,7 +34350,7 @@ var valuePropNames = ['value', 'defaultValue']; * Validation function for `value` and `defaultValue`. */ function checkSelectPropTypes(props) { - ReactControlledValuePropTypes.checkPropTypes('select', props, getCurrentFiberStackAddendum$4); + ReactControlledValuePropTypes.checkPropTypes('select', props, getCurrentFiberStackAddendum$3); for (var i = 0; i < valuePropNames.length; i++) { var propName = valuePropNames[i]; @@ -41139,7 +34494,7 @@ function restoreControlledState$2(element, props) { } // TODO: direct imports like some-package/src/* are bad. Fix me. -var getCurrentFiberStackAddendum$5 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; +var getCurrentFiberStackAddendum$4 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; var didWarnValDefaultVal = false; @@ -41181,7 +34536,7 @@ function getHostProps$3(element, props) { function initWrapperState$2(element, props) { var node = element; { - ReactControlledValuePropTypes.checkPropTypes('textarea', props, getCurrentFiberStackAddendum$5); + ReactControlledValuePropTypes.checkPropTypes('textarea', props, getCurrentFiberStackAddendum$4); if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) { warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components'); didWarnValDefaultVal = true; @@ -41628,6 +34983,7 @@ var omittedCloseTags = { source: true, track: true, wbr: true + // NOTE: menuitem's close tag should be omitted, but that causes problems. }; // For HTML, certain tags cannot have children. This has the same purpose as @@ -41652,7 +35008,7 @@ function assertValidProps(tag, props, getStack) { !(typeof props.dangerouslySetInnerHTML === 'object' && HTML$1 in props.dangerouslySetInnerHTML) ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : void 0; } { - warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.%s', getStack()); + !(props.suppressContentEditableWarning || !props.contentEditable || props.children == null) ? warning(false, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.%s', getStack()) : void 0; } !(props.style == null || typeof props.style === 'object') ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \'em\'}} when using JSX.%s', getStack()) : void 0; } @@ -41708,7 +35064,7 @@ var possibleStandardNames = { checked: 'checked', children: 'children', cite: 'cite', - 'class': 'className', + class: 'className', classid: 'classID', classname: 'className', cols: 'cols', @@ -41723,7 +35079,7 @@ var possibleStandardNames = { dangerouslysetinnerhtml: 'dangerouslySetInnerHTML', data: 'data', datetime: 'dateTime', - 'default': 'default', + default: 'default', defaultchecked: 'defaultChecked', defaultvalue: 'defaultValue', defer: 'defer', @@ -41732,7 +35088,7 @@ var possibleStandardNames = { download: 'download', draggable: 'draggable', enctype: 'encType', - 'for': 'htmlFor', + for: 'htmlFor', form: 'form', formmethod: 'formMethod', formaction: 'formAction', @@ -41950,7 +35306,7 @@ var possibleStandardNames = { imagerendering: 'imageRendering', 'image-rendering': 'imageRendering', in2: 'in2', - 'in': 'in', + in: 'in', inlist: 'inlist', intercept: 'intercept', k1: 'k1', @@ -42090,7 +35446,7 @@ var possibleStandardNames = { 'text-rendering': 'textRendering', to: 'to', transform: 'transform', - 'typeof': 'typeof', + typeof: 'typeof', u1: 'u1', u2: 'u2', underlineposition: 'underlinePosition', @@ -42486,7 +35842,7 @@ function validateProperties$2(type, props, canUseEventSystem) { // TODO: direct imports like some-package/src/* are bad. Fix me. var getCurrentFiberOwnerName$2 = ReactDebugCurrentFiber.getCurrentFiberOwnerName; -var getCurrentFiberStackAddendum$3 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; +var getCurrentFiberStackAddendum$2 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; var didWarnInvalidHydration = false; var didWarnShadyDOM = false; @@ -42517,7 +35873,7 @@ var normalizeMarkupForTextOrAttribute = void 0; var normalizeHTML = void 0; { - getStack = getCurrentFiberStackAddendum$3; + getStack = getCurrentFiberStackAddendum$2; warnedUnknownTags = { // Chrome is the only major browser not shipping