@telsho/react-google-flight-datepicker 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/dist/index.js +2695 -0
- package/dist/index.js.LICENSE.txt +15 -0
- package/dist/index.js.map +1 -0
- package/dist/main.025918794aff780e9b1d.hot-update.js +30 -0
- package/dist/main.025918794aff780e9b1d.hot-update.json +1 -0
- package/dist/main.044294ca27b6ca01c661.hot-update.js +30 -0
- package/dist/main.044294ca27b6ca01c661.hot-update.json +1 -0
- package/dist/main.0533a7c98aeaac5ce3d8.hot-update.js +30 -0
- package/dist/main.0533a7c98aeaac5ce3d8.hot-update.json +1 -0
- package/dist/main.056b57c0725941e3650b.hot-update.js +30 -0
- package/dist/main.056b57c0725941e3650b.hot-update.json +1 -0
- package/dist/main.092d001cb8594ad3445c.hot-update.js +30 -0
- package/dist/main.092d001cb8594ad3445c.hot-update.json +1 -0
- package/dist/main.0b40d710fdb61607ca92.hot-update.js +30 -0
- package/dist/main.0b40d710fdb61607ca92.hot-update.json +1 -0
- package/dist/main.0b668036a4e0b4be29ea.hot-update.js +30 -0
- package/dist/main.0b668036a4e0b4be29ea.hot-update.json +1 -0
- package/dist/main.0b8182373a80ce6adcd4.hot-update.js +30 -0
- package/dist/main.0b8182373a80ce6adcd4.hot-update.json +1 -0
- package/dist/main.0cd9afbd63345720eff5.hot-update.js +30 -0
- package/dist/main.0cd9afbd63345720eff5.hot-update.json +1 -0
- package/dist/main.0d0ad9d8542c0b6ac09f.hot-update.js +30 -0
- package/dist/main.0d0ad9d8542c0b6ac09f.hot-update.json +1 -0
- package/dist/main.0f05f82c0ff5b58ae919.hot-update.js +2164 -0
- package/dist/main.0f05f82c0ff5b58ae919.hot-update.json +1 -0
- package/dist/main.11169e070bb982e766bc.hot-update.js +30 -0
- package/dist/main.11169e070bb982e766bc.hot-update.json +1 -0
- package/dist/main.111ffcb223dbb0c33948.hot-update.js +30 -0
- package/dist/main.111ffcb223dbb0c33948.hot-update.json +1 -0
- package/dist/main.11e261a238ef819a4f41.hot-update.js +30 -0
- package/dist/main.11e261a238ef819a4f41.hot-update.json +1 -0
- package/dist/main.122721cf4e3a4ff93058.hot-update.js +30 -0
- package/dist/main.122721cf4e3a4ff93058.hot-update.json +1 -0
- package/dist/main.129d289cd1f0f0a269a5.hot-update.js +30 -0
- package/dist/main.129d289cd1f0f0a269a5.hot-update.json +1 -0
- package/dist/main.141434a3b2f7ae42ebf9.hot-update.js +30 -0
- package/dist/main.141434a3b2f7ae42ebf9.hot-update.json +1 -0
- package/dist/main.1461ba6ceec10ed6f7a8.hot-update.js +30 -0
- package/dist/main.1461ba6ceec10ed6f7a8.hot-update.json +1 -0
- package/dist/main.151f867e4a83e35ec2f3.hot-update.js +30 -0
- package/dist/main.151f867e4a83e35ec2f3.hot-update.json +1 -0
- package/dist/main.178f03520140160eef82.hot-update.js +30 -0
- package/dist/main.178f03520140160eef82.hot-update.json +1 -0
- package/dist/main.1d741790612b116341f2.hot-update.js +2175 -0
- package/dist/main.1d741790612b116341f2.hot-update.json +1 -0
- package/dist/main.1eba185ac80a149bb353.hot-update.js +30 -0
- package/dist/main.1eba185ac80a149bb353.hot-update.json +1 -0
- package/dist/main.1ffe94b84f4072582050.hot-update.js +30 -0
- package/dist/main.1ffe94b84f4072582050.hot-update.json +1 -0
- package/dist/main.23bd339a5760f7f53a14.hot-update.js +30 -0
- package/dist/main.23bd339a5760f7f53a14.hot-update.json +1 -0
- package/dist/main.24107fa238864f6a864c.hot-update.js +30 -0
- package/dist/main.24107fa238864f6a864c.hot-update.json +1 -0
- package/dist/main.26a28e503395246beb5f.hot-update.js +30 -0
- package/dist/main.26a28e503395246beb5f.hot-update.json +1 -0
- package/dist/main.2750f4b0eb5f32b07157.hot-update.js +30 -0
- package/dist/main.2750f4b0eb5f32b07157.hot-update.json +1 -0
- package/dist/main.275806ed9761d3210a95.hot-update.js +2419 -0
- package/dist/main.275806ed9761d3210a95.hot-update.json +1 -0
- package/dist/main.297e56b17aa6871fff75.hot-update.js +30 -0
- package/dist/main.297e56b17aa6871fff75.hot-update.json +1 -0
- package/dist/main.2aeace13271ebcfb2704.hot-update.js +30 -0
- package/dist/main.2aeace13271ebcfb2704.hot-update.json +1 -0
- package/dist/main.2b2836488b79eb603fbb.hot-update.js +30 -0
- package/dist/main.2b2836488b79eb603fbb.hot-update.json +1 -0
- package/dist/main.2bb22a82ee1e0a334577.hot-update.js +30 -0
- package/dist/main.2bb22a82ee1e0a334577.hot-update.json +1 -0
- package/dist/main.2e3d1d434e8a2b287cb7.hot-update.js +30 -0
- package/dist/main.2e3d1d434e8a2b287cb7.hot-update.json +1 -0
- package/dist/main.2ec6ae91ede1c23816c7.hot-update.js +30 -0
- package/dist/main.2ec6ae91ede1c23816c7.hot-update.json +1 -0
- package/dist/main.314f007c8f3b2a4950dd.hot-update.js +30 -0
- package/dist/main.314f007c8f3b2a4950dd.hot-update.json +1 -0
- package/dist/main.3163ad5b45758eb0f961.hot-update.js +30 -0
- package/dist/main.3163ad5b45758eb0f961.hot-update.json +1 -0
- package/dist/main.31fc5329aea01841e7da.hot-update.js +30 -0
- package/dist/main.31fc5329aea01841e7da.hot-update.json +1 -0
- package/dist/main.32c9f661467eb557c292.hot-update.js +30 -0
- package/dist/main.32c9f661467eb557c292.hot-update.json +1 -0
- package/dist/main.341de1a54dd5981a5c65.hot-update.js +30 -0
- package/dist/main.341de1a54dd5981a5c65.hot-update.json +1 -0
- package/dist/main.3464354777b2bbec9598.hot-update.js +30 -0
- package/dist/main.3464354777b2bbec9598.hot-update.json +1 -0
- package/dist/main.349d8d21a4f96cab7a45.hot-update.js +30 -0
- package/dist/main.349d8d21a4f96cab7a45.hot-update.json +1 -0
- package/dist/main.355c11cdd80f88139ef9.hot-update.js +30 -0
- package/dist/main.355c11cdd80f88139ef9.hot-update.json +1 -0
- package/dist/main.35dbfb54a6f53379a4f9.hot-update.js +30 -0
- package/dist/main.35dbfb54a6f53379a4f9.hot-update.json +1 -0
- package/dist/main.3895fc1a66496584d6a7.hot-update.js +30 -0
- package/dist/main.3895fc1a66496584d6a7.hot-update.json +1 -0
- package/dist/main.3984e1ed1011f527948a.hot-update.js +30 -0
- package/dist/main.3984e1ed1011f527948a.hot-update.json +1 -0
- package/dist/main.3b5e4c764839e984cfde.hot-update.js +30 -0
- package/dist/main.3b5e4c764839e984cfde.hot-update.json +1 -0
- package/dist/main.3d331dc3fce74d09f201.hot-update.js +30 -0
- package/dist/main.3d331dc3fce74d09f201.hot-update.json +1 -0
- package/dist/main.4019dbe46582a2cdc059.hot-update.js +30 -0
- package/dist/main.4019dbe46582a2cdc059.hot-update.json +1 -0
- package/dist/main.40cc542f11541170bc5f.hot-update.js +30 -0
- package/dist/main.40cc542f11541170bc5f.hot-update.json +1 -0
- package/dist/main.45b2ca53bbe264322041.hot-update.js +30 -0
- package/dist/main.45b2ca53bbe264322041.hot-update.json +1 -0
- package/dist/main.45b76f632bb03fc142f7.hot-update.js +30 -0
- package/dist/main.45b76f632bb03fc142f7.hot-update.json +1 -0
- package/dist/main.46d854afd481320b78d3.hot-update.js +30 -0
- package/dist/main.46d854afd481320b78d3.hot-update.json +1 -0
- package/dist/main.470ac3e93cd258531980.hot-update.js +182 -0
- package/dist/main.470ac3e93cd258531980.hot-update.json +1 -0
- package/dist/main.48c494bc47c4963b01ca.hot-update.js +30 -0
- package/dist/main.48c494bc47c4963b01ca.hot-update.json +1 -0
- package/dist/main.519de457e9acdb4eff02.hot-update.js +30 -0
- package/dist/main.519de457e9acdb4eff02.hot-update.json +1 -0
- package/dist/main.526a6d74cdcef457ffe5.hot-update.js +30 -0
- package/dist/main.526a6d74cdcef457ffe5.hot-update.json +1 -0
- package/dist/main.58b4ed990550cfc7402d.hot-update.js +30 -0
- package/dist/main.58b4ed990550cfc7402d.hot-update.json +1 -0
- package/dist/main.592efa50bc359d9b3a60.hot-update.js +30 -0
- package/dist/main.592efa50bc359d9b3a60.hot-update.json +1 -0
- package/dist/main.5b7db960c563487a4fed.hot-update.js +29 -0
- package/dist/main.5b7db960c563487a4fed.hot-update.json +1 -0
- package/dist/main.5b8fa5192779a877e1b6.hot-update.js +30 -0
- package/dist/main.5b8fa5192779a877e1b6.hot-update.json +1 -0
- package/dist/main.5ba810dbfb6f598daf50.hot-update.js +30 -0
- package/dist/main.5ba810dbfb6f598daf50.hot-update.json +1 -0
- package/dist/main.5d24fe8ccc190a1af23a.hot-update.js +30 -0
- package/dist/main.5d24fe8ccc190a1af23a.hot-update.json +1 -0
- package/dist/main.5d2cad07a3529d7e3657.hot-update.js +40 -0
- package/dist/main.5d2cad07a3529d7e3657.hot-update.json +1 -0
- package/dist/main.5d6812c9640d00a40532.hot-update.js +552 -0
- package/dist/main.5d6812c9640d00a40532.hot-update.json +1 -0
- package/dist/main.617b7fb1e3fd27331a1a.hot-update.js +30 -0
- package/dist/main.617b7fb1e3fd27331a1a.hot-update.json +1 -0
- package/dist/main.6381356d30534df29847.hot-update.js +30 -0
- package/dist/main.6381356d30534df29847.hot-update.json +1 -0
- package/dist/main.65342356cfede9a1a70b.hot-update.js +30 -0
- package/dist/main.65342356cfede9a1a70b.hot-update.json +1 -0
- package/dist/main.68b1e70694619f349f82.hot-update.js +30 -0
- package/dist/main.68b1e70694619f349f82.hot-update.json +1 -0
- package/dist/main.6c26d2389ce0c8ebd1a5.hot-update.js +40 -0
- package/dist/main.6c26d2389ce0c8ebd1a5.hot-update.json +1 -0
- package/dist/main.6ce02d8a829dd58c1ebe.hot-update.js +30 -0
- package/dist/main.6ce02d8a829dd58c1ebe.hot-update.json +1 -0
- package/dist/main.71615127f2e5d66e0622.hot-update.js +30 -0
- package/dist/main.71615127f2e5d66e0622.hot-update.json +1 -0
- package/dist/main.73de710c29dcb56dcddb.hot-update.js +30 -0
- package/dist/main.73de710c29dcb56dcddb.hot-update.json +1 -0
- package/dist/main.76168193203c4992b528.hot-update.js +30 -0
- package/dist/main.76168193203c4992b528.hot-update.json +1 -0
- package/dist/main.76ce7cd27c7d9d230465.hot-update.js +30 -0
- package/dist/main.76ce7cd27c7d9d230465.hot-update.json +1 -0
- package/dist/main.7733f2bdeda94454335e.hot-update.js +30 -0
- package/dist/main.7733f2bdeda94454335e.hot-update.json +1 -0
- package/dist/main.7742128986a2ba6fdbc8.hot-update.js +30 -0
- package/dist/main.7742128986a2ba6fdbc8.hot-update.json +1 -0
- package/dist/main.78ff928b56260d1669e0.hot-update.js +30 -0
- package/dist/main.78ff928b56260d1669e0.hot-update.json +1 -0
- package/dist/main.7981ec25b44bc4e2310d.hot-update.js +30 -0
- package/dist/main.7981ec25b44bc4e2310d.hot-update.json +1 -0
- package/dist/main.79bebd31338c86731599.hot-update.js +30 -0
- package/dist/main.79bebd31338c86731599.hot-update.json +1 -0
- package/dist/main.7df4503c880fcebce871.hot-update.js +542 -0
- package/dist/main.7df4503c880fcebce871.hot-update.json +1 -0
- package/dist/main.7e93f94ad4e5608400c6.hot-update.js +30 -0
- package/dist/main.7e93f94ad4e5608400c6.hot-update.json +1 -0
- package/dist/main.7efc54680c3f5d2a3fc4.hot-update.js +30 -0
- package/dist/main.7efc54680c3f5d2a3fc4.hot-update.json +1 -0
- package/dist/main.829689ced3c13e2cef59.hot-update.js +30 -0
- package/dist/main.829689ced3c13e2cef59.hot-update.json +1 -0
- package/dist/main.84ec3efea5281992968f.hot-update.js +30 -0
- package/dist/main.84ec3efea5281992968f.hot-update.json +1 -0
- package/dist/main.8727fb894f01ed6d04f7.hot-update.js +29 -0
- package/dist/main.8727fb894f01ed6d04f7.hot-update.json +1 -0
- package/dist/main.8a4ea4d0f7eb4ae7ee08.hot-update.js +30 -0
- package/dist/main.8a4ea4d0f7eb4ae7ee08.hot-update.json +1 -0
- package/dist/main.8d0ca5cbf4301f781468.hot-update.js +30 -0
- package/dist/main.8d0ca5cbf4301f781468.hot-update.json +1 -0
- package/dist/main.8d495798d0f234b2cc69.hot-update.js +30 -0
- package/dist/main.8d495798d0f234b2cc69.hot-update.json +1 -0
- package/dist/main.90486c617fcd3000975c.hot-update.js +30 -0
- package/dist/main.90486c617fcd3000975c.hot-update.json +1 -0
- package/dist/main.93de5527979217bacad5.hot-update.js +30 -0
- package/dist/main.93de5527979217bacad5.hot-update.json +1 -0
- package/dist/main.96d045af450824ce4ada.hot-update.js +30 -0
- package/dist/main.96d045af450824ce4ada.hot-update.json +1 -0
- package/dist/main.98ab5be337d8e658b069.hot-update.js +30 -0
- package/dist/main.98ab5be337d8e658b069.hot-update.json +1 -0
- package/dist/main.9b87bc0dc4b2be59b5cc.hot-update.js +30 -0
- package/dist/main.9b87bc0dc4b2be59b5cc.hot-update.json +1 -0
- package/dist/main.9ba0a7968074b13d93bb.hot-update.js +30 -0
- package/dist/main.9ba0a7968074b13d93bb.hot-update.json +1 -0
- package/dist/main.9d45fb7b681e3c7225a8.hot-update.js +30 -0
- package/dist/main.9d45fb7b681e3c7225a8.hot-update.json +1 -0
- package/dist/main.9d91efc7b9b7b7c44673.hot-update.js +30 -0
- package/dist/main.9d91efc7b9b7b7c44673.hot-update.json +1 -0
- package/dist/main.9dc39afb72d7ca539e43.hot-update.js +30 -0
- package/dist/main.9dc39afb72d7ca539e43.hot-update.json +1 -0
- package/dist/main.9e9098658f5e37d56994.hot-update.js +30 -0
- package/dist/main.9e9098658f5e37d56994.hot-update.json +1 -0
- package/dist/main.a03e5b3af190d491da36.hot-update.js +30 -0
- package/dist/main.a03e5b3af190d491da36.hot-update.json +1 -0
- package/dist/main.a2ac0e785b82a1b0ba60.hot-update.js +30 -0
- package/dist/main.a2ac0e785b82a1b0ba60.hot-update.json +1 -0
- package/dist/main.a2cdd4bfa66ba18fea96.hot-update.js +30 -0
- package/dist/main.a2cdd4bfa66ba18fea96.hot-update.json +1 -0
- package/dist/main.a2e2e0e7f7fb44e704b2.hot-update.js +30 -0
- package/dist/main.a2e2e0e7f7fb44e704b2.hot-update.json +1 -0
- package/dist/main.a5b47171d3662f8b2151.hot-update.js +30 -0
- package/dist/main.a5b47171d3662f8b2151.hot-update.json +1 -0
- package/dist/main.a77024b8e6afe472b4e9.hot-update.js +30 -0
- package/dist/main.a77024b8e6afe472b4e9.hot-update.json +1 -0
- package/dist/main.b02b8475fe462034fd6a.hot-update.js +30 -0
- package/dist/main.b02b8475fe462034fd6a.hot-update.json +1 -0
- package/dist/main.b18b3228fe8d96a29f95.hot-update.js +30 -0
- package/dist/main.b18b3228fe8d96a29f95.hot-update.json +1 -0
- package/dist/main.b52368543d1183f364fc.hot-update.js +30 -0
- package/dist/main.b52368543d1183f364fc.hot-update.json +1 -0
- package/dist/main.c3b57ff531a1565c1a71.hot-update.js +30 -0
- package/dist/main.c3b57ff531a1565c1a71.hot-update.json +1 -0
- package/dist/main.c4963dd591be179bad70.hot-update.js +30 -0
- package/dist/main.c4963dd591be179bad70.hot-update.json +1 -0
- package/dist/main.c744370517a766d269b3.hot-update.js +30 -0
- package/dist/main.c744370517a766d269b3.hot-update.json +1 -0
- package/dist/main.c835b513a7c61f6463f5.hot-update.js +30 -0
- package/dist/main.c835b513a7c61f6463f5.hot-update.json +1 -0
- package/dist/main.c893bdc58a0cbf634d84.hot-update.js +1838 -0
- package/dist/main.c893bdc58a0cbf634d84.hot-update.json +1 -0
- package/dist/main.c95d0239fa3dfb699f31.hot-update.js +30 -0
- package/dist/main.c95d0239fa3dfb699f31.hot-update.json +1 -0
- package/dist/main.c9b787182bf4ad3d947e.hot-update.js +30 -0
- package/dist/main.c9b787182bf4ad3d947e.hot-update.json +1 -0
- package/dist/main.c9f118efa9a03df02515.hot-update.js +30 -0
- package/dist/main.c9f118efa9a03df02515.hot-update.json +1 -0
- package/dist/main.ca65648adc4cfa5ff441.hot-update.js +30 -0
- package/dist/main.ca65648adc4cfa5ff441.hot-update.json +1 -0
- package/dist/main.cb57d0d413654ee199a8.hot-update.js +30 -0
- package/dist/main.cb57d0d413654ee199a8.hot-update.json +1 -0
- package/dist/main.cde915183507bce10c1d.hot-update.js +30 -0
- package/dist/main.cde915183507bce10c1d.hot-update.json +1 -0
- package/dist/main.cec3b34708c9854bfe36.hot-update.js +30 -0
- package/dist/main.cec3b34708c9854bfe36.hot-update.json +1 -0
- package/dist/main.cec8a1ddbdcd732f5c62.hot-update.js +30 -0
- package/dist/main.cec8a1ddbdcd732f5c62.hot-update.json +1 -0
- package/dist/main.d16e697eefb70ed0d9ba.hot-update.js +30 -0
- package/dist/main.d16e697eefb70ed0d9ba.hot-update.json +1 -0
- package/dist/main.d1d1a11d8f957024270d.hot-update.js +30 -0
- package/dist/main.d1d1a11d8f957024270d.hot-update.json +1 -0
- package/dist/main.d38f6e5bd71a4315a7a7.hot-update.js +30 -0
- package/dist/main.d38f6e5bd71a4315a7a7.hot-update.json +1 -0
- package/dist/main.d4ba5511d55e22b03d74.hot-update.js +30 -0
- package/dist/main.d4ba5511d55e22b03d74.hot-update.json +1 -0
- package/dist/main.d52ba23192b8f34efeeb.hot-update.js +30 -0
- package/dist/main.d52ba23192b8f34efeeb.hot-update.json +1 -0
- package/dist/main.d5d03868547ac6f32084.hot-update.js +30 -0
- package/dist/main.d5d03868547ac6f32084.hot-update.json +1 -0
- package/dist/main.d669ba1f935d53fb9136.hot-update.js +30 -0
- package/dist/main.d669ba1f935d53fb9136.hot-update.json +1 -0
- package/dist/main.d791ef59ad8f7243965b.hot-update.js +30 -0
- package/dist/main.d791ef59ad8f7243965b.hot-update.json +1 -0
- package/dist/main.d85bdd9b025ac5208bc7.hot-update.js +40 -0
- package/dist/main.d85bdd9b025ac5208bc7.hot-update.json +1 -0
- package/dist/main.d8d11b80df0a07c7b2ef.hot-update.js +30 -0
- package/dist/main.d8d11b80df0a07c7b2ef.hot-update.json +1 -0
- package/dist/main.db6860befdff6e055b8b.hot-update.js +30 -0
- package/dist/main.db6860befdff6e055b8b.hot-update.json +1 -0
- package/dist/main.dbfe2330eea43a71d3b6.hot-update.js +50 -0
- package/dist/main.dbfe2330eea43a71d3b6.hot-update.json +1 -0
- package/dist/main.dc80c98ea07932f1adfb.hot-update.js +30 -0
- package/dist/main.dc80c98ea07932f1adfb.hot-update.json +1 -0
- package/dist/main.defad87009f6e52a27a1.hot-update.js +30 -0
- package/dist/main.defad87009f6e52a27a1.hot-update.json +1 -0
- package/dist/main.e29e87d2b76a6fe139ba.hot-update.js +30 -0
- package/dist/main.e29e87d2b76a6fe139ba.hot-update.json +1 -0
- package/dist/main.e29f27b3c54e98493a08.hot-update.js +29 -0
- package/dist/main.e29f27b3c54e98493a08.hot-update.json +1 -0
- package/dist/main.e7ca76d181fd78b3c936.hot-update.js +30 -0
- package/dist/main.e7ca76d181fd78b3c936.hot-update.json +1 -0
- package/dist/main.e91fd4ef84437b12542f.hot-update.js +30 -0
- package/dist/main.e91fd4ef84437b12542f.hot-update.json +1 -0
- package/dist/main.ea2959675c85ede4a1e2.hot-update.js +30 -0
- package/dist/main.ea2959675c85ede4a1e2.hot-update.json +1 -0
- package/dist/main.ea689d79e725d66f8ab6.hot-update.js +30 -0
- package/dist/main.ea689d79e725d66f8ab6.hot-update.json +1 -0
- package/dist/main.ea8f8af8ef2a488e45b7.hot-update.js +30 -0
- package/dist/main.ea8f8af8ef2a488e45b7.hot-update.json +1 -0
- package/dist/main.ead549ac59810a734b1e.hot-update.js +30 -0
- package/dist/main.ead549ac59810a734b1e.hot-update.json +1 -0
- package/dist/main.ecdf6ef1b0ebff3cedc1.hot-update.js +30 -0
- package/dist/main.ecdf6ef1b0ebff3cedc1.hot-update.json +1 -0
- package/dist/main.ed9fc050c1c503354148.hot-update.js +30 -0
- package/dist/main.ed9fc050c1c503354148.hot-update.json +1 -0
- package/dist/main.ee63f73839c6714b8006.hot-update.js +30 -0
- package/dist/main.ee63f73839c6714b8006.hot-update.json +1 -0
- package/dist/main.f54143832ecbca4cc59b.hot-update.js +30 -0
- package/dist/main.f54143832ecbca4cc59b.hot-update.json +1 -0
- package/dist/main.f8449d9273e777ffe31e.hot-update.js +30 -0
- package/dist/main.f8449d9273e777ffe31e.hot-update.json +1 -0
- package/dist/main.fb18dab42b42561a3684.hot-update.js +30 -0
- package/dist/main.fb18dab42b42561a3684.hot-update.json +1 -0
- package/dist/main.fc3b7576c573bd90cf15.hot-update.js +30 -0
- package/dist/main.fc3b7576c573bd90cf15.hot-update.json +1 -0
- package/dist/main.fd2756b9ca60317e1280.hot-update.js +30 -0
- package/dist/main.fd2756b9ca60317e1280.hot-update.json +1 -0
- package/dist/main.feed1ad25e0d7378d534.hot-update.js +30 -0
- package/dist/main.feed1ad25e0d7378d534.hot-update.json +1 -0
- package/dist/main.ff62219bf42198e19f96.hot-update.js +30 -0
- package/dist/main.ff62219bf42198e19f96.hot-update.json +1 -0
- package/dist/node_modules_dayjs_locale_af_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_am_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar-dz_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar-iq_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar-kw_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar-ly_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar-ma_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar-sa_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar-tn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ar_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_az_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_be_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_bg_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_bi_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_bm_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_bn-bd_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_bn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_bo_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_br_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_bs_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ca_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_cs_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_cv_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_cy_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_da_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_de-at_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_de-ch_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_de_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_dv_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_el_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-au_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-ca_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-gb_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-ie_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-il_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-in_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-nz_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-sg_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en-tt_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_en_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_eo_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_es-do_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_es-mx_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_es-pr_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_es-us_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_es_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_et_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_eu_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_fa_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_fi_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_fo_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_fr-ca_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_fr-ch_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_fr_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_fy_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ga_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_gd_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_gl_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_gom-latn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_gu_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_he_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_hi_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_hr_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ht_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_hu_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_hy-am_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_id_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_index_d_ts.index.js +21 -0
- package/dist/node_modules_dayjs_locale_is_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_it-ch_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_it_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ja_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_jv_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ka_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_kk_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_km_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_kn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ko_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ku_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ky_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_lb_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_lo_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_lt_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_lv_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_me_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_mi_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_mk_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ml_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_mn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_mr_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ms-my_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ms_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_mt_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_my_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_nb_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ne_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_nl-be_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_nl_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_nn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_oc-lnc_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_pa-in_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_pl_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_pt-br_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_pt_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_rn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ro_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ru_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_rw_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sd_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_se_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_si_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sk_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sl_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sq_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sr-cyrl_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sr_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ss_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sv-fi_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sv_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_sw_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ta_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_te_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tet_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tg_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_th_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tk_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tl-ph_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tlh_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tr_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_types_d_ts.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tzl_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tzm-latn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_tzm_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ug-cn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_uk_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_ur_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_uz-latn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_uz_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_vi_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_x-pseudo_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_yo_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_zh-cn_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_zh-hk_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_zh-tw_js.index.js +21 -0
- package/dist/node_modules_dayjs_locale_zh_js.index.js +21 -0
- package/dist/styles.css +3 -0
- package/dist/styles.css.map +1 -0
- package/package.json +146 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
4
|
+
* This devtool is neither made for production nor for readable output files.
|
|
5
|
+
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
6
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
7
|
+
* or disable the default devtool with "devtool: false".
|
|
8
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
9
|
+
*/
|
|
10
|
+
self["webpackHotUpdate_telsho_google_flight_datepicker"]("main",{
|
|
11
|
+
|
|
12
|
+
/***/ "./src/lib/assets/svg/back.svg":
|
|
13
|
+
/*!*************************************!*\
|
|
14
|
+
!*** ./src/lib/assets/svg/back.svg ***!
|
|
15
|
+
\*************************************/
|
|
16
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
17
|
+
|
|
18
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\nvar _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n\nvar SvgBack = function SvgBack(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 492 492\"\n }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n d: \"m464.3 207.4.8.2H136l103.5-103.7c5-5.1 7.8-12 7.8-19.2s-2.7-14-7.8-19l-16.1-16.2c-5-5-11.8-7.8-19-7.8s-14 2.8-19 7.8L7.8 227c-5 5-7.8 11.8-7.8 19 0 7.3 2.8 14 7.8 19.2l177.5 177.4c5 5 11.8 7.8 19 7.8s14-2.8 19-7.8l16-16.1a26.6 26.6 0 0 0 0-37.7L134.8 284.4h330a27.9 27.9 0 0 0 27.3-27.6V234a27.3 27.3 0 0 0-27.7-26.6z\"\n })));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgBack);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2Fzc2V0cy9zdmcvYmFjay5zdmciLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQSxzQkFBc0Isd0VBQXdFLGdCQUFnQixzQkFBc0IsT0FBTyxzQkFBc0Isb0JBQW9CLGdEQUFnRCxXQUFXO0FBQ2pOO0FBQy9CO0FBQ0Esc0JBQXNCLGdEQUFtQjtBQUN6QztBQUNBO0FBQ0EsR0FBRyx5Q0FBeUMsZ0RBQW1CO0FBQy9EO0FBQ0EsR0FBRztBQUNIO0FBQ0EsaUVBQWUsT0FBTyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0ZWxzaG8vZ29vZ2xlLWZsaWdodC1kYXRlcGlja2VyLy4vc3JjL2xpYi9hc3NldHMvc3ZnL2JhY2suc3ZnPzJmMjkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9wYXRoO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbnZhciBTdmdCYWNrID0gZnVuY3Rpb24gU3ZnQmFjayhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgNDkyIDQ5MlwiXG4gIH0sIHByb3BzKSwgX3BhdGggfHwgKF9wYXRoID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIm00NjQuMyAyMDcuNC44LjJIMTM2bDEwMy41LTEwMy43YzUtNS4xIDcuOC0xMiA3LjgtMTkuMnMtMi43LTE0LTcuOC0xOWwtMTYuMS0xNi4yYy01LTUtMTEuOC03LjgtMTktNy44cy0xNCAyLjgtMTkgNy44TDcuOCAyMjdjLTUgNS03LjggMTEuOC03LjggMTkgMCA3LjMgMi44IDE0IDcuOCAxOS4ybDE3Ny41IDE3Ny40YzUgNSAxMS44IDcuOCAxOSA3LjhzMTQtMi44IDE5LTcuOGwxNi0xNi4xYTI2LjYgMjYuNiAwIDAgMCAwLTM3LjdMMTM0LjggMjg0LjRoMzMwYTI3LjkgMjcuOSAwIDAgMCAyNy4zLTI3LjZWMjM0YTI3LjMgMjcuMyAwIDAgMC0yNy43LTI2LjZ6XCJcbiAgfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBTdmdCYWNrOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/lib/assets/svg/back.svg\n");
|
|
19
|
+
|
|
20
|
+
/***/ }),
|
|
21
|
+
|
|
22
|
+
/***/ "./src/lib/components/DatePicker/Day.js":
|
|
23
|
+
/*!**********************************************!*\
|
|
24
|
+
!*** ./src/lib/components/DatePicker/Day.js ***!
|
|
25
|
+
\**********************************************/
|
|
26
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
27
|
+
|
|
28
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n\n\n\n\nvar Day = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (_ref, ref) {\n var _ref$dateIndex = _ref.dateIndex,\n dateIndex = _ref$dateIndex === void 0 ? null : _ref$dateIndex,\n _ref$dateValue = _ref.dateValue,\n dateValue = _ref$dateValue === void 0 ? null : _ref$dateValue,\n _ref$isEndDay = _ref.isEndDay,\n isEndDay = _ref$isEndDay === void 0 ? false : _ref$isEndDay,\n _ref$selected = _ref.selected,\n selected = _ref$selected === void 0 ? false : _ref$selected,\n _ref$hovered = _ref.hovered,\n hovered = _ref$hovered === void 0 ? false : _ref$hovered,\n _ref$disabled = _ref.disabled,\n disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n _ref$onSelectDate = _ref.onSelectDate,\n onSelectDate = _ref$onSelectDate === void 0 ? function () {} : _ref$onSelectDate,\n _ref$onHoverDate = _ref.onHoverDate,\n onHoverDate = _ref$onHoverDate === void 0 ? function () {} : _ref$onHoverDate,\n _ref$totalDay = _ref.totalDay,\n totalDay = _ref$totalDay === void 0 ? null : _ref$totalDay,\n _ref$highlight = _ref.highlight,\n highlight = _ref$highlight === void 0 ? false : _ref$highlight,\n _ref$handleHoverDay = _ref.handleHoverDay,\n handleHoverDay = _ref$handleHoverDay === void 0 ? function () {} : _ref$handleHoverDay,\n _ref$subText = _ref.subText,\n subText = _ref$subText === void 0 ? \"\" : _ref$subText;\n var dayRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n function selectDate(e) {\n e.stopPropagation();\n e.preventDefault();\n if (disabled) return;\n onSelectDate(dateValue);\n }\n function handleHoverDate() {\n if (disabled || !onHoverDate) return;\n onHoverDate(dateValue);\n handleHoverDay(dateValue);\n }\n var handleTooltipPosition = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function () {\n var element = ref.current;\n if (element) {\n element.style.left = \"\".concat(dayRef.current.offsetLeft - element.offsetWidth + 135, \"px\");\n element.style.top = \"\".concat(dayRef.current.offsetTop - element.offsetHeight - 15, \"px\");\n element.style.visibility = \"visible\";\n }\n }, []);\n var handleTooltipHidden = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function () {\n var element = ref == null ? void 0 : ref.current;\n if (element) {\n element.style.visibility = \"hidden\";\n }\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (dayRef.current) {\n dayRef.current.addEventListener(\"mouseover\", handleTooltipPosition);\n dayRef.current.addEventListener(\"mouseleave\", handleTooltipHidden);\n }\n return function () {\n document.removeEventListener(\"mouseover\", handleTooltipPosition);\n document.removeEventListener(\"mouseleave\", handleTooltipHidden);\n };\n }, [dayRef]);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"day\", {\n selected: selected,\n hovered: hovered,\n disabled: disabled,\n highlight: highlight,\n end: isEndDay,\n \"has-subtext\": !!subText\n }),\n onClick: selectDate,\n onMouseEnter: handleHoverDate,\n role: \"button\",\n tabIndex: \"-1\",\n \"data-day-index\": dateIndex,\n \"data-date-value\": dateValue,\n ref: dayRef,\n children: [hovered && !(isEndDay && dateIndex === totalDay) && !(dateIndex === 1 && selected && !isEndDay) && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"background-day\", {\n \"first-day\": dateIndex === 1,\n \"last-day\": dateIndex === totalDay\n })\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n className: \"day-content\",\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n className: \"text-day\",\n children: dateIndex\n }), subText && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n className: \"sub-text\",\n style: {\n position: \"relative\",\n zIndex: 3,\n color: selected && !hovered ? \"#fff\" : \"#666\"\n },\n children: subText\n })]\n })]\n });\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Day);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9EYXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTBFO0FBQ3ZDO0FBQ1A7QUFBQTtBQUU1QixJQUFNVyxHQUFHLGdCQUFHVixpREFBVSxDQUNwQixVQUFBVyxJQUFBLEVBZUVDLEdBQUcsRUFDQTtFQUFBLElBQUFDLGNBQUEsR0FBQUYsSUFBQSxDQWRERyxTQUFTO0lBQVRBLFNBQVMsR0FBQUQsY0FBQSxjQUFHLElBQUksR0FBQUEsY0FBQTtJQUFBRSxjQUFBLEdBQUFKLElBQUEsQ0FDaEJLLFNBQVM7SUFBVEEsU0FBUyxHQUFBRCxjQUFBLGNBQUcsSUFBSSxHQUFBQSxjQUFBO0lBQUFFLGFBQUEsR0FBQU4sSUFBQSxDQUNoQk8sUUFBUTtJQUFSQSxRQUFRLEdBQUFELGFBQUEsY0FBRyxLQUFLLEdBQUFBLGFBQUE7SUFBQUUsYUFBQSxHQUFBUixJQUFBLENBQ2hCUyxRQUFRO0lBQVJBLFFBQVEsR0FBQUQsYUFBQSxjQUFHLEtBQUssR0FBQUEsYUFBQTtJQUFBRSxZQUFBLEdBQUFWLElBQUEsQ0FDaEJXLE9BQU87SUFBUEEsT0FBTyxHQUFBRCxZQUFBLGNBQUcsS0FBSyxHQUFBQSxZQUFBO0lBQUFFLGFBQUEsR0FBQVosSUFBQSxDQUNmYSxRQUFRO0lBQVJBLFFBQVEsR0FBQUQsYUFBQSxjQUFHLEtBQUssR0FBQUEsYUFBQTtJQUFBRSxpQkFBQSxHQUFBZCxJQUFBLENBQ2hCZSxZQUFZO0lBQVpBLFlBQVksR0FBQUQsaUJBQUEsY0FBRyxZQUFNLENBQUMsQ0FBQyxHQUFBQSxpQkFBQTtJQUFBRSxnQkFBQSxHQUFBaEIsSUFBQSxDQUN2QmlCLFdBQVc7SUFBWEEsV0FBVyxHQUFBRCxnQkFBQSxjQUFHLFlBQU0sQ0FBQyxDQUFDLEdBQUFBLGdCQUFBO0lBQUFFLGFBQUEsR0FBQWxCLElBQUEsQ0FDdEJtQixRQUFRO0lBQVJBLFFBQVEsR0FBQUQsYUFBQSxjQUFHLElBQUksR0FBQUEsYUFBQTtJQUFBRSxjQUFBLEdBQUFwQixJQUFBLENBQ2ZxQixTQUFTO0lBQVRBLFNBQVMsR0FBQUQsY0FBQSxjQUFHLEtBQUssR0FBQUEsY0FBQTtJQUFBRSxtQkFBQSxHQUFBdEIsSUFBQSxDQUNqQnVCLGNBQWM7SUFBZEEsY0FBYyxHQUFBRCxtQkFBQSxjQUFHLFlBQU0sQ0FBQyxDQUFDLEdBQUFBLG1CQUFBO0lBQUFFLFlBQUEsR0FBQXhCLElBQUEsQ0FDekJ5QixPQUFPO0lBQVBBLE9BQU8sR0FBQUQsWUFBQSxjQUFHLEVBQUUsR0FBQUEsWUFBQTtFQUlkLElBQU1FLE1BQU0sR0FBR2xDLDZDQUFNLENBQUMsQ0FBQztFQUV2QixTQUFTbUMsVUFBVUEsQ0FBQ0MsQ0FBQyxFQUFFO0lBQ3JCQSxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDO0lBQ25CRCxDQUFDLENBQUNFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xCLElBQUlqQixRQUFRLEVBQUU7SUFDZEUsWUFBWSxDQUFDVixTQUFTLENBQUM7RUFDekI7RUFFQSxTQUFTMEIsZUFBZUEsQ0FBQSxFQUFHO0lBQ3pCLElBQUlsQixRQUFRLElBQUksQ0FBQ0ksV0FBVyxFQUFFO0lBQzlCQSxXQUFXLENBQUNaLFNBQVMsQ0FBQztJQUN0QmtCLGNBQWMsQ0FBQ2xCLFNBQVMsQ0FBQztFQUMzQjtFQUVBLElBQU0yQixxQkFBcUIsR0FBRzFDLGtEQUFXLENBQUMsWUFBTTtJQUM5QyxJQUFNMkMsT0FBTyxHQUFHaEMsR0FBRyxDQUFDaUMsT0FBTztJQUMzQixJQUFJRCxPQUFPLEVBQUU7TUFDWEEsT0FBTyxDQUFDRSxLQUFLLENBQUNDLElBQUksTUFBQUMsTUFBQSxDQUNoQlgsTUFBTSxDQUFDUSxPQUFPLENBQUNJLFVBQVUsR0FBR0wsT0FBTyxDQUFDTSxXQUFXLEdBQUcsR0FBRyxPQUNuRDtNQUNKTixPQUFPLENBQUNFLEtBQUssQ0FBQ0ssR0FBRyxNQUFBSCxNQUFBLENBQ2ZYLE1BQU0sQ0FBQ1EsT0FBTyxDQUFDTyxTQUFTLEdBQUdSLE9BQU8sQ0FBQ1MsWUFBWSxHQUFHLEVBQUUsT0FDbEQ7TUFDSlQsT0FBTyxDQUFDRSxLQUFLLENBQUNRLFVBQVUsR0FBRyxTQUFTO0lBQ3RDO0VBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1DLG1CQUFtQixHQUFHdEQsa0RBQVcsQ0FBQyxZQUFNO0lBQzVDLElBQU0yQyxPQUFPLEdBQUdoQyxHQUFHLG9CQUFIQSxHQUFHLENBQUVpQyxPQUFPO0lBQzVCLElBQUlELE9BQU8sRUFBRTtNQUNYQSxPQUFPLENBQUNFLEtBQUssQ0FBQ1EsVUFBVSxHQUFHLFFBQVE7SUFDckM7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU5wRCxnREFBUyxDQUFDLFlBQU07SUFDZCxJQUFJbUMsTUFBTSxDQUFDUSxPQUFPLEVBQUU7TUFDbEJSLE1BQU0sQ0FBQ1EsT0FBTyxDQUFDVyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUViLHFCQUFxQixDQUFDO01BQ25FTixNQUFNLENBQUNRLE9BQU8sQ0FBQ1csZ0JBQWdCLENBQUMsWUFBWSxFQUFFRCxtQkFBbUIsQ0FBQztJQUNwRTtJQUNBLE9BQU8sWUFBTTtNQUNYRSxRQUFRLENBQUNDLG1CQUFtQixDQUFDLFdBQVcsRUFBRWYscUJBQXFCLENBQUM7TUFDaEVjLFFBQVEsQ0FBQ0MsbUJBQW1CLENBQUMsWUFBWSxFQUFFSCxtQkFBbUIsQ0FBQztJQUNqRSxDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNsQixNQUFNLENBQUMsQ0FBQztFQUVaLG9CQUNFNUIsdURBQUE7SUFDRWtELFNBQVMsRUFBRXRELGlEQUFFLENBQUMsS0FBSyxFQUFFO01BQ25CZSxRQUFRLEVBQVJBLFFBQVE7TUFDUkUsT0FBTyxFQUFQQSxPQUFPO01BQ1BFLFFBQVEsRUFBUkEsUUFBUTtNQUNSUSxTQUFTLEVBQVRBLFNBQVM7TUFDVDRCLEdBQUcsRUFBRTFDLFFBQVE7TUFDYixhQUFhLEVBQUUsQ0FBQyxDQUFDa0I7SUFDbkIsQ0FBQyxDQUFFO0lBQ0h5QixPQUFPLEVBQUV2QixVQUFXO0lBQ3BCd0IsWUFBWSxFQUFFcEIsZUFBZ0I7SUFDOUJxQixJQUFJLEVBQUMsUUFBUTtJQUNiQyxRQUFRLEVBQUMsSUFBSTtJQUNiLGtCQUFnQmxELFNBQVU7SUFDMUIsbUJBQWlCRSxTQUFVO0lBQzNCSixHQUFHLEVBQUV5QixNQUFPO0lBQUE0QixRQUFBLEdBRVgzQyxPQUFPLElBQ04sRUFBRUosUUFBUSxJQUFJSixTQUFTLEtBQUtnQixRQUFRLENBQUMsSUFDckMsRUFBRWhCLFNBQVMsS0FBSyxDQUFDLElBQUlNLFFBQVEsSUFBSSxDQUFDRixRQUFRLENBQUMsaUJBQ3pDWCxzREFBQTtNQUNFb0QsU0FBUyxFQUFFdEQsaURBQUUsQ0FBQyxnQkFBZ0IsRUFBRTtRQUM5QixXQUFXLEVBQUVTLFNBQVMsS0FBSyxDQUFDO1FBQzVCLFVBQVUsRUFBRUEsU0FBUyxLQUFLZ0I7TUFDNUIsQ0FBQztJQUFFLENBQ0osQ0FDRixlQUNIckIsdURBQUE7TUFBS2tELFNBQVMsRUFBQyxhQUFhO01BQUFNLFFBQUEsZ0JBQzFCMUQsc0RBQUE7UUFBS29ELFNBQVMsRUFBQyxVQUFVO1FBQUFNLFFBQUEsRUFBRW5EO01BQVMsQ0FBTSxDQUFDLEVBQzFDc0IsT0FBTyxpQkFDTjdCLHNEQUFBO1FBQ0VvRCxTQUFTLEVBQUMsVUFBVTtRQUNwQmIsS0FBSyxFQUFFO1VBQ0xvQixRQUFRLEVBQUUsVUFBVTtVQUNwQkMsTUFBTSxFQUFFLENBQUM7VUFDVEMsS0FBSyxFQUFHaEQsUUFBUSxJQUFJLENBQUNFLE9BQU8sR0FBSSxNQUFNLEdBQUc7UUFDM0MsQ0FBRTtRQUFBMkMsUUFBQSxFQUVEN0I7TUFBTyxDQUNMLENBQ047SUFBQSxDQUNFLENBQUM7RUFBQSxDQUNILENBQUM7QUFFVixDQUNGLENBQUM7QUFpQkQsaUVBQWUxQixHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRlbHNoby9nb29nbGUtZmxpZ2h0LWRhdGVwaWNrZXIvLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9EYXkuanM/NTEyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcclxuaW1wb3J0IGN4IGZyb20gXCJjbGFzc25hbWVzXCI7XHJcblxyXG5jb25zdCBEYXkgPSBmb3J3YXJkUmVmKFxyXG4gIChcclxuICAgIHtcclxuICAgICAgZGF0ZUluZGV4ID0gbnVsbCxcclxuICAgICAgZGF0ZVZhbHVlID0gbnVsbCxcclxuICAgICAgaXNFbmREYXkgPSBmYWxzZSxcclxuICAgICAgc2VsZWN0ZWQgPSBmYWxzZSxcclxuICAgICAgaG92ZXJlZCA9IGZhbHNlLFxyXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gICAgICBvblNlbGVjdERhdGUgPSAoKSA9PiB7fSxcclxuICAgICAgb25Ib3ZlckRhdGUgPSAoKSA9PiB7fSxcclxuICAgICAgdG90YWxEYXkgPSBudWxsLFxyXG4gICAgICBoaWdobGlnaHQgPSBmYWxzZSxcclxuICAgICAgaGFuZGxlSG92ZXJEYXkgPSAoKSA9PiB7fSxcclxuICAgICAgc3ViVGV4dCA9IFwiXCIsXHJcbiAgICB9LFxyXG4gICAgcmVmXHJcbiAgKSA9PiB7XHJcbiAgICBjb25zdCBkYXlSZWYgPSB1c2VSZWYoKTtcclxuXHJcbiAgICBmdW5jdGlvbiBzZWxlY3REYXRlKGUpIHtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgb25TZWxlY3REYXRlKGRhdGVWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaGFuZGxlSG92ZXJEYXRlKCkge1xyXG4gICAgICBpZiAoZGlzYWJsZWQgfHwgIW9uSG92ZXJEYXRlKSByZXR1cm47XHJcbiAgICAgIG9uSG92ZXJEYXRlKGRhdGVWYWx1ZSk7XHJcbiAgICAgIGhhbmRsZUhvdmVyRGF5KGRhdGVWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG9vbHRpcFBvc2l0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gcmVmLmN1cnJlbnQ7XHJcbiAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7XHJcbiAgICAgICAgICBkYXlSZWYuY3VycmVudC5vZmZzZXRMZWZ0IC0gZWxlbWVudC5vZmZzZXRXaWR0aCArIDEzNVxyXG4gICAgICAgIH1weGA7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtcclxuICAgICAgICAgIGRheVJlZi5jdXJyZW50Lm9mZnNldFRvcCAtIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTVcclxuICAgICAgICB9cHhgO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xyXG4gICAgICB9XHJcbiAgICB9LCBbXSk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG9vbHRpcEhpZGRlbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHJlZj8uY3VycmVudDtcclxuICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgICB9XHJcbiAgICB9LCBbXSk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgaWYgKGRheVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgZGF5UmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwUG9zaXRpb24pO1xyXG4gICAgICAgIGRheVJlZi5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIGhhbmRsZVRvb2x0aXBIaWRkZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwUG9zaXRpb24pO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIGhhbmRsZVRvb2x0aXBIaWRkZW4pO1xyXG4gICAgICB9O1xyXG4gICAgfSwgW2RheVJlZl0pO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2N4KFwiZGF5XCIsIHtcclxuICAgICAgICAgIHNlbGVjdGVkLFxyXG4gICAgICAgICAgaG92ZXJlZCxcclxuICAgICAgICAgIGRpc2FibGVkLFxyXG4gICAgICAgICAgaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgZW5kOiBpc0VuZERheSxcclxuICAgICAgICAgIFwiaGFzLXN1YnRleHRcIjogISFzdWJUZXh0LFxyXG4gICAgICAgIH0pfVxyXG4gICAgICAgIG9uQ2xpY2s9e3NlbGVjdERhdGV9XHJcbiAgICAgICAgb25Nb3VzZUVudGVyPXtoYW5kbGVIb3ZlckRhdGV9XHJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgdGFiSW5kZXg9XCItMVwiXHJcbiAgICAgICAgZGF0YS1kYXktaW5kZXg9e2RhdGVJbmRleH1cclxuICAgICAgICBkYXRhLWRhdGUtdmFsdWU9e2RhdGVWYWx1ZX1cclxuICAgICAgICByZWY9e2RheVJlZn1cclxuICAgICAgPlxyXG4gICAgICAgIHtob3ZlcmVkICYmXHJcbiAgICAgICAgICAhKGlzRW5kRGF5ICYmIGRhdGVJbmRleCA9PT0gdG90YWxEYXkpICYmXHJcbiAgICAgICAgICAhKGRhdGVJbmRleCA9PT0gMSAmJiBzZWxlY3RlZCAmJiAhaXNFbmREYXkpICYmIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXCJiYWNrZ3JvdW5kLWRheVwiLCB7XHJcbiAgICAgICAgICAgICAgICBcImZpcnN0LWRheVwiOiBkYXRlSW5kZXggPT09IDEsXHJcbiAgICAgICAgICAgICAgICBcImxhc3QtZGF5XCI6IGRhdGVJbmRleCA9PT0gdG90YWxEYXksXHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF5LWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1kYXlcIj57ZGF0ZUluZGV4fTwvZGl2PlxyXG4gICAgICAgICAge3N1YlRleHQgJiYgKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ViLXRleHRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxyXG4gICAgICAgICAgICAgICAgekluZGV4OiAzLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IChzZWxlY3RlZCAmJiAhaG92ZXJlZCkgPyBcIiNmZmZcIiA6IFwiIzY2NlwiLFxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7c3ViVGV4dH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4pO1xyXG5cclxuRGF5LnByb3BUeXBlcyA9IHtcclxuICBkYXRlSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXHJcbiAgZGF0ZVZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gIGlzRW5kRGF5OiBQcm9wVHlwZXMuYm9vbCxcclxuICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXHJcbiAgaG92ZXJlZDogUHJvcFR5cGVzLmJvb2wsXHJcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxyXG4gIG9uU2VsZWN0RGF0ZTogUHJvcFR5cGVzLmZ1bmMsXHJcbiAgb25Ib3ZlckRhdGU6IFByb3BUeXBlcy5mdW5jLFxyXG4gIHRvdGFsRGF5OiBQcm9wVHlwZXMubnVtYmVyLFxyXG4gIGhpZ2hsaWdodDogUHJvcFR5cGVzLmJvb2wsXHJcbiAgaGFuZGxlSG92ZXJEYXk6IFByb3BUeXBlcy5mdW5jLFxyXG4gIHN1YlRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEYXk7XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsIlByb3BUeXBlcyIsImN4IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkRheSIsIl9yZWYiLCJyZWYiLCJfcmVmJGRhdGVJbmRleCIsImRhdGVJbmRleCIsIl9yZWYkZGF0ZVZhbHVlIiwiZGF0ZVZhbHVlIiwiX3JlZiRpc0VuZERheSIsImlzRW5kRGF5IiwiX3JlZiRzZWxlY3RlZCIsInNlbGVjdGVkIiwiX3JlZiRob3ZlcmVkIiwiaG92ZXJlZCIsIl9yZWYkZGlzYWJsZWQiLCJkaXNhYmxlZCIsIl9yZWYkb25TZWxlY3REYXRlIiwib25TZWxlY3REYXRlIiwiX3JlZiRvbkhvdmVyRGF0ZSIsIm9uSG92ZXJEYXRlIiwiX3JlZiR0b3RhbERheSIsInRvdGFsRGF5IiwiX3JlZiRoaWdobGlnaHQiLCJoaWdobGlnaHQiLCJfcmVmJGhhbmRsZUhvdmVyRGF5IiwiaGFuZGxlSG92ZXJEYXkiLCJfcmVmJHN1YlRleHQiLCJzdWJUZXh0IiwiZGF5UmVmIiwic2VsZWN0RGF0ZSIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZUhvdmVyRGF0ZSIsImhhbmRsZVRvb2x0aXBQb3NpdGlvbiIsImVsZW1lbnQiLCJjdXJyZW50Iiwic3R5bGUiLCJsZWZ0IiwiY29uY2F0Iiwib2Zmc2V0TGVmdCIsIm9mZnNldFdpZHRoIiwidG9wIiwib2Zmc2V0VG9wIiwib2Zmc2V0SGVpZ2h0IiwidmlzaWJpbGl0eSIsImhhbmRsZVRvb2x0aXBIaWRkZW4iLCJhZGRFdmVudExpc3RlbmVyIiwiZG9jdW1lbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2xhc3NOYW1lIiwiZW5kIiwib25DbGljayIsIm9uTW91c2VFbnRlciIsInJvbGUiLCJ0YWJJbmRleCIsImNoaWxkcmVuIiwicG9zaXRpb24iLCJ6SW5kZXgiLCJjb2xvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/DatePicker/Day.js\n");
|
|
29
|
+
|
|
30
|
+
/***/ }),
|
|
31
|
+
|
|
32
|
+
/***/ "./src/lib/components/DatePicker/Dialog.js":
|
|
33
|
+
/*!*************************************************!*\
|
|
34
|
+
!*** ./src/lib/components/DatePicker/Dialog.js ***!
|
|
35
|
+
\*************************************************/
|
|
36
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
37
|
+
|
|
38
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _assets_svg_back_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../assets/svg/back.svg */ \"./src/lib/assets/svg/back.svg\");\n/* harmony import */ var _DateInputGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./DateInputGroup */ \"./src/lib/components/DatePicker/DateInputGroup.js\");\n/* harmony import */ var _DialogContentMobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DialogContentMobile */ \"./src/lib/components/DatePicker/DialogContentMobile.js\");\n/* harmony import */ var _DialogContentDesktop__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./DialogContentDesktop */ \"./src/lib/components/DatePicker/DialogContentDesktop.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\nvar Dialog = function Dialog(_ref) {\n var _ref$complsOpen = _ref.complsOpen,\n complsOpen = _ref$complsOpen === void 0 ? false : _ref$complsOpen,\n _ref$inputFocus = _ref.inputFocus,\n inputFocus = _ref$inputFocus === void 0 ? null : _ref$inputFocus,\n _ref$fromDate = _ref.fromDate,\n fromDate = _ref$fromDate === void 0 ? null : _ref$fromDate,\n _ref$toDate = _ref.toDate,\n toDate = _ref$toDate === void 0 ? null : _ref$toDate,\n _ref$hoverDate = _ref.hoverDate,\n hoverDate = _ref$hoverDate === void 0 ? null : _ref$hoverDate,\n _ref$toggleDialog = _ref.toggleDialog,\n toggleDialog = _ref$toggleDialog === void 0 ? function () {} : _ref$toggleDialog,\n _ref$handleClickDateI = _ref.handleClickDateInput,\n handleClickDateInput = _ref$handleClickDateI === void 0 ? function () {} : _ref$handleClickDateI,\n _ref$onSelectDate = _ref.onSelectDate,\n onSelectDate = _ref$onSelectDate === void 0 ? function () {} : _ref$onSelectDate,\n _ref$onHoverDate = _ref.onHoverDate,\n onHoverDate = _ref$onHoverDate === void 0 ? function () {} : _ref$onHoverDate,\n _ref$handleReset = _ref.handleReset,\n handleReset = _ref$handleReset === void 0 ? function () {} : _ref$handleReset,\n _ref$handleChangeDate = _ref.handleChangeDate,\n handleChangeDate = _ref$handleChangeDate === void 0 ? function () {} : _ref$handleChangeDate,\n _ref$startDatePlaceho = _ref.startDatePlaceholder,\n startDatePlaceholder = _ref$startDatePlaceho === void 0 ? null : _ref$startDatePlaceho,\n _ref$endDatePlacehold = _ref.endDatePlaceholder,\n endDatePlaceholder = _ref$endDatePlacehold === void 0 ? null : _ref$endDatePlacehold,\n _ref$startWeekDay = _ref.startWeekDay,\n startWeekDay = _ref$startWeekDay === void 0 ? null : _ref$startWeekDay,\n _ref$minDate = _ref.minDate,\n minDate = _ref$minDate === void 0 ? null : _ref$minDate,\n _ref$maxDate = _ref.maxDate,\n maxDate = _ref$maxDate === void 0 ? null : _ref$maxDate,\n _ref$dateFormat = _ref.dateFormat,\n dateFormat = _ref$dateFormat === void 0 ? \"\" : _ref$dateFormat,\n _ref$monthFormat = _ref.monthFormat,\n monthFormat = _ref$monthFormat === void 0 ? \"\" : _ref$monthFormat,\n _ref$isSingle = _ref.isSingle,\n isSingle = _ref$isSingle === void 0 ? false : _ref$isSingle,\n _ref$isMobile = _ref.isMobile,\n isMobile = _ref$isMobile === void 0 ? false : _ref$isMobile,\n _ref$highlightToday = _ref.highlightToday,\n highlightToday = _ref$highlightToday === void 0 ? false : _ref$highlightToday,\n _ref$weekDayFormat = _ref.weekDayFormat,\n weekDayFormat = _ref$weekDayFormat === void 0 ? \"\" : _ref$weekDayFormat,\n _ref$hideDialogHeader = _ref.hideDialogHeader,\n hideDialogHeader = _ref$hideDialogHeader === void 0 ? false : _ref$hideDialogHeader,\n _ref$hideDialogFooter = _ref.hideDialogFooter,\n hideDialogFooter = _ref$hideDialogFooter === void 0 ? false : _ref$hideDialogFooter,\n _ref$dateInputSeperat = _ref.dateInputSeperator,\n dateInputSeperator = _ref$dateInputSeperat === void 0 ? null : _ref$dateInputSeperat,\n _ref$singleCalendar = _ref.singleCalendar,\n singleCalendar = _ref$singleCalendar === void 0 ? false : _ref$singleCalendar,\n _ref$tooltip = _ref.tooltip,\n tooltip = _ref$tooltip === void 0 ? \"\" : _ref$tooltip,\n _ref$subTextDict = _ref.subTextDict,\n subTextDict = _ref$subTextDict === void 0 ? null : _ref$subTextDict,\n _ref$expandDirection = _ref.expandDirection,\n expandDirection = _ref$expandDirection === void 0 ? \"right\" : _ref$expandDirection;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState2 = _slicedToArray(_useState, 2),\n hideAnimation = _useState2[0],\n setHideAnimation = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(),\n _useState4 = _slicedToArray(_useState3, 2),\n dateChanged = _useState4[0],\n setDateChanged = _useState4[1];\n var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n function onChangeDate(date, value) {\n setDateChanged(date);\n handleChangeDate(date, value);\n }\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (complsOpen && !hideAnimation) {\n setHideAnimation(true);\n }\n if (complsOpen) {\n setTimeout(function () {\n if (containerRef.current && containerRef.current.getElementById) {\n var startDateInput = containerRef.current.getElementById(\"start-date-input-button\");\n if (startDateInput) {\n startDateInput.focus();\n }\n }\n }, 50);\n }\n }, [complsOpen]);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"dialog-date-picker\", {\n open: complsOpen,\n hide: !complsOpen && hideAnimation,\n single: singleCalendar && !isMobile,\n \"expand-left\": expandDirection === \"left\",\n \"expand-right\": expandDirection === \"right\"\n }),\n ref: containerRef,\n children: [!hideDialogHeader && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: \"dialog-header\",\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"button\",\n className: \"btn-outline back-button\",\n onClick: toggleDialog,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_assets_svg_back_svg__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n viewBox: \"0 0 492 492\"\n })\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_DateInputGroup__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n inputFocus: inputFocus,\n handleClickDateInput: handleClickDateInput,\n fromDate: fromDate,\n toDate: toDate,\n minDate: minDate,\n maxDate: maxDate,\n handleChangeDate: onChangeDate,\n startDatePlaceholder: startDatePlaceholder,\n endDatePlaceholder: endDatePlaceholder,\n dateFormat: dateFormat,\n isSingle: isSingle,\n nonFocusable: !complsOpen,\n dateInputSeperator: dateInputSeperator\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"button\",\n className: \"btn-outline reset-button\",\n onClick: handleReset,\n children: \"Reset\"\n })]\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n className: \"dialog-content\",\n children: isMobile ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_DialogContentMobile__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n fromDate: fromDate,\n toDate: toDate,\n hoverDate: hoverDate,\n onSelectDate: onSelectDate,\n startWeekDay: startWeekDay,\n minDate: minDate,\n maxDate: maxDate,\n dateFormat: dateFormat,\n weekDayFormat: weekDayFormat,\n monthFormat: monthFormat,\n complsOpen: complsOpen,\n isSingle: isSingle,\n highlightToday: highlightToday,\n tooltip: tooltip,\n subTextDict: subTextDict\n }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_DialogContentDesktop__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n fromDate: fromDate,\n toDate: toDate,\n hoverDate: hoverDate,\n onSelectDate: onSelectDate,\n onHoverDate: onHoverDate,\n startWeekDay: startWeekDay,\n minDate: minDate,\n maxDate: maxDate,\n dateFormat: dateFormat,\n weekDayFormat: weekDayFormat,\n monthFormat: monthFormat,\n isSingle: isSingle,\n complsOpen: complsOpen,\n dateChanged: dateChanged,\n highlightToday: highlightToday,\n singleCalendar: singleCalendar,\n tooltip: tooltip,\n subTextDict: subTextDict\n })\n }), !hideDialogFooter && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: \"dialog-footer\",\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"button\",\n className: \"submit-button\",\n onClick: toggleDialog,\n tabIndex: \"0\",\n children: \"Done\"\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"button\",\n className: \"btn-outline reset-button mobile\",\n onClick: handleReset,\n children: \"Reset\"\n })]\n })]\n });\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Dialog);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9EaWFsb2cuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEyRDtBQUN4QjtBQUNQO0FBRXFCO0FBQ0g7QUFDVTtBQUNFO0FBQUE7QUFFMUQsSUFBTWMsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUFDLElBQUEsRUE4Qk47RUFBQSxJQUFBQyxlQUFBLEdBQUFELElBQUEsQ0E3QkpFLFVBQVU7SUFBVkEsVUFBVSxHQUFBRCxlQUFBLGNBQUcsS0FBSyxHQUFBQSxlQUFBO0lBQUFFLGVBQUEsR0FBQUgsSUFBQSxDQUNsQkksVUFBVTtJQUFWQSxVQUFVLEdBQUFELGVBQUEsY0FBRyxJQUFJLEdBQUFBLGVBQUE7SUFBQUUsYUFBQSxHQUFBTCxJQUFBLENBQ2pCTSxRQUFRO0lBQVJBLFFBQVEsR0FBQUQsYUFBQSxjQUFHLElBQUksR0FBQUEsYUFBQTtJQUFBRSxXQUFBLEdBQUFQLElBQUEsQ0FDZlEsTUFBTTtJQUFOQSxNQUFNLEdBQUFELFdBQUEsY0FBRyxJQUFJLEdBQUFBLFdBQUE7SUFBQUUsY0FBQSxHQUFBVCxJQUFBLENBQ2JVLFNBQVM7SUFBVEEsU0FBUyxHQUFBRCxjQUFBLGNBQUcsSUFBSSxHQUFBQSxjQUFBO0lBQUFFLGlCQUFBLEdBQUFYLElBQUEsQ0FDaEJZLFlBQVk7SUFBWkEsWUFBWSxHQUFBRCxpQkFBQSxjQUFHLFlBQU0sQ0FBQyxDQUFDLEdBQUFBLGlCQUFBO0lBQUFFLHFCQUFBLEdBQUFiLElBQUEsQ0FDdkJjLG9CQUFvQjtJQUFwQkEsb0JBQW9CLEdBQUFELHFCQUFBLGNBQUcsWUFBTSxDQUFDLENBQUMsR0FBQUEscUJBQUE7SUFBQUUsaUJBQUEsR0FBQWYsSUFBQSxDQUMvQmdCLFlBQVk7SUFBWkEsWUFBWSxHQUFBRCxpQkFBQSxjQUFHLFlBQU0sQ0FBQyxDQUFDLEdBQUFBLGlCQUFBO0lBQUFFLGdCQUFBLEdBQUFqQixJQUFBLENBQ3ZCa0IsV0FBVztJQUFYQSxXQUFXLEdBQUFELGdCQUFBLGNBQUcsWUFBTSxDQUFDLENBQUMsR0FBQUEsZ0JBQUE7SUFBQUUsZ0JBQUEsR0FBQW5CLElBQUEsQ0FDdEJvQixXQUFXO0lBQVhBLFdBQVcsR0FBQUQsZ0JBQUEsY0FBRyxZQUFNLENBQUMsQ0FBQyxHQUFBQSxnQkFBQTtJQUFBRSxxQkFBQSxHQUFBckIsSUFBQSxDQUN0QnNCLGdCQUFnQjtJQUFoQkEsZ0JBQWdCLEdBQUFELHFCQUFBLGNBQUcsWUFBTSxDQUFDLENBQUMsR0FBQUEscUJBQUE7SUFBQUUscUJBQUEsR0FBQXZCLElBQUEsQ0FDM0J3QixvQkFBb0I7SUFBcEJBLG9CQUFvQixHQUFBRCxxQkFBQSxjQUFHLElBQUksR0FBQUEscUJBQUE7SUFBQUUscUJBQUEsR0FBQXpCLElBQUEsQ0FDM0IwQixrQkFBa0I7SUFBbEJBLGtCQUFrQixHQUFBRCxxQkFBQSxjQUFHLElBQUksR0FBQUEscUJBQUE7SUFBQUUsaUJBQUEsR0FBQTNCLElBQUEsQ0FDekI0QixZQUFZO0lBQVpBLFlBQVksR0FBQUQsaUJBQUEsY0FBRyxJQUFJLEdBQUFBLGlCQUFBO0lBQUFFLFlBQUEsR0FBQTdCLElBQUEsQ0FDbkI4QixPQUFPO0lBQVBBLE9BQU8sR0FBQUQsWUFBQSxjQUFHLElBQUksR0FBQUEsWUFBQTtJQUFBRSxZQUFBLEdBQUEvQixJQUFBLENBQ2RnQyxPQUFPO0lBQVBBLE9BQU8sR0FBQUQsWUFBQSxjQUFHLElBQUksR0FBQUEsWUFBQTtJQUFBRSxlQUFBLEdBQUFqQyxJQUFBLENBQ2RrQyxVQUFVO0lBQVZBLFVBQVUsR0FBQUQsZUFBQSxjQUFHLEVBQUUsR0FBQUEsZUFBQTtJQUFBRSxnQkFBQSxHQUFBbkMsSUFBQSxDQUNmb0MsV0FBVztJQUFYQSxXQUFXLEdBQUFELGdCQUFBLGNBQUcsRUFBRSxHQUFBQSxnQkFBQTtJQUFBRSxhQUFBLEdBQUFyQyxJQUFBLENBQ2hCc0MsUUFBUTtJQUFSQSxRQUFRLEdBQUFELGFBQUEsY0FBRyxLQUFLLEdBQUFBLGFBQUE7SUFBQUUsYUFBQSxHQUFBdkMsSUFBQSxDQUNoQndDLFFBQVE7SUFBUkEsUUFBUSxHQUFBRCxhQUFBLGNBQUcsS0FBSyxHQUFBQSxhQUFBO0lBQUFFLG1CQUFBLEdBQUF6QyxJQUFBLENBQ2hCMEMsY0FBYztJQUFkQSxjQUFjLEdBQUFELG1CQUFBLGNBQUcsS0FBSyxHQUFBQSxtQkFBQTtJQUFBRSxrQkFBQSxHQUFBM0MsSUFBQSxDQUN0QjRDLGFBQWE7SUFBYkEsYUFBYSxHQUFBRCxrQkFBQSxjQUFHLEVBQUUsR0FBQUEsa0JBQUE7SUFBQUUscUJBQUEsR0FBQTdDLElBQUEsQ0FDbEI4QyxnQkFBZ0I7SUFBaEJBLGdCQUFnQixHQUFBRCxxQkFBQSxjQUFHLEtBQUssR0FBQUEscUJBQUE7SUFBQUUscUJBQUEsR0FBQS9DLElBQUEsQ0FDeEJnRCxnQkFBZ0I7SUFBaEJBLGdCQUFnQixHQUFBRCxxQkFBQSxjQUFHLEtBQUssR0FBQUEscUJBQUE7SUFBQUUscUJBQUEsR0FBQWpELElBQUEsQ0FDeEJrRCxrQkFBa0I7SUFBbEJBLGtCQUFrQixHQUFBRCxxQkFBQSxjQUFHLElBQUksR0FBQUEscUJBQUE7SUFBQUUsbUJBQUEsR0FBQW5ELElBQUEsQ0FDekJvRCxjQUFjO0lBQWRBLGNBQWMsR0FBQUQsbUJBQUEsY0FBRyxLQUFLLEdBQUFBLG1CQUFBO0lBQUFFLFlBQUEsR0FBQXJELElBQUEsQ0FDdEJzRCxPQUFPO0lBQVBBLE9BQU8sR0FBQUQsWUFBQSxjQUFHLEVBQUUsR0FBQUEsWUFBQTtJQUFBRSxnQkFBQSxHQUFBdkQsSUFBQSxDQUNad0QsV0FBVztJQUFYQSxXQUFXLEdBQUFELGdCQUFBLGNBQUcsSUFBSSxHQUFBQSxnQkFBQTtJQUFBRSxvQkFBQSxHQUFBekQsSUFBQSxDQUNsQjBELGVBQWU7SUFBZkEsZUFBZSxHQUFBRCxvQkFBQSxjQUFHLE9BQU8sR0FBQUEsb0JBQUE7RUFFekIsSUFBQUUsU0FBQSxHQUEwQ3hFLCtDQUFRLENBQUMsS0FBSyxDQUFDO0lBQUF5RSxVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUFsREcsYUFBYSxHQUFBRixVQUFBO0lBQUVHLGdCQUFnQixHQUFBSCxVQUFBO0VBQ3RDLElBQUFJLFVBQUEsR0FBc0M3RSwrQ0FBUSxDQUFDLENBQUM7SUFBQThFLFVBQUEsR0FBQUosY0FBQSxDQUFBRyxVQUFBO0lBQXpDRSxXQUFXLEdBQUFELFVBQUE7SUFBRUUsY0FBYyxHQUFBRixVQUFBO0VBQ2xDLElBQU1HLFlBQVksR0FBR2hGLDZDQUFNLENBQUMsQ0FBQztFQUU3QixTQUFTaUYsWUFBWUEsQ0FBQ0MsSUFBSSxFQUFFQyxLQUFLLEVBQUU7SUFDakNKLGNBQWMsQ0FBQ0csSUFBSSxDQUFDO0lBQ3BCaEQsZ0JBQWdCLENBQUNnRCxJQUFJLEVBQUVDLEtBQUssQ0FBQztFQUMvQjtFQUVBckYsZ0RBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSWdCLFVBQVUsSUFBSSxDQUFDNEQsYUFBYSxFQUFFO01BQ2hDQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDeEI7SUFDQSxJQUFJN0QsVUFBVSxFQUFFO01BQ2RzRSxVQUFVLENBQUMsWUFBTTtRQUNmLElBQUlKLFlBQVksQ0FBQ0ssT0FBTyxJQUFJTCxZQUFZLENBQUNLLE9BQU8sQ0FBQ0MsY0FBYyxFQUFFO1VBQy9ELElBQU1DLGNBQWMsR0FBR1AsWUFBWSxDQUFDSyxPQUFPLENBQUNDLGNBQWMsQ0FDeEQseUJBQ0YsQ0FBQztVQUNELElBQUlDLGNBQWMsRUFBRTtZQUNsQkEsY0FBYyxDQUFDQyxLQUFLLENBQUMsQ0FBQztVQUN4QjtRQUNGO01BQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNSO0VBQ0YsQ0FBQyxFQUFFLENBQUMxRSxVQUFVLENBQUMsQ0FBQztFQUVoQixvQkFDRUosdURBQUE7SUFDRStFLFNBQVMsRUFBRXZGLGlEQUFFLENBQUMsb0JBQW9CLEVBQUU7TUFDbEN3RixJQUFJLEVBQUU1RSxVQUFVO01BQ2hCNkUsSUFBSSxFQUFFLENBQUM3RSxVQUFVLElBQUk0RCxhQUFhO01BQ2xDa0IsTUFBTSxFQUFFNUIsY0FBYyxJQUFJLENBQUNaLFFBQVE7TUFDbkMsYUFBYSxFQUFFa0IsZUFBZSxLQUFLLE1BQU07TUFDekMsY0FBYyxFQUFFQSxlQUFlLEtBQUs7SUFDdEMsQ0FBQyxDQUFFO0lBQ0h1QixHQUFHLEVBQUViLFlBQWE7SUFBQWMsUUFBQSxHQUVqQixDQUFDcEMsZ0JBQWdCLGlCQUNoQmhELHVEQUFBO01BQUsrRSxTQUFTLEVBQUMsZUFBZTtNQUFBSyxRQUFBLGdCQUM1QnRGLHNEQUFBO1FBQ0V1RixJQUFJLEVBQUMsUUFBUTtRQUNiTixTQUFTLEVBQUMseUJBQXlCO1FBQ25DTyxPQUFPLEVBQUV4RSxZQUFhO1FBQUFzRSxRQUFBLGVBRXRCdEYsc0RBQUEsQ0FBQ0wsNERBQVE7VUFBQzhGLE9BQU8sRUFBQztRQUFhLENBQUU7TUFBQyxDQUM1QixDQUFDLGVBQ1R6RixzREFBQSxDQUFDSix1REFBYztRQUNiWSxVQUFVLEVBQUVBLFVBQVc7UUFDdkJVLG9CQUFvQixFQUFFQSxvQkFBcUI7UUFDM0NSLFFBQVEsRUFBRUEsUUFBUztRQUNuQkUsTUFBTSxFQUFFQSxNQUFPO1FBQ2ZzQixPQUFPLEVBQUVBLE9BQVE7UUFDakJFLE9BQU8sRUFBRUEsT0FBUTtRQUNqQlYsZ0JBQWdCLEVBQUUrQyxZQUFhO1FBQy9CN0Msb0JBQW9CLEVBQUVBLG9CQUFxQjtRQUMzQ0Usa0JBQWtCLEVBQUVBLGtCQUFtQjtRQUN2Q1EsVUFBVSxFQUFFQSxVQUFXO1FBQ3ZCSSxRQUFRLEVBQUVBLFFBQVM7UUFDbkJnRCxZQUFZLEVBQUUsQ0FBQ3BGLFVBQVc7UUFDMUJnRCxrQkFBa0IsRUFBRUE7TUFBbUIsQ0FDeEMsQ0FBQyxlQUNGdEQsc0RBQUE7UUFDRXVGLElBQUksRUFBQyxRQUFRO1FBQ2JOLFNBQVMsRUFBQywwQkFBMEI7UUFDcENPLE9BQU8sRUFBRWhFLFdBQVk7UUFBQThELFFBQUEsRUFDdEI7TUFFRCxDQUFRLENBQUM7SUFBQSxDQUNOLENBQ04sZUFFRHRGLHNEQUFBO01BQUtpRixTQUFTLEVBQUMsZ0JBQWdCO01BQUFLLFFBQUEsRUFDNUIxQyxRQUFRLGdCQUNQNUMsc0RBQUEsQ0FBQ0gsNERBQW1CO1FBQ2xCYSxRQUFRLEVBQUVBLFFBQVM7UUFDbkJFLE1BQU0sRUFBRUEsTUFBTztRQUNmRSxTQUFTLEVBQUVBLFNBQVU7UUFDckJNLFlBQVksRUFBRUEsWUFBYTtRQUMzQlksWUFBWSxFQUFFQSxZQUFhO1FBQzNCRSxPQUFPLEVBQUVBLE9BQVE7UUFDakJFLE9BQU8sRUFBRUEsT0FBUTtRQUNqQkUsVUFBVSxFQUFFQSxVQUFXO1FBQ3ZCVSxhQUFhLEVBQUVBLGFBQWM7UUFDN0JSLFdBQVcsRUFBRUEsV0FBWTtRQUN6QmxDLFVBQVUsRUFBRUEsVUFBVztRQUN2Qm9DLFFBQVEsRUFBRUEsUUFBUztRQUNuQkksY0FBYyxFQUFFQSxjQUFlO1FBQy9CWSxPQUFPLEVBQUVBLE9BQVE7UUFDakJFLFdBQVcsRUFBRUE7TUFBWSxDQUMxQixDQUFDLGdCQUVGNUQsc0RBQUEsQ0FBQ0YsNkRBQW9CO1FBQ25CWSxRQUFRLEVBQUVBLFFBQVM7UUFDbkJFLE1BQU0sRUFBRUEsTUFBTztRQUNmRSxTQUFTLEVBQUVBLFNBQVU7UUFDckJNLFlBQVksRUFBRUEsWUFBYTtRQUMzQkUsV0FBVyxFQUFFQSxXQUFZO1FBQ3pCVSxZQUFZLEVBQUVBLFlBQWE7UUFDM0JFLE9BQU8sRUFBRUEsT0FBUTtRQUNqQkUsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCRSxVQUFVLEVBQUVBLFVBQVc7UUFDdkJVLGFBQWEsRUFBRUEsYUFBYztRQUM3QlIsV0FBVyxFQUFFQSxXQUFZO1FBQ3pCRSxRQUFRLEVBQUVBLFFBQVM7UUFDbkJwQyxVQUFVLEVBQUVBLFVBQVc7UUFDdkJnRSxXQUFXLEVBQUVBLFdBQVk7UUFDekJ4QixjQUFjLEVBQUVBLGNBQWU7UUFDL0JVLGNBQWMsRUFBRUEsY0FBZTtRQUMvQkUsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCRSxXQUFXLEVBQUVBO01BQVksQ0FDMUI7SUFDRixDQUNFLENBQUMsRUFDTCxDQUFDUixnQkFBZ0IsaUJBQ2hCbEQsdURBQUE7TUFBSytFLFNBQVMsRUFBQyxlQUFlO01BQUFLLFFBQUEsZ0JBQzVCdEYsc0RBQUE7UUFDRXVGLElBQUksRUFBQyxRQUFRO1FBQ2JOLFNBQVMsRUFBQyxlQUFlO1FBQ3pCTyxPQUFPLEVBQUV4RSxZQUFhO1FBQ3RCMkUsUUFBUSxFQUFDLEdBQUc7UUFBQUwsUUFBQSxFQUNiO01BRUQsQ0FBUSxDQUFDLGVBQ1R0RixzREFBQTtRQUNFdUYsSUFBSSxFQUFDLFFBQVE7UUFDYk4sU0FBUyxFQUFDLGlDQUFpQztRQUMzQ08sT0FBTyxFQUFFaEUsV0FBWTtRQUFBOEQsUUFBQSxFQUN0QjtNQUVELENBQVEsQ0FBQztJQUFBLENBQ04sQ0FDTjtFQUFBLENBQ0UsQ0FBQztBQUVWLENBQUM7QUFzQ0QsaUVBQWVuRixNQUFNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRlbHNoby9nb29nbGUtZmxpZ2h0LWRhdGVwaWNrZXIvLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9EaWFsb2cuanM/ZTU1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcclxuaW1wb3J0IGN4IGZyb20gXCJjbGFzc25hbWVzXCI7XHJcblxyXG5pbXBvcnQgQmFja0ljb24gZnJvbSBcIi4uLy4uL2Fzc2V0cy9zdmcvYmFjay5zdmdcIjtcclxuaW1wb3J0IERhdGVJbnB1dEdyb3VwIGZyb20gXCIuL0RhdGVJbnB1dEdyb3VwXCI7XHJcbmltcG9ydCBEaWFsb2dDb250ZW50TW9iaWxlIGZyb20gXCIuL0RpYWxvZ0NvbnRlbnRNb2JpbGVcIjtcclxuaW1wb3J0IERpYWxvZ0NvbnRlbnREZXNrdG9wIGZyb20gXCIuL0RpYWxvZ0NvbnRlbnREZXNrdG9wXCI7XHJcblxyXG5jb25zdCBEaWFsb2cgPSAoe1xyXG4gIGNvbXBsc09wZW4gPSBmYWxzZSxcclxuICBpbnB1dEZvY3VzID0gbnVsbCxcclxuICBmcm9tRGF0ZSA9IG51bGwsXHJcbiAgdG9EYXRlID0gbnVsbCxcclxuICBob3ZlckRhdGUgPSBudWxsLFxyXG4gIHRvZ2dsZURpYWxvZyA9ICgpID0+IHt9LFxyXG4gIGhhbmRsZUNsaWNrRGF0ZUlucHV0ID0gKCkgPT4ge30sXHJcbiAgb25TZWxlY3REYXRlID0gKCkgPT4ge30sXHJcbiAgb25Ib3ZlckRhdGUgPSAoKSA9PiB7fSxcclxuICBoYW5kbGVSZXNldCA9ICgpID0+IHt9LFxyXG4gIGhhbmRsZUNoYW5nZURhdGUgPSAoKSA9PiB7fSxcclxuICBzdGFydERhdGVQbGFjZWhvbGRlciA9IG51bGwsXHJcbiAgZW5kRGF0ZVBsYWNlaG9sZGVyID0gbnVsbCxcclxuICBzdGFydFdlZWtEYXkgPSBudWxsLFxyXG4gIG1pbkRhdGUgPSBudWxsLFxyXG4gIG1heERhdGUgPSBudWxsLFxyXG4gIGRhdGVGb3JtYXQgPSBcIlwiLFxyXG4gIG1vbnRoRm9ybWF0ID0gXCJcIixcclxuICBpc1NpbmdsZSA9IGZhbHNlLFxyXG4gIGlzTW9iaWxlID0gZmFsc2UsXHJcbiAgaGlnaGxpZ2h0VG9kYXkgPSBmYWxzZSxcclxuICB3ZWVrRGF5Rm9ybWF0ID0gXCJcIixcclxuICBoaWRlRGlhbG9nSGVhZGVyID0gZmFsc2UsXHJcbiAgaGlkZURpYWxvZ0Zvb3RlciA9IGZhbHNlLFxyXG4gIGRhdGVJbnB1dFNlcGVyYXRvciA9IG51bGwsXHJcbiAgc2luZ2xlQ2FsZW5kYXIgPSBmYWxzZSxcclxuICB0b29sdGlwID0gXCJcIixcclxuICBzdWJUZXh0RGljdCA9IG51bGwsXHJcbiAgZXhwYW5kRGlyZWN0aW9uID0gXCJyaWdodFwiLFxyXG59KSA9PiB7XHJcbiAgY29uc3QgW2hpZGVBbmltYXRpb24sIHNldEhpZGVBbmltYXRpb25dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtkYXRlQ2hhbmdlZCwgc2V0RGF0ZUNoYW5nZWRdID0gdXNlU3RhdGUoKTtcclxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYoKTtcclxuXHJcbiAgZnVuY3Rpb24gb25DaGFuZ2VEYXRlKGRhdGUsIHZhbHVlKSB7XHJcbiAgICBzZXREYXRlQ2hhbmdlZChkYXRlKTtcclxuICAgIGhhbmRsZUNoYW5nZURhdGUoZGF0ZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChjb21wbHNPcGVuICYmICFoaWRlQW5pbWF0aW9uKSB7XHJcbiAgICAgIHNldEhpZGVBbmltYXRpb24odHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29tcGxzT3Blbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAoY29udGFpbmVyUmVmLmN1cnJlbnQgJiYgY29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0RWxlbWVudEJ5SWQpIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUlucHV0ID0gY29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgICAgIFwic3RhcnQtZGF0ZS1pbnB1dC1idXR0b25cIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChzdGFydERhdGVJbnB1dCkge1xyXG4gICAgICAgICAgICBzdGFydERhdGVJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgNTApO1xyXG4gICAgfVxyXG4gIH0sIFtjb21wbHNPcGVuXSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzTmFtZT17Y3goXCJkaWFsb2ctZGF0ZS1waWNrZXJcIiwge1xyXG4gICAgICAgIG9wZW46IGNvbXBsc09wZW4sXHJcbiAgICAgICAgaGlkZTogIWNvbXBsc09wZW4gJiYgaGlkZUFuaW1hdGlvbixcclxuICAgICAgICBzaW5nbGU6IHNpbmdsZUNhbGVuZGFyICYmICFpc01vYmlsZSxcclxuICAgICAgICBcImV4cGFuZC1sZWZ0XCI6IGV4cGFuZERpcmVjdGlvbiA9PT0gXCJsZWZ0XCIsXHJcbiAgICAgICAgXCJleHBhbmQtcmlnaHRcIjogZXhwYW5kRGlyZWN0aW9uID09PSBcInJpZ2h0XCIsXHJcbiAgICAgIH0pfVxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgID5cclxuICAgICAgeyFoaWRlRGlhbG9nSGVhZGVyICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRpYWxvZy1oZWFkZXJcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1vdXRsaW5lIGJhY2stYnV0dG9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlRGlhbG9nfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8QmFja0ljb24gdmlld0JveD1cIjAgMCA0OTIgNDkyXCIgLz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPERhdGVJbnB1dEdyb3VwXHJcbiAgICAgICAgICAgIGlucHV0Rm9jdXM9e2lucHV0Rm9jdXN9XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrRGF0ZUlucHV0PXtoYW5kbGVDbGlja0RhdGVJbnB1dH1cclxuICAgICAgICAgICAgZnJvbURhdGU9e2Zyb21EYXRlfVxyXG4gICAgICAgICAgICB0b0RhdGU9e3RvRGF0ZX1cclxuICAgICAgICAgICAgbWluRGF0ZT17bWluRGF0ZX1cclxuICAgICAgICAgICAgbWF4RGF0ZT17bWF4RGF0ZX1cclxuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlRGF0ZT17b25DaGFuZ2VEYXRlfVxyXG4gICAgICAgICAgICBzdGFydERhdGVQbGFjZWhvbGRlcj17c3RhcnREYXRlUGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIGVuZERhdGVQbGFjZWhvbGRlcj17ZW5kRGF0ZVBsYWNlaG9sZGVyfVxyXG4gICAgICAgICAgICBkYXRlRm9ybWF0PXtkYXRlRm9ybWF0fVxyXG4gICAgICAgICAgICBpc1NpbmdsZT17aXNTaW5nbGV9XHJcbiAgICAgICAgICAgIG5vbkZvY3VzYWJsZT17IWNvbXBsc09wZW59XHJcbiAgICAgICAgICAgIGRhdGVJbnB1dFNlcGVyYXRvcj17ZGF0ZUlucHV0U2VwZXJhdG9yfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1vdXRsaW5lIHJlc2V0LWJ1dHRvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVJlc2V0fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBSZXNldFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImRpYWxvZy1jb250ZW50XCI+XHJcbiAgICAgICAge2lzTW9iaWxlID8gKFxyXG4gICAgICAgICAgPERpYWxvZ0NvbnRlbnRNb2JpbGVcclxuICAgICAgICAgICAgZnJvbURhdGU9e2Zyb21EYXRlfVxyXG4gICAgICAgICAgICB0b0RhdGU9e3RvRGF0ZX1cclxuICAgICAgICAgICAgaG92ZXJEYXRlPXtob3ZlckRhdGV9XHJcbiAgICAgICAgICAgIG9uU2VsZWN0RGF0ZT17b25TZWxlY3REYXRlfVxyXG4gICAgICAgICAgICBzdGFydFdlZWtEYXk9e3N0YXJ0V2Vla0RheX1cclxuICAgICAgICAgICAgbWluRGF0ZT17bWluRGF0ZX1cclxuICAgICAgICAgICAgbWF4RGF0ZT17bWF4RGF0ZX1cclxuICAgICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cclxuICAgICAgICAgICAgd2Vla0RheUZvcm1hdD17d2Vla0RheUZvcm1hdH1cclxuICAgICAgICAgICAgbW9udGhGb3JtYXQ9e21vbnRoRm9ybWF0fVxyXG4gICAgICAgICAgICBjb21wbHNPcGVuPXtjb21wbHNPcGVufVxyXG4gICAgICAgICAgICBpc1NpbmdsZT17aXNTaW5nbGV9XHJcbiAgICAgICAgICAgIGhpZ2hsaWdodFRvZGF5PXtoaWdobGlnaHRUb2RheX1cclxuICAgICAgICAgICAgdG9vbHRpcD17dG9vbHRpcH1cclxuICAgICAgICAgICAgc3ViVGV4dERpY3Q9e3N1YlRleHREaWN0fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApIDogKFxyXG4gICAgICAgICAgPERpYWxvZ0NvbnRlbnREZXNrdG9wXHJcbiAgICAgICAgICAgIGZyb21EYXRlPXtmcm9tRGF0ZX1cclxuICAgICAgICAgICAgdG9EYXRlPXt0b0RhdGV9XHJcbiAgICAgICAgICAgIGhvdmVyRGF0ZT17aG92ZXJEYXRlfVxyXG4gICAgICAgICAgICBvblNlbGVjdERhdGU9e29uU2VsZWN0RGF0ZX1cclxuICAgICAgICAgICAgb25Ib3ZlckRhdGU9e29uSG92ZXJEYXRlfVxyXG4gICAgICAgICAgICBzdGFydFdlZWtEYXk9e3N0YXJ0V2Vla0RheX1cclxuICAgICAgICAgICAgbWluRGF0ZT17bWluRGF0ZX1cclxuICAgICAgICAgICAgbWF4RGF0ZT17bWF4RGF0ZX1cclxuICAgICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cclxuICAgICAgICAgICAgd2Vla0RheUZvcm1hdD17d2Vla0RheUZvcm1hdH1cclxuICAgICAgICAgICAgbW9udGhGb3JtYXQ9e21vbnRoRm9ybWF0fVxyXG4gICAgICAgICAgICBpc1NpbmdsZT17aXNTaW5nbGV9XHJcbiAgICAgICAgICAgIGNvbXBsc09wZW49e2NvbXBsc09wZW59XHJcbiAgICAgICAgICAgIGRhdGVDaGFuZ2VkPXtkYXRlQ2hhbmdlZH1cclxuICAgICAgICAgICAgaGlnaGxpZ2h0VG9kYXk9e2hpZ2hsaWdodFRvZGF5fVxyXG4gICAgICAgICAgICBzaW5nbGVDYWxlbmRhcj17c2luZ2xlQ2FsZW5kYXJ9XHJcbiAgICAgICAgICAgIHRvb2x0aXA9e3Rvb2x0aXB9XHJcbiAgICAgICAgICAgIHN1YlRleHREaWN0PXtzdWJUZXh0RGljdH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIHshaGlkZURpYWxvZ0Zvb3RlciAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkaWFsb2ctZm9vdGVyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdWJtaXQtYnV0dG9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlRGlhbG9nfVxyXG4gICAgICAgICAgICB0YWJJbmRleD1cIjBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBEb25lXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1vdXRsaW5lIHJlc2V0LWJ1dHRvbiBtb2JpbGVcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVSZXNldH1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgUmVzZXRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbkRpYWxvZy5wcm9wVHlwZXMgPSB7XHJcbiAgY29tcGxzT3BlbjogUHJvcFR5cGVzLmJvb2wsXHJcbiAgaW5wdXRGb2N1czogUHJvcFR5cGVzLnN0cmluZyxcclxuICBmcm9tRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgdG9EYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcclxuICBob3ZlckRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIHRvZ2dsZURpYWxvZzogUHJvcFR5cGVzLmZ1bmMsXHJcbiAgaGFuZGxlQ2xpY2tEYXRlSW5wdXQ6IFByb3BUeXBlcy5mdW5jLFxyXG4gIG9uU2VsZWN0RGF0ZTogUHJvcFR5cGVzLmZ1bmMsXHJcbiAgb25Ib3ZlckRhdGU6IFByb3BUeXBlcy5mdW5jLFxyXG4gIGhhbmRsZVJlc2V0OiBQcm9wVHlwZXMuZnVuYyxcclxuICBoYW5kbGVDaGFuZ2VEYXRlOiBQcm9wVHlwZXMuZnVuYyxcclxuICBzdGFydERhdGVQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcclxuICBlbmREYXRlUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgc3RhcnRXZWVrRGF5OiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gIG1pbkRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIG1heERhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIGRhdGVGb3JtYXQ6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgbW9udGhGb3JtYXQ6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgaXNTaW5nbGU6IFByb3BUeXBlcy5ib29sLFxyXG4gIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcclxuICBoaWdobGlnaHRUb2RheTogUHJvcFR5cGVzLmJvb2wsXHJcbiAgd2Vla0RheUZvcm1hdDogUHJvcFR5cGVzLnN0cmluZyxcclxuICBoaWRlRGlhbG9nSGVhZGVyOiBQcm9wVHlwZXMuYm9vbCxcclxuICBoaWRlRGlhbG9nRm9vdGVyOiBQcm9wVHlwZXMuYm9vbCxcclxuICBkYXRlSW5wdXRTZXBlcmF0b3I6IFByb3BUeXBlcy5ub2RlLFxyXG4gIHNpbmdsZUNhbGVuZGFyOiBQcm9wVHlwZXMuYm9vbCxcclxuICB0b29sdGlwOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcclxuICAgIFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICBQcm9wVHlwZXMubm9kZSxcclxuICAgIFByb3BUeXBlcy5mdW5jLFxyXG4gIF0pLFxyXG4gIHN1YlRleHREaWN0OiBQcm9wVHlwZXMub2JqZWN0LFxyXG4gIGV4cGFuZERpcmVjdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IERpYWxvZztcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VSZWYiLCJQcm9wVHlwZXMiLCJjeCIsIkJhY2tJY29uIiwiRGF0ZUlucHV0R3JvdXAiLCJEaWFsb2dDb250ZW50TW9iaWxlIiwiRGlhbG9nQ29udGVudERlc2t0b3AiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRGlhbG9nIiwiX3JlZiIsIl9yZWYkY29tcGxzT3BlbiIsImNvbXBsc09wZW4iLCJfcmVmJGlucHV0Rm9jdXMiLCJpbnB1dEZvY3VzIiwiX3JlZiRmcm9tRGF0ZSIsImZyb21EYXRlIiwiX3JlZiR0b0RhdGUiLCJ0b0RhdGUiLCJfcmVmJGhvdmVyRGF0ZSIsImhvdmVyRGF0ZSIsIl9yZWYkdG9nZ2xlRGlhbG9nIiwidG9nZ2xlRGlhbG9nIiwiX3JlZiRoYW5kbGVDbGlja0RhdGVJIiwiaGFuZGxlQ2xpY2tEYXRlSW5wdXQiLCJfcmVmJG9uU2VsZWN0RGF0ZSIsIm9uU2VsZWN0RGF0ZSIsIl9yZWYkb25Ib3ZlckRhdGUiLCJvbkhvdmVyRGF0ZSIsIl9yZWYkaGFuZGxlUmVzZXQiLCJoYW5kbGVSZXNldCIsIl9yZWYkaGFuZGxlQ2hhbmdlRGF0ZSIsImhhbmRsZUNoYW5nZURhdGUiLCJfcmVmJHN0YXJ0RGF0ZVBsYWNlaG8iLCJzdGFydERhdGVQbGFjZWhvbGRlciIsIl9yZWYkZW5kRGF0ZVBsYWNlaG9sZCIsImVuZERhdGVQbGFjZWhvbGRlciIsIl9yZWYkc3RhcnRXZWVrRGF5Iiwic3RhcnRXZWVrRGF5IiwiX3JlZiRtaW5EYXRlIiwibWluRGF0ZSIsIl9yZWYkbWF4RGF0ZSIsIm1heERhdGUiLCJfcmVmJGRhdGVGb3JtYXQiLCJkYXRlRm9ybWF0IiwiX3JlZiRtb250aEZvcm1hdCIsIm1vbnRoRm9ybWF0IiwiX3JlZiRpc1NpbmdsZSIsImlzU2luZ2xlIiwiX3JlZiRpc01vYmlsZSIsImlzTW9iaWxlIiwiX3JlZiRoaWdobGlnaHRUb2RheSIsImhpZ2hsaWdodFRvZGF5IiwiX3JlZiR3ZWVrRGF5Rm9ybWF0Iiwid2Vla0RheUZvcm1hdCIsIl9yZWYkaGlkZURpYWxvZ0hlYWRlciIsImhpZGVEaWFsb2dIZWFkZXIiLCJfcmVmJGhpZGVEaWFsb2dGb290ZXIiLCJoaWRlRGlhbG9nRm9vdGVyIiwiX3JlZiRkYXRlSW5wdXRTZXBlcmF0IiwiZGF0ZUlucHV0U2VwZXJhdG9yIiwiX3JlZiRzaW5nbGVDYWxlbmRhciIsInNpbmdsZUNhbGVuZGFyIiwiX3JlZiR0b29sdGlwIiwidG9vbHRpcCIsIl9yZWYkc3ViVGV4dERpY3QiLCJzdWJUZXh0RGljdCIsIl9yZWYkZXhwYW5kRGlyZWN0aW9uIiwiZXhwYW5kRGlyZWN0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaGlkZUFuaW1hdGlvbiIsInNldEhpZGVBbmltYXRpb24iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImRhdGVDaGFuZ2VkIiwic2V0RGF0ZUNoYW5nZWQiLCJjb250YWluZXJSZWYiLCJvbkNoYW5nZURhdGUiLCJkYXRlIiwidmFsdWUiLCJzZXRUaW1lb3V0IiwiY3VycmVudCIsImdldEVsZW1lbnRCeUlkIiwic3RhcnREYXRlSW5wdXQiLCJmb2N1cyIsImNsYXNzTmFtZSIsIm9wZW4iLCJoaWRlIiwic2luZ2xlIiwicmVmIiwiY2hpbGRyZW4iLCJ0eXBlIiwib25DbGljayIsInZpZXdCb3giLCJub25Gb2N1c2FibGUiLCJ0YWJJbmRleCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/DatePicker/Dialog.js\n");
|
|
39
|
+
|
|
40
|
+
/***/ }),
|
|
41
|
+
|
|
42
|
+
/***/ "./src/lib/components/DatePicker/DialogContentDesktop.js":
|
|
43
|
+
/*!***************************************************************!*\
|
|
44
|
+
!*** ./src/lib/components/DatePicker/DialogContentDesktop.js ***!
|
|
45
|
+
\***************************************************************/
|
|
46
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
47
|
+
|
|
48
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _assets_svg_prev_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../assets/svg/prev.svg */ \"./src/lib/assets/svg/prev.svg\");\n/* harmony import */ var _assets_svg_next_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../assets/svg/next.svg */ \"./src/lib/assets/svg/next.svg\");\n/* harmony import */ var _MonthCalendar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./MonthCalendar */ \"./src/lib/components/DatePicker/MonthCalendar.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\nvar DialogContentDesktop = function DialogContentDesktop(_ref) {\n var fromDate = _ref.fromDate,\n toDate = _ref.toDate,\n hoverDate = _ref.hoverDate,\n onSelectDate = _ref.onSelectDate,\n onHoverDate = _ref.onHoverDate,\n startWeekDay = _ref.startWeekDay,\n minDate = _ref.minDate,\n maxDate = _ref.maxDate,\n monthFormat = _ref.monthFormat,\n weekDayFormat = _ref.weekDayFormat,\n isSingle = _ref.isSingle,\n complsOpen = _ref.complsOpen,\n dateChanged = _ref.dateChanged,\n highlightToday = _ref.highlightToday,\n singleCalendar = _ref.singleCalendar,\n tooltip = _ref.tooltip,\n subTextDict = _ref.subTextDict;\n var containerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n var tooltipRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),\n _useState2 = _slicedToArray(_useState, 2),\n translateAmount = _useState2[0],\n setTranslateAmount = _useState2[1];\n var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState4 = _slicedToArray(_useState3, 2),\n monthArray = _useState4[0],\n setMonthArray = _useState4[1];\n var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(dayjs__WEBPACK_IMPORTED_MODULE_2___default()()),\n _useState6 = _slicedToArray(_useState5, 2),\n focusDate = _useState6[0],\n setFocusDate = _useState6[1];\n var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n disablePrev = _useState8[0],\n setDisablePrev = _useState8[1];\n var _useState9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState10 = _slicedToArray(_useState9, 2),\n disableNext = _useState10[0],\n setDisableNext = _useState10[1];\n var _useState11 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),\n _useState12 = _slicedToArray(_useState11, 2),\n wrapperWidth = _useState12[0],\n setWrapperWidth = _useState12[1];\n var _useState13 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),\n _useState14 = _slicedToArray(_useState13, 2),\n dayValue = _useState14[0],\n setDayValue = _useState14[1];\n function getArrayMonth(date, singleCalendar) {\n var prevMonth = dayjs__WEBPACK_IMPORTED_MODULE_2___default()(date).subtract(1, 'month');\n var nextMonth = dayjs__WEBPACK_IMPORTED_MODULE_2___default()(date).add(1, 'month');\n var futureMonth = dayjs__WEBPACK_IMPORTED_MODULE_2___default()(date).add(2, 'month');\n if (singleCalendar) {\n return [prevMonth, focusDate, nextMonth];\n }\n return [prevMonth, focusDate, nextMonth, futureMonth];\n }\n var handleHoverDay = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function (date) {\n setDayValue(date);\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (containerRef.current) {\n var style = window.getComputedStyle(containerRef.current);\n var _translateAmount = singleCalendar ? containerRef.current.offsetWidth + parseInt(style.marginLeft) - 8 : containerRef.current.offsetWidth / 2;\n setWrapperWidth(_translateAmount);\n }\n }, [containerRef.current]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n setFocusDate(fromDate || dayjs__WEBPACK_IMPORTED_MODULE_2___default()());\n }, [complsOpen]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (minDate && focusDate.isBefore(dayjs__WEBPACK_IMPORTED_MODULE_2___default()(minDate).add(1, 'month'), 'month')) {\n setDisablePrev(true);\n } else {\n setDisablePrev(false);\n }\n if (maxDate && focusDate.isAfter(dayjs__WEBPACK_IMPORTED_MODULE_2___default()(maxDate).subtract(2, 'month'), 'month')) {\n setDisableNext(true);\n } else {\n setDisableNext(false);\n }\n var arrayMonth = getArrayMonth(focusDate, singleCalendar);\n setMonthArray(arrayMonth);\n }, [focusDate]);\n function increaseFocusDate(date) {\n if (dayjs__WEBPACK_IMPORTED_MODULE_2___default().isDayjs(date)) {\n setFocusDate(date);\n } else {\n var nextDate = dayjs__WEBPACK_IMPORTED_MODULE_2___default()(focusDate).add(1, 'month');\n setFocusDate(nextDate);\n }\n }\n function decreaseFocusDate(date) {\n if (dayjs__WEBPACK_IMPORTED_MODULE_2___default().isDayjs(date)) {\n setFocusDate(date);\n } else {\n var prevDate = dayjs__WEBPACK_IMPORTED_MODULE_2___default()(focusDate).subtract(1, 'month');\n setFocusDate(prevDate);\n }\n }\n function increaseCurrentMonth(date) {\n if (disableNext) return;\n setTranslateAmount(-wrapperWidth);\n setTimeout(function () {\n increaseFocusDate(date);\n setTranslateAmount(0);\n }, 200);\n }\n function decreaseCurrentMonth(date) {\n if (disablePrev) return;\n setTranslateAmount(wrapperWidth);\n setTimeout(function () {\n decreaseFocusDate(date);\n setTranslateAmount(0);\n }, 200);\n }\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (dateChanged) {\n if (dayjs__WEBPACK_IMPORTED_MODULE_2___default()(dateChanged).isBefore(focusDate, 'month', true)) {\n decreaseCurrentMonth(dateChanged);\n }\n if (dayjs__WEBPACK_IMPORTED_MODULE_2___default()(dateChanged).isAfter(focusDate.add(1, 'month'), 'month', true)) {\n increaseCurrentMonth(dayjs__WEBPACK_IMPORTED_MODULE_2___default()(dateChanged).subtract(1, 'month'));\n }\n }\n }, [dateChanged]);\n function onBackButtonKeyDown(e) {\n if (e.keyCode === 32 || e.keyCode === 13) {\n e.preventDefault();\n decreaseCurrentMonth();\n return false;\n }\n }\n function onNextButtonKeyDown(e) {\n if (e.keyCode === 32 || e.keyCode === 13) {\n e.preventDefault();\n increaseCurrentMonth();\n return false;\n }\n }\n function focusOnCalendar() {\n if (containerRef && containerRef.current) {\n var selectedButton = containerRef.current.querySelector('.day.selected');\n if (!selectedButton) {\n selectedButton = containerRef.current.querySelector('.month-calendar:not(.hidden) .day:not(.disabled)');\n }\n if (selectedButton) {\n selectedButton.focus();\n }\n }\n }\n function onKeyDown(e) {\n var allowKeyCodes = [9, 32, 37, 38, 39, 40];\n if (allowKeyCodes.indexOf(e.keyCode) === -1 || !e.target.getAttribute('data-day-index')) {\n return true;\n }\n e.preventDefault();\n var calendarContainer = e.target.parentElement.parentElement.parentElement.parentElement;\n var dayIndex = parseInt(e.target.getAttribute('data-day-index'));\n var dateValue = parseInt(e.target.getAttribute('data-date-value'));\n var date = dayjs__WEBPACK_IMPORTED_MODULE_2___default()(dateValue);\n var lastDateOfMonth = date.add(1, 'month').set('date', 0).get('date');\n var nextDayIndex = -1;\n var increaseAmount = 0;\n switch (e.keyCode) {\n case 9:\n {\n var doneButton = calendarContainer.parentElement.parentElement.parentElement.querySelector('.submit-button');\n if (doneButton) {\n doneButton.focus();\n return true;\n }\n break;\n }\n case 32:\n e.target.click();\n break;\n case 37:\n increaseAmount = -1;\n break;\n case 38:\n increaseAmount = -7;\n break;\n case 39:\n increaseAmount = 1;\n break;\n case 40:\n increaseAmount = 7;\n break;\n default:\n break;\n }\n nextDayIndex = dayIndex + increaseAmount;\n if (nextDayIndex > 0 && nextDayIndex <= lastDateOfMonth) {\n var selector = \".day[data-day-index=\\\"\".concat(nextDayIndex, \"\\\"]\");\n var dayElement = e.target.parentElement.parentElement.querySelector(selector);\n if (dayElement) {\n dayElement.focus();\n }\n } else {\n var nextDate = date.add(increaseAmount, 'day');\n if (increaseAmount > 0 && Math.ceil(nextDate.diff(focusDate, 'month', true)) > 1) {\n if (maxDate && dayjs__WEBPACK_IMPORTED_MODULE_2___default()(nextDate).isAfter(maxDate, 'month')) return false;\n increaseCurrentMonth();\n } else if (increaseAmount < 0 && Math.ceil(focusDate.diff(nextDate, 'month', true)) > 0) {\n if (minDate && dayjs__WEBPACK_IMPORTED_MODULE_2___default()(nextDate).isBefore(minDate, 'month')) return false;\n decreaseCurrentMonth();\n }\n setTimeout(function () {\n var query = \".month-calendar[data-month-index=\\\"\".concat(nextDate.get('month') + 1, \"\\\"] .day[data-day-index=\\\"\").concat(nextDate.get('date'), \"\\\"]\");\n var dayElement = calendarContainer.querySelector(query);\n if (dayElement) {\n dayElement.focus();\n }\n }, 200);\n }\n return false;\n }\n function renderMonthCalendars() {\n return monthArray.map(function (date, dateIndex) {\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_MonthCalendar__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n // eslint-disable-next-line react/no-array-index-key\n , {\n hidden: dateIndex === 0 && translateAmount <= 0,\n isAnimating: dateIndex === 0 && translateAmount > 0,\n month: dayjs__WEBPACK_IMPORTED_MODULE_2___default()(date).get('month'),\n year: dayjs__WEBPACK_IMPORTED_MODULE_2___default()(date).get('year'),\n onSelectDate: onSelectDate,\n onHoverDate: onHoverDate,\n fromDate: fromDate,\n toDate: toDate,\n hoverDate: hoverDate,\n startWeekDay: startWeekDay,\n minDate: minDate,\n maxDate: maxDate,\n weekDayFormat: weekDayFormat,\n monthFormat: monthFormat,\n isSingle: isSingle,\n highlightToday: highlightToday,\n singleCalendar: singleCalendar,\n handleHoverDay: handleHoverDay,\n subTextDict: subTextDict,\n ref: tooltipRef\n }, dateIndex);\n });\n }\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n style: {\n position: 'relative'\n },\n children: [tooltip && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n id: \"day-tooltip\",\n className: \"tooltip-text\",\n ref: tooltipRef,\n children: typeof tooltip === 'function' ? tooltip(dayValue.$d ? new Date(dayValue.$d) : new Date()) : tooltip\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('calendar-wrapper', {\n single: singleCalendar\n }),\n ref: containerRef,\n onKeyDown: onKeyDown,\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('calendar-content', {\n isAnimating: translateAmount !== 0,\n single: singleCalendar\n }),\n style: {\n transform: \"translateX(\".concat(translateAmount, \"px)\")\n },\n children: renderMonthCalendars()\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: \"calendar-flippers\",\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('flipper-button', {\n disabled: disablePrev\n }),\n onClick: decreaseCurrentMonth,\n onKeyDown: onBackButtonKeyDown,\n role: \"button\",\n tabIndex: \"0\",\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_assets_svg_prev_svg__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n viewBox: \"0 0 24 24\"\n })\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('flipper-button', {\n disabled: disableNext\n }),\n onClick: increaseCurrentMonth,\n onKeyDown: onNextButtonKeyDown,\n role: \"button\",\n tabIndex: \"0\",\n onBlur: focusOnCalendar,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_assets_svg_next_svg__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n viewBox: \"0 0 24 24\"\n })\n })]\n })]\n })]\n });\n};\nDialogContentDesktop.defaultProps = {\n fromDate: null,\n toDate: null,\n hoverDate: null,\n onSelectDate: function onSelectDate() {},\n onHoverDate: function onHoverDate() {},\n startWeekDay: null,\n minDate: null,\n maxDate: null,\n monthFormat: '',\n isSingle: false,\n complsOpen: false,\n dateChanged: null,\n highlightToday: false,\n singleCalendar: false,\n weekDayFormat: '',\n tooltip: '',\n subTextDict: null\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DialogContentDesktop);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9EaWFsb2dDb250ZW50RGVza3RvcC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVlO0FBQ29CO0FBQ1A7QUFDRjtBQUV1QjtBQUNBO0FBQ0w7QUFBQTtBQUU1QyxJQUFNZSxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFBQyxJQUFBLEVBa0JwQjtFQUFBLElBakJKQyxRQUFRLEdBQUFELElBQUEsQ0FBUkMsUUFBUTtJQUNSQyxNQUFNLEdBQUFGLElBQUEsQ0FBTkUsTUFBTTtJQUNOQyxTQUFTLEdBQUFILElBQUEsQ0FBVEcsU0FBUztJQUNUQyxZQUFZLEdBQUFKLElBQUEsQ0FBWkksWUFBWTtJQUNaQyxXQUFXLEdBQUFMLElBQUEsQ0FBWEssV0FBVztJQUNYQyxZQUFZLEdBQUFOLElBQUEsQ0FBWk0sWUFBWTtJQUNaQyxPQUFPLEdBQUFQLElBQUEsQ0FBUE8sT0FBTztJQUNQQyxPQUFPLEdBQUFSLElBQUEsQ0FBUFEsT0FBTztJQUNQQyxXQUFXLEdBQUFULElBQUEsQ0FBWFMsV0FBVztJQUNYQyxhQUFhLEdBQUFWLElBQUEsQ0FBYlUsYUFBYTtJQUNiQyxRQUFRLEdBQUFYLElBQUEsQ0FBUlcsUUFBUTtJQUNSQyxVQUFVLEdBQUFaLElBQUEsQ0FBVlksVUFBVTtJQUNWQyxXQUFXLEdBQUFiLElBQUEsQ0FBWGEsV0FBVztJQUNYQyxjQUFjLEdBQUFkLElBQUEsQ0FBZGMsY0FBYztJQUNkQyxjQUFjLEdBQUFmLElBQUEsQ0FBZGUsY0FBYztJQUNkQyxPQUFPLEdBQUFoQixJQUFBLENBQVBnQixPQUFPO0lBQ1BDLFdBQVcsR0FBQWpCLElBQUEsQ0FBWGlCLFdBQVc7RUFFWCxJQUFNQyxZQUFZLEdBQUcvQiw2Q0FBTSxDQUFDLENBQUM7RUFDN0IsSUFBTWdDLFVBQVUsR0FBR2hDLDZDQUFNLENBQUMsQ0FBQztFQUMzQixJQUFBaUMsU0FBQSxHQUE4Q2xDLCtDQUFRLENBQUMsQ0FB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O1VBQ1pFLE1BQU0sRUFBRWhELGVBQWdCO1VBQUFvQyxRQUFBLGVBRXhCekgsc0RBQUEsQ0FBQ0gsNERBQVE7WUFBQ3VJLE9BQU8sRUFBQztVQUFXLENBQUU7UUFBQyxDQUM3QixDQUFDO01BQUEsQ0FDSCxDQUFDO0lBQUEsQ0FDSCxDQUFDO0VBQUEsQ0FDSCxDQUFDO0FBRVYsQ0FBQztBQTBCRGpJLG9CQUFvQixDQUFDbUksWUFBWSxHQUFHO0VBQ2xDakksUUFBUSxFQUFFLElBQUk7RUFDZEMsTUFBTSxFQUFFLElBQUk7RUFDWkMsU0FBUyxFQUFFLElBQUk7RUFDZkMsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUEsRUFBUSxDQUFDLENBQUM7RUFDdEJDLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFBLEVBQVEsQ0FBQyxDQUFDO0VBQ3JCQyxZQUFZLEVBQUUsSUFBSTtFQUNsQkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsV0FBVyxFQUFFLEVBQUU7RUFDZkUsUUFBUSxFQUFFLEtBQUs7RUFDZkMsVUFBVSxFQUFFLEtBQUs7RUFDakJDLFdBQVcsRUFBRSxJQUFJO0VBQ2pCQyxjQUFjLEVBQUUsS0FBSztFQUNyQkMsY0FBYyxFQUFFLEtBQUs7RUFDckJMLGFBQWEsRUFBRSxFQUFFO0VBQ2pCTSxPQUFPLEVBQUUsRUFBRTtFQUNYQyxXQUFXLEVBQUU7QUFDZixDQUFDO0FBRUQsaUVBQWVsQixvQkFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdGVsc2hvL2dvb2dsZS1mbGlnaHQtZGF0ZXBpY2tlci8uL3NyYy9saWIvY29tcG9uZW50cy9EYXRlUGlja2VyL0RpYWxvZ0NvbnRlbnREZXNrdG9wLmpzPzgxYjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XHJcbiAgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VDYWxsYmFjayxcclxufSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XHJcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuXHJcbmltcG9ydCBQcmV2SWNvbiBmcm9tICcuLi8uLi9hc3NldHMvc3ZnL3ByZXYuc3ZnJztcclxuaW1wb3J0IE5leHRJY29uIGZyb20gJy4uLy4uL2Fzc2V0cy9zdmcvbmV4dC5zdmcnO1xyXG5pbXBvcnQgTW9udGhDYWxlbmRhciBmcm9tICcuL01vbnRoQ2FsZW5kYXInO1xyXG5cclxuY29uc3QgRGlhbG9nQ29udGVudERlc2t0b3AgPSAoe1xyXG4gIGZyb21EYXRlLFxyXG4gIHRvRGF0ZSxcclxuICBob3ZlckRhdGUsXHJcbiAgb25TZWxlY3REYXRlLFxyXG4gIG9uSG92ZXJEYXRlLFxyXG4gIHN0YXJ0V2Vla0RheSxcclxuICBtaW5EYXRlLFxyXG4gIG1heERhdGUsXHJcbiAgbW9udGhGb3JtYXQsXHJcbiAgd2Vla0RheUZvcm1hdCxcclxuICBpc1NpbmdsZSxcclxuICBjb21wbHNPcGVuLFxyXG4gIGRhdGVDaGFuZ2VkLFxyXG4gIGhpZ2hsaWdodFRvZGF5LFxyXG4gIHNpbmdsZUNhbGVuZGFyLFxyXG4gIHRvb2x0aXAsXHJcbiAgc3ViVGV4dERpY3RcclxufSkgPT4ge1xyXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpO1xyXG4gIGNvbnN0IHRvb2x0aXBSZWYgPSB1c2VSZWYoKTtcclxuICBjb25zdCBbdHJhbnNsYXRlQW1vdW50LCBzZXRUcmFuc2xhdGVBbW91bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgY29uc3QgW21vbnRoQXJyYXksIHNldE1vbnRoQXJyYXldID0gdXNlU3RhdGUoW10pO1xyXG4gIGNvbnN0IFtmb2N1c0RhdGUsIHNldEZvY3VzRGF0ZV0gPSB1c2VTdGF0ZShkYXlqcygpKTtcclxuICBjb25zdCBbZGlzYWJsZVByZXYsIHNldERpc2FibGVQcmV2XSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbZGlzYWJsZU5leHQsIHNldERpc2FibGVOZXh0XSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbd3JhcHBlcldpZHRoLCBzZXRXcmFwcGVyV2lkdGhdID0gdXNlU3RhdGUoMCk7XHJcbiAgY29uc3QgW2RheVZhbHVlLCBzZXREYXlWYWx1ZV0gPSB1c2VTdGF0ZSgwKTtcclxuXHJcbiAgZnVuY3Rpb24gZ2V0QXJyYXlNb250aChkYXRlLCBzaW5nbGVDYWxlbmRhcikge1xyXG4gICAgY29uc3QgcHJldk1vbnRoID0gZGF5anMoZGF0ZSkuc3VidHJhY3QoMSwgJ21vbnRoJyk7XHJcbiAgICBjb25zdCBuZXh0TW9udGggPSBkYXlqcyhkYXRlKS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICBjb25zdCBmdXR1cmVNb250aCA9IGRheWpzKGRhdGUpLmFkZCgyLCAnbW9udGgnKTtcclxuXHJcbiAgICBpZiAoc2luZ2xlQ2FsZW5kYXIpIHtcclxuICAgICAgcmV0dXJuIFtwcmV2TW9udGgsIGZvY3VzRGF0ZSwgbmV4dE1vbnRoXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW3ByZXZNb250aCwgZm9jdXNEYXRlLCBuZXh0TW9udGgsIGZ1dHVyZU1vbnRoXTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGhhbmRsZUhvdmVyRGF5ID0gdXNlQ2FsbGJhY2soZGF0ZSA9PiB7XHJcbiAgICBzZXREYXlWYWx1ZShkYXRlKTtcclxuICB9LCBbXSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoY29udGFpbmVyUmVmLmN1cnJlbnQpIHtcclxuICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJSZWYuY3VycmVudCk7XHJcbiAgICAgIGNvbnN0IF90cmFuc2xhdGVBbW91bnQgPSBzaW5nbGVDYWxlbmRhciA/IGNvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoICsgcGFyc2VJbnQoc3R5bGUubWFyZ2luTGVmdCkgLSA4IDogY29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGggLyAyO1xyXG4gICAgICBzZXRXcmFwcGVyV2lkdGgoX3RyYW5zbGF0ZUFtb3VudCk7XHJcbiAgICB9XHJcbiAgfSwgW2NvbnRhaW5lclJlZi5jdXJyZW50XSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBzZXRGb2N1c0RhdGUoZnJvbURhdGUgfHwgZGF5anMoKSk7XHJcbiAgfSwgW2NvbXBsc09wZW5dKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChtaW5EYXRlICYmIGZvY3VzRGF0ZS5pc0JlZm9yZShkYXlqcyhtaW5EYXRlKS5hZGQoMSwgJ21vbnRoJyksICdtb250aCcpKSB7XHJcbiAgICAgIHNldERpc2FibGVQcmV2KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0RGlzYWJsZVByZXYoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXhEYXRlICYmIGZvY3VzRGF0ZS5pc0FmdGVyKGRheWpzKG1heERhdGUpLnN1YnRyYWN0KDIsICdtb250aCcpLCAnbW9udGgnKSkge1xyXG4gICAgICBzZXREaXNhYmxlTmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldERpc2FibGVOZXh0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhcnJheU1vbnRoID0gZ2V0QXJyYXlNb250aChmb2N1c0RhdGUsIHNpbmdsZUNhbGVuZGFyKTtcclxuICAgIHNldE1vbnRoQXJyYXkoYXJyYXlNb250aCk7XHJcbiAgfSwgW2ZvY3VzRGF0ZV0pO1xyXG5cclxuICBmdW5jdGlvbiBpbmNyZWFzZUZvY3VzRGF0ZShkYXRlKSB7XHJcbiAgICBpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xyXG4gICAgICBzZXRGb2N1c0RhdGUoZGF0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBuZXh0RGF0ZSA9IGRheWpzKGZvY3VzRGF0ZSkuYWRkKDEsICdtb250aCcpO1xyXG4gICAgICBzZXRGb2N1c0RhdGUobmV4dERhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVjcmVhc2VGb2N1c0RhdGUoZGF0ZSkge1xyXG4gICAgaWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcclxuICAgICAgc2V0Rm9jdXNEYXRlKGRhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJldkRhdGUgPSBkYXlqcyhmb2N1c0RhdGUpLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICBzZXRGb2N1c0RhdGUocHJldkRhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaW5jcmVhc2VDdXJyZW50TW9udGgoZGF0ZSkge1xyXG4gICAgaWYgKGRpc2FibGVOZXh0KSByZXR1cm47XHJcblxyXG4gICAgc2V0VHJhbnNsYXRlQW1vdW50KC13cmFwcGVyV2lkdGgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGluY3JlYXNlRm9jdXNEYXRlKGRhdGUpO1xyXG4gICAgICBzZXRUcmFuc2xhdGVBbW91bnQoMCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVjcmVhc2VDdXJyZW50TW9udGgoZGF0ZSkge1xyXG4gICAgaWYgKGRpc2FibGVQcmV2KSByZXR1cm47XHJcblxyXG4gICAgc2V0VHJhbnNsYXRlQW1vdW50KHdyYXBwZXJXaWR0aCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgZGVjcmVhc2VGb2N1c0RhdGUoZGF0ZSk7XHJcbiAgICAgIHNldFRyYW5zbGF0ZUFtb3VudCgwKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKGRhdGVDaGFuZ2VkKSB7XHJcbiAgICAgIGlmIChkYXlqcyhkYXRlQ2hhbmdlZCkuaXNCZWZvcmUoZm9jdXNEYXRlLCAnbW9udGgnLCB0cnVlKSkge1xyXG4gICAgICAgIGRlY3JlYXNlQ3VycmVudE1vbnRoKGRhdGVDaGFuZ2VkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF5anMoZGF0ZUNoYW5nZWQpLmlzQWZ0ZXIoZm9jdXNEYXRlLmFkZCgxLCAnbW9udGgnKSwgJ21vbnRoJywgdHJ1ZSkpIHtcclxuICAgICAgICBpbmNyZWFzZUN1cnJlbnRNb250aChkYXlqcyhkYXRlQ2hhbmdlZCkuc3VidHJhY3QoMSwgJ21vbnRoJykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgW2RhdGVDaGFuZ2VkXSk7XHJcblxyXG4gIGZ1bmN0aW9uIG9uQmFja0J1dHRvbktleURvd24oZSkge1xyXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMzIgfHwgZS5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGRlY3JlYXNlQ3VycmVudE1vbnRoKCk7XHJcblxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBvbk5leHRCdXR0b25LZXlEb3duKGUpIHtcclxuICAgIGlmIChlLmtleUNvZGUgPT09IDMyIHx8IGUua2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpbmNyZWFzZUN1cnJlbnRNb250aCgpO1xyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9jdXNPbkNhbGVuZGFyKCkge1xyXG4gICAgaWYgKGNvbnRhaW5lclJlZiAmJiBjb250YWluZXJSZWYuY3VycmVudCkge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRCdXR0b24gPSBjb250YWluZXJSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCcuZGF5LnNlbGVjdGVkJyk7XHJcbiAgICAgIGlmICghc2VsZWN0ZWRCdXR0b24pIHtcclxuICAgICAgICBzZWxlY3RlZEJ1dHRvbiA9IGNvbnRhaW5lclJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAnLm1vbnRoLWNhbGVuZGFyOm5vdCguaGlkZGVuKSAuZGF5Om5vdCguZGlzYWJsZWQpJyxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWxlY3RlZEJ1dHRvbikge1xyXG4gICAgICAgIHNlbGVjdGVkQnV0dG9uLmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XHJcbiAgICBjb25zdCBhbGxvd0tleUNvZGVzID0gWzksIDMyLCAzNywgMzgsIDM5LCA0MF07XHJcbiAgICBpZiAoXHJcbiAgICAgIGFsbG93S2V5Q29kZXMuaW5kZXhPZihlLmtleUNvZGUpID09PSAtMVxyXG4gICAgICB8fCAhZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWRheS1pbmRleCcpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IGNhbGVuZGFyQ29udGFpbmVyID0gZS50YXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIGNvbnN0IGRheUluZGV4ID0gcGFyc2VJbnQoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWRheS1pbmRleCcpKTtcclxuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IHBhcnNlSW50KGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1kYXRlLXZhbHVlJykpO1xyXG4gICAgY29uc3QgZGF0ZSA9IGRheWpzKGRhdGVWYWx1ZSk7XHJcbiAgICBjb25zdCBsYXN0RGF0ZU9mTW9udGggPSBkYXRlLmFkZCgxLCAnbW9udGgnKS5zZXQoJ2RhdGUnLCAwKS5nZXQoJ2RhdGUnKTtcclxuICAgIGxldCBuZXh0RGF5SW5kZXggPSAtMTtcclxuICAgIGxldCBpbmNyZWFzZUFtb3VudCA9IDA7XHJcblxyXG4gICAgc3dpdGNoIChlLmtleUNvZGUpIHtcclxuICAgICAgY2FzZSA5OiB7XHJcbiAgICAgICAgY29uc3QgZG9uZUJ1dHRvbiA9IGNhbGVuZGFyQ29udGFpbmVyLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAnLnN1Ym1pdC1idXR0b24nLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGRvbmVCdXR0b24pIHtcclxuICAgICAgICAgIGRvbmVCdXR0b24uZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAzMjpcclxuICAgICAgICBlLnRhcmdldC5jbGljaygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM3OlxyXG4gICAgICAgIGluY3JlYXNlQW1vdW50ID0gLTE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzg6XHJcbiAgICAgICAgaW5jcmVhc2VBbW91bnQgPSAtNztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOTpcclxuICAgICAgICBpbmNyZWFzZUFtb3VudCA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDA6XHJcbiAgICAgICAgaW5jcmVhc2VBbW91bnQgPSA3O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIG5leHREYXlJbmRleCA9IGRheUluZGV4ICsgaW5jcmVhc2VBbW91bnQ7XHJcbiAgICBpZiAobmV4dERheUluZGV4ID4gMCAmJiBuZXh0RGF5SW5kZXggPD0gbGFzdERhdGVPZk1vbnRoKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gYC5kYXlbZGF0YS1kYXktaW5kZXg9XCIke25leHREYXlJbmRleH1cIl1gO1xyXG4gICAgICBjb25zdCBkYXlFbGVtZW50ID0gZS50YXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgc2VsZWN0b3IsXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChkYXlFbGVtZW50KSB7XHJcbiAgICAgICAgZGF5RWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBuZXh0RGF0ZSA9IGRhdGUuYWRkKGluY3JlYXNlQW1vdW50LCAnZGF5Jyk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaW5jcmVhc2VBbW91bnQgPiAwXHJcbiAgICAgICAgJiYgTWF0aC5jZWlsKG5leHREYXRlLmRpZmYoZm9jdXNEYXRlLCAnbW9udGgnLCB0cnVlKSkgPiAxXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmIChtYXhEYXRlICYmIGRheWpzKG5leHREYXRlKS5pc0FmdGVyKG1heERhdGUsICdtb250aCcpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaW5jcmVhc2VDdXJyZW50TW9udGgoKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBpbmNyZWFzZUFtb3VudCA8IDBcclxuICAgICAgICAmJiBNYXRoLmNlaWwoZm9jdXNEYXRlLmRpZmYobmV4dERhdGUsICdtb250aCcsIHRydWUpKSA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKG1pbkRhdGUgJiYgZGF5anMobmV4dERhdGUpLmlzQmVmb3JlKG1pbkRhdGUsICdtb250aCcpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZGVjcmVhc2VDdXJyZW50TW9udGgoKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IGAubW9udGgtY2FsZW5kYXJbZGF0YS1tb250aC1pbmRleD1cIiR7bmV4dERhdGUuZ2V0KCdtb250aCcpXHJcbiAgICAgICAgICArIDF9XCJdIC5kYXlbZGF0YS1kYXktaW5kZXg9XCIke25leHREYXRlLmdldCgnZGF0ZScpfVwiXWA7XHJcbiAgICAgICAgY29uc3QgZGF5RWxlbWVudCA9IGNhbGVuZGFyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IocXVlcnkpO1xyXG4gICAgICAgIGlmIChkYXlFbGVtZW50KSB7XHJcbiAgICAgICAgICBkYXlFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbmRlck1vbnRoQ2FsZW5kYXJzKCkge1xyXG4gICAgcmV0dXJuIG1vbnRoQXJyYXkubWFwKChkYXRlLCBkYXRlSW5kZXgpID0+IChcclxuICAgICAgPE1vbnRoQ2FsZW5kYXJcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XHJcbiAgICAgICAga2V5PXtkYXRlSW5kZXh9XHJcbiAgICAgICAgaGlkZGVuPXtkYXRlSW5kZXggPT09IDAgJiYgdHJhbnNsYXRlQW1vdW50IDw9IDB9XHJcbiAgICAgICAgaXNBbmltYXRpbmc9e2RhdGVJbmRleCA9PT0gMCAmJiB0cmFuc2xhdGVBbW91bnQgPiAwfVxyXG4gICAgICAgIG1vbnRoPXtkYXlqcyhkYXRlKS5nZXQoJ21vbnRoJyl9XHJcbiAgICAgICAgeWVhcj17ZGF5anMoZGF0ZSkuZ2V0KCd5ZWFyJyl9XHJcbiAgICAgICAgb25TZWxlY3REYXRlPXtvblNlbGVjdERhdGV9XHJcbiAgICAgICAgb25Ib3ZlckRhdGU9e29uSG92ZXJEYXRlfVxyXG4gICAgICAgIGZyb21EYXRlPXtmcm9tRGF0ZX1cclxuICAgICAgICB0b0RhdGU9e3RvRGF0ZX1cclxuICAgICAgICBob3ZlckRhdGU9e2hvdmVyRGF0ZX1cclxuICAgICAgICBzdGFydFdlZWtEYXk9e3N0YXJ0V2Vla0RheX1cclxuICAgICAgICBtaW5EYXRlPXttaW5EYXRlfVxyXG4gICAgICAgIG1heERhdGU9e21heERhdGV9XHJcbiAgICAgICAgd2Vla0RheUZvcm1hdD17d2Vla0RheUZvcm1hdH1cclxuICAgICAgICBtb250aEZvcm1hdD17bW9udGhGb3JtYXR9XHJcbiAgICAgICAgaXNTaW5nbGU9e2lzU2luZ2xlfVxyXG4gICAgICAgIGhpZ2hsaWdodFRvZGF5PXtoaWdobGlnaHRUb2RheX1cclxuICAgICAgICBzaW5nbGVDYWxlbmRhcj17c2luZ2xlQ2FsZW5kYXJ9XHJcbiAgICAgICAgaGFuZGxlSG92ZXJEYXk9e2hhbmRsZUhvdmVyRGF5fVxyXG4gICAgICAgIHN1YlRleHREaWN0PXtzdWJUZXh0RGljdH1cclxuICAgICAgICByZWY9e3Rvb2x0aXBSZWZ9XHJcbiAgICAgIC8+XHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH19PlxyXG4gICAgICB7dG9vbHRpcCAmJiA8ZGl2IGlkPVwiZGF5LXRvb2x0aXBcIiBjbGFzc05hbWU9XCJ0b29sdGlwLXRleHRcIiByZWY9e3Rvb2x0aXBSZWZ9Pnt0eXBlb2YgdG9vbHRpcCA9PT0gJ2Z1bmN0aW9uJyA/IHRvb2x0aXAoZGF5VmFsdWUuJGQgPyBuZXcgRGF0ZShkYXlWYWx1ZS4kZCkgOiBuZXcgRGF0ZSgpKSA6IHRvb2x0aXB9PC9kaXY+fVxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjeCgnY2FsZW5kYXItd3JhcHBlcicsIHtcclxuICAgICAgICAgIHNpbmdsZTogc2luZ2xlQ2FsZW5kYXIsXHJcbiAgICAgICAgfSl9XHJcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgICAgb25LZXlEb3duPXtvbktleURvd259XHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2N4KCdjYWxlbmRhci1jb250ZW50Jywge1xyXG4gICAgICAgICAgICBpc0FuaW1hdGluZzogdHJhbnNsYXRlQW1vdW50ICE9PSAwLFxyXG4gICAgICAgICAgICBzaW5nbGU6IHNpbmdsZUNhbGVuZGFyLFxyXG4gICAgICAgICAgfSl9XHJcbiAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKCR7dHJhbnNsYXRlQW1vdW50fXB4KWAsXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtyZW5kZXJNb250aENhbGVuZGFycygpfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FsZW5kYXItZmxpcHBlcnNcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeCgnZmxpcHBlci1idXR0b24nLCB7IGRpc2FibGVkOiBkaXNhYmxlUHJldiB9KX1cclxuICAgICAgICAgICAgb25DbGljaz17ZGVjcmVhc2VDdXJyZW50TW9udGh9XHJcbiAgICAgICAgICAgIG9uS2V5RG93bj17b25CYWNrQnV0dG9uS2V5RG93bn1cclxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxQcmV2SWNvbiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KCdmbGlwcGVyLWJ1dHRvbicsIHsgZGlzYWJsZWQ6IGRpc2FibGVOZXh0IH0pfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXtpbmNyZWFzZUN1cnJlbnRNb250aH1cclxuICAgICAgICAgICAgb25LZXlEb3duPXtvbk5leHRCdXR0b25LZXlEb3dufVxyXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgdGFiSW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgb25CbHVyPXtmb2N1c09uQ2FsZW5kYXJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxOZXh0SWNvbiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn07XHJcblxyXG5EaWFsb2dDb250ZW50RGVza3RvcC5wcm9wVHlwZXMgPSB7XHJcbiAgZnJvbURhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIHRvRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgaG92ZXJEYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcclxuICBvblNlbGVjdERhdGU6IFByb3BUeXBlcy5mdW5jLFxyXG4gIG9uSG92ZXJEYXRlOiBQcm9wVHlwZXMuZnVuYyxcclxuICBzdGFydFdlZWtEYXk6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgbWluRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgbWF4RGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgbW9udGhGb3JtYXQ6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgaXNTaW5nbGU6IFByb3BUeXBlcy5ib29sLFxyXG4gIGNvbXBsc09wZW46IFByb3BUeXBlcy5ib29sLFxyXG4gIGRhdGVDaGFuZ2VkOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcclxuICBoaWdobGlnaHRUb2RheTogUHJvcFR5cGVzLmJvb2wsXHJcbiAgc2luZ2xlQ2FsZW5kYXI6IFByb3BUeXBlcy5ib29sLFxyXG4gIHdlZWtEYXlGb3JtYXQ6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgdG9vbHRpcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbXHJcbiAgICBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gICAgUHJvcFR5cGVzLm5vZGUsXHJcbiAgICBQcm9wVHlwZXMuZnVuYyxcclxuICBdKSxcclxuICBzdWJUZXh0RGljdDogUHJvcFR5cGVzLm9iamVjdFxyXG59O1xyXG5cclxuRGlhbG9nQ29udGVudERlc2t0b3AuZGVmYXVsdFByb3BzID0ge1xyXG4gIGZyb21EYXRlOiBudWxsLFxyXG4gIHRvRGF0ZTogbnVsbCxcclxuICBob3ZlckRhdGU6IG51bGwsXHJcbiAgb25TZWxlY3REYXRlOiAoKSA9PiB7fSxcclxuICBvbkhvdmVyRGF0ZTogKCkgPT4ge30sXHJcbiAgc3RhcnRXZWVrRGF5OiBudWxsLFxyXG4gIG1pbkRhdGU6IG51bGwsXHJcbiAgbWF4RGF0ZTogbnVsbCxcclxuICBtb250aEZvcm1hdDogJycsXHJcbiAgaXNTaW5nbGU6IGZhbHNlLFxyXG4gIGNvbXBsc09wZW46IGZhbHNlLFxyXG4gIGRhdGVDaGFuZ2VkOiBudWxsLFxyXG4gIGhpZ2hsaWdodFRvZGF5OiBmYWxzZSxcclxuICBzaW5nbGVDYWxlbmRhcjogZmFsc2UsXHJcbiAgd2Vla0RheUZvcm1hdDogJycsXHJcbiAgdG9vbHRpcDogJycsXHJcbiAgc3ViVGV4dERpY3Q6IG51bGwsXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaWFsb2dDb250ZW50RGVza3RvcDtcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VDYWxsYmFjayIsIlByb3BUeXBlcyIsImN4IiwiZGF5anMiLCJQcmV2SWNvbiIsIk5leHRJY29uIiwiTW9udGhDYWxlbmRhciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJEaWFsb2dDb250ZW50RGVza3RvcCIsIl9yZWYiLCJmcm9tRGF0ZSIsInRvRGF0ZSIsImhvdmVyRGF0ZSIsIm9uU2VsZWN0RGF0ZSIsIm9uSG92ZXJEYXRlIiwic3RhcnRXZWVrRGF5IiwibWluRGF0ZSIsIm1heERhdGUiLCJtb250aEZvcm1hdCIsIndlZWtEYXlGb3JtYXQiLCJpc1NpbmdsZSIsImNvbXBsc09wZW4iLCJkYXRlQ2hhbmdlZCIsImhpZ2hsaWdodFRvZGF5Iiwic2luZ2xlQ2FsZW5kYXIiLCJ0b29sdGlwIiwic3ViVGV4dERpY3QiLCJjb250YWluZXJSZWYiLCJ0b29sdGlwUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidHJhbnNsYXRlQW1vdW50Iiwic2V0VHJhbnNsYXRlQW1vdW50IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJtb250aEFycmF5Iiwic2V0TW9udGhBcnJheSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiZm9jdXNEYXRlIiwic2V0Rm9jdXNEYXRlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJkaXNhYmxlUHJldiIsInNldERpc2FibGVQcmV2IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwiZGlzYWJsZU5leHQiLCJzZXREaXNhYmxlTmV4dCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJ3cmFwcGVyV2lkdGgiLCJzZXRXcmFwcGVyV2lkdGgiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiZGF5VmFsdWUiLCJzZXREYXlWYWx1ZSIsImdldEFycmF5TW9udGgiLCJkYXRlIiwicHJldk1vbnRoIiwic3VidHJhY3QiLCJuZXh0TW9udGgiLCJhZGQiLCJmdXR1cmVNb250aCIsImhhbmRsZUhvdmVyRGF5IiwiY3VycmVudCIsInN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIl90cmFuc2xhdGVBbW91bnQiLCJvZmZzZXRXaWR0aCIsInBhcnNlSW50IiwibWFyZ2luTGVmdCIsImlzQmVmb3JlIiwiaXNBZnRlciIsImFycmF5TW9udGgiLCJpbmNyZWFzZUZvY3VzRGF0ZSIsImlzRGF5anMiLCJuZXh0RGF0ZSIsImRlY3JlYXNlRm9jdXNEYXRlIiwicHJldkRhdGUiLCJpbmNyZWFzZUN1cnJlbnRNb250aCIsInNldFRpbWVvdXQiLCJkZWNyZWFzZUN1cnJlbnRNb250aCIsIm9uQmFja0J1dHRvbktleURvd24iLCJlIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0Iiwib25OZXh0QnV0dG9uS2V5RG93biIsImZvY3VzT25DYWxlbmRhciIsInNlbGVjdGVkQnV0dG9uIiwicXVlcnlTZWxlY3RvciIsImZvY3VzIiwib25LZXlEb3duIiwiYWxsb3dLZXlDb2RlcyIsImluZGV4T2YiLCJ0YXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCJjYWxlbmRhckNvbnRhaW5lciIsInBhcmVudEVsZW1lbnQiLCJkYXlJbmRleCIsImRhdGVWYWx1ZSIsImxhc3REYXRlT2ZNb250aCIsInNldCIsImdldCIsIm5leHREYXlJbmRleCIsImluY3JlYXNlQW1vdW50IiwiZG9uZUJ1dHRvbiIsImNsaWNrIiwic2VsZWN0b3IiLCJjb25jYXQiLCJkYXlFbGVtZW50IiwiTWF0aCIsImNlaWwiLCJkaWZmIiwicXVlcnkiLCJyZW5kZXJNb250aENhbGVuZGFycyIsIm1hcCIsImRhdGVJbmRleCIsImhpZGRlbiIsImlzQW5pbWF0aW5nIiwibW9udGgiLCJ5ZWFyIiwicmVmIiwicG9zaXRpb24iLCJjaGlsZHJlbiIsImlkIiwiY2xhc3NOYW1lIiwiJGQiLCJEYXRlIiwic2luZ2xlIiwidHJhbnNmb3JtIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwicm9sZSIsInRhYkluZGV4Iiwidmlld0JveCIsIm9uQmx1ciIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/DatePicker/DialogContentDesktop.js\n");
|
|
49
|
+
|
|
50
|
+
/***/ }),
|
|
51
|
+
|
|
52
|
+
/***/ "./src/lib/components/DatePicker/DialogContentMobile.js":
|
|
53
|
+
/*!**************************************************************!*\
|
|
54
|
+
!*** ./src/lib/components/DatePicker/DialogContentMobile.js ***!
|
|
55
|
+
\**************************************************************/
|
|
56
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
57
|
+
|
|
58
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_window__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-window */ \"./node_modules/react-window/dist/index.esm.js\");\n/* harmony import */ var react_virtualized_auto_sizer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-virtualized-auto-sizer */ \"./node_modules/react-virtualized-auto-sizer/dist/react-virtualized-auto-sizer.esm.js\");\n/* harmony import */ var _MonthCalendar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MonthCalendar */ \"./src/lib/components/DatePicker/MonthCalendar.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../helpers */ \"./src/lib/helpers/index.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n\n\n\n\n\n\n\n\nvar DialogContentMobile = function DialogContentMobile(_ref) {\n var _ref$fromDate = _ref.fromDate,\n fromDate = _ref$fromDate === void 0 ? null : _ref$fromDate,\n _ref$toDate = _ref.toDate,\n toDate = _ref$toDate === void 0 ? null : _ref$toDate,\n _ref$hoverDate = _ref.hoverDate,\n hoverDate = _ref$hoverDate === void 0 ? null : _ref$hoverDate,\n _ref$onSelectDate = _ref.onSelectDate,\n onSelectDate = _ref$onSelectDate === void 0 ? function () {} : _ref$onSelectDate,\n _ref$startWeekDay = _ref.startWeekDay,\n startWeekDay = _ref$startWeekDay === void 0 ? null : _ref$startWeekDay,\n _ref$minDate = _ref.minDate,\n minDate = _ref$minDate === void 0 ? null : _ref$minDate,\n _ref$maxDate = _ref.maxDate,\n maxDate = _ref$maxDate === void 0 ? null : _ref$maxDate,\n _ref$monthFormat = _ref.monthFormat,\n monthFormat = _ref$monthFormat === void 0 ? '' : _ref$monthFormat,\n _ref$complsOpen = _ref.complsOpen,\n complsOpen = _ref$complsOpen === void 0 ? false : _ref$complsOpen,\n _ref$isSingle = _ref.isSingle,\n isSingle = _ref$isSingle === void 0 ? false : _ref$isSingle,\n _ref$highlightToday = _ref.highlightToday,\n highlightToday = _ref$highlightToday === void 0 ? false : _ref$highlightToday,\n _ref$weekDayFormat = _ref.weekDayFormat,\n weekDayFormat = _ref$weekDayFormat === void 0 ? '' : _ref$weekDayFormat,\n _ref$tooltip = _ref.tooltip,\n tooltip = _ref$tooltip === void 0 ? '' : _ref$tooltip,\n _ref$subTextDict = _ref.subTextDict,\n subTextDict = _ref$subTextDict === void 0 ? null : _ref$subTextDict;\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(2400),\n _useState2 = _slicedToArray(_useState, 2),\n rowCount = _useState2[0],\n setRowCount = _useState2[1];\n var minYear = minDate ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(minDate).year() : 1900;\n var minMonth = minDate ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(minDate).month() : 0;\n var listRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (maxDate) {\n var _minDate = minDate ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(minDate) : dayjs__WEBPACK_IMPORTED_MODULE_1___default()('1900-01-01');\n setRowCount(dayjs__WEBPACK_IMPORTED_MODULE_1___default()(maxDate).diff(_minDate, 'month') + 1);\n }\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n if (listRef.current && complsOpen) {\n var date = fromDate ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(fromDate) : dayjs__WEBPACK_IMPORTED_MODULE_1___default()();\n var monthDiff = date.diff(dayjs__WEBPACK_IMPORTED_MODULE_1___default()('1900-01-01'), 'month');\n if (minDate) {\n monthDiff = date.diff(dayjs__WEBPACK_IMPORTED_MODULE_1___default()(minDate), 'month');\n }\n listRef.current.scrollToItem(monthDiff + 1, 'smart');\n }\n }, [complsOpen]);\n function getMonthYearFromIndex(index) {\n var _index = index + minMonth;\n var year = minYear + Math.floor(_index / 12);\n var month = _index % 12;\n return {\n year: year,\n month: month\n };\n }\n\n // eslint-disable-next-line react/prop-types\n var Row = function Row(_ref2) {\n var index = _ref2.index,\n style = _ref2.style;\n var _getMonthYearFromInde = getMonthYearFromIndex(index),\n year = _getMonthYearFromInde.year,\n month = _getMonthYearFromInde.month;\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n style: style,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_MonthCalendar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n month: month,\n year: year,\n onSelectDate: onSelectDate,\n fromDate: fromDate,\n toDate: toDate,\n hoverDate: hoverDate,\n startWeekDay: startWeekDay,\n minDate: minDate,\n maxDate: maxDate,\n monthFormat: monthFormat,\n isSingle: isSingle,\n highlightToday: highlightToday,\n tooltip: tooltip,\n subTextDict: subTextDict\n })\n });\n };\n function getItemSize(index) {\n var _getMonthYearFromInde2 = getMonthYearFromIndex(index),\n year = _getMonthYearFromInde2.year,\n month = _getMonthYearFromInde2.month;\n var _getMonthInfo = (0,_helpers__WEBPACK_IMPORTED_MODULE_4__.getMonthInfo)(year, month, 'monday'),\n totalWeek = _getMonthInfo.totalWeek;\n return totalWeek.length * 48 + 34;\n }\n function renderMonthCalendars() {\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(react_virtualized_auto_sizer__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n children: function children(_ref3) {\n var height = _ref3.height,\n width = _ref3.width;\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(react_window__WEBPACK_IMPORTED_MODULE_6__.VariableSizeList, {\n ref: listRef,\n width: width,\n height: height - 36,\n itemCount: rowCount,\n itemSize: getItemSize,\n children: Row\n });\n }\n });\n }\n function generateWeekDay() {\n var arrWeekDay = (0,_helpers__WEBPACK_IMPORTED_MODULE_4__.getWeekDay)(startWeekDay, weekDayFormat);\n return arrWeekDay.map(function (day, index) {\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: \"weekday\",\n children: day\n }, index);\n });\n }\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: \"calendar-wrapper\",\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"div\", {\n className: \"calendar-content\",\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: \"weekdays mobile\",\n children: generateWeekDay()\n }), renderMonthCalendars()]\n })\n });\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DialogContentMobile);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9EaWFsb2dDb250ZW50TW9iaWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMkQ7QUFDeEI7QUFDVDtBQUM4QjtBQUNIO0FBRVQ7QUFDYTtBQUFBO0FBRXpELElBQU1nQixtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFBQyxJQUFBLEVBZW5CO0VBQUEsSUFBQUMsYUFBQSxHQUFBRCxJQUFBLENBZEpFLFFBQVE7SUFBUkEsUUFBUSxHQUFBRCxhQUFBLGNBQUcsSUFBSSxHQUFBQSxhQUFBO0lBQUFFLFdBQUEsR0FBQUgsSUFBQSxDQUNmSSxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsV0FBQSxjQUFHLElBQUksR0FBQUEsV0FBQTtJQUFBRSxjQUFBLEdBQUFMLElBQUEsQ0FDYk0sU0FBUztJQUFUQSxTQUFTLEdBQUFELGNBQUEsY0FBRyxJQUFJLEdBQUFBLGNBQUE7SUFBQUUsaUJBQUEsR0FBQVAsSUFBQSxDQUNoQlEsWUFBWTtJQUFaQSxZQUFZLEdBQUFELGlCQUFBLGNBQUcsWUFBTSxDQUFDLENBQUMsR0FBQUEsaUJBQUE7SUFBQUUsaUJBQUEsR0FBQVQsSUFBQSxDQUN2QlUsWUFBWTtJQUFaQSxZQUFZLEdBQUFELGlCQUFBLGNBQUcsSUFBSSxHQUFBQSxpQkFBQTtJQUFBRSxZQUFBLEdBQUFYLElBQUEsQ0FDbkJZLE9BQU87SUFBUEEsT0FBTyxHQUFBRCxZQUFBLGNBQUcsSUFBSSxHQUFBQSxZQUFBO0lBQUFFLFlBQUEsR0FBQWIsSUFBQSxDQUNkYyxPQUFPO0lBQVBBLE9BQU8sR0FBQUQsWUFBQSxjQUFHLElBQUksR0FBQUEsWUFBQTtJQUFBRSxnQkFBQSxHQUFBZixJQUFBLENBQ2RnQixXQUFXO0lBQVhBLFdBQVcsR0FBQUQsZ0JBQUEsY0FBRyxFQUFFLEdBQUFBLGdCQUFBO0lBQUFFLGVBQUEsR0FBQWpCLElBQUEsQ0FDaEJrQixVQUFVO0lBQVZBLFVBQVUsR0FBQUQsZUFB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QztBQUdWLENBQUM7QUF3QkQsaUVBQWU3RCxtQkFBbUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdGVsc2hvL2dvb2dsZS1mbGlnaHQtZGF0ZXBpY2tlci8uL3NyYy9saWIvY29tcG9uZW50cy9EYXRlUGlja2VyL0RpYWxvZ0NvbnRlbnRNb2JpbGUuanM/NzM1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBWYXJpYWJsZVNpemVMaXN0IGFzIExpc3QgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xyXG5pbXBvcnQgQXV0b1NpemVyIGZyb20gJ3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXInO1xyXG5cclxuaW1wb3J0IE1vbnRoQ2FsZW5kYXIgZnJvbSAnLi9Nb250aENhbGVuZGFyJztcclxuaW1wb3J0IHsgZ2V0TW9udGhJbmZvLCBnZXRXZWVrRGF5IH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XHJcblxyXG5jb25zdCBEaWFsb2dDb250ZW50TW9iaWxlID0gKHtcclxuICBmcm9tRGF0ZSA9IG51bGwsXHJcbiAgdG9EYXRlID0gbnVsbCxcclxuICBob3ZlckRhdGUgPSBudWxsLFxyXG4gIG9uU2VsZWN0RGF0ZSA9ICgpID0+IHt9LFxyXG4gIHN0YXJ0V2Vla0RheSA9IG51bGwsXHJcbiAgbWluRGF0ZSA9IG51bGwsXHJcbiAgbWF4RGF0ZSA9IG51bGwsXHJcbiAgbW9udGhGb3JtYXQgPSAnJyxcclxuICBjb21wbHNPcGVuID0gZmFsc2UsXHJcbiAgaXNTaW5nbGUgPSBmYWxzZSxcclxuICBoaWdobGlnaHRUb2RheSA9IGZhbHNlLFxyXG4gIHdlZWtEYXlGb3JtYXQgPSAnJyxcclxuICB0b29sdGlwID0gJycsXHJcbiAgc3ViVGV4dERpY3QgPSBudWxsXHJcbn0pID0+IHtcclxuICBjb25zdCBbcm93Q291bnQsIHNldFJvd0NvdW50XSA9IHVzZVN0YXRlKDI0MDApO1xyXG4gIGNvbnN0IG1pblllYXIgPSBtaW5EYXRlID8gZGF5anMobWluRGF0ZSkueWVhcigpIDogMTkwMDtcclxuICBjb25zdCBtaW5Nb250aCA9IG1pbkRhdGUgPyBkYXlqcyhtaW5EYXRlKS5tb250aCgpIDogMDtcclxuICBjb25zdCBsaXN0UmVmID0gdXNlUmVmKCk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAobWF4RGF0ZSkge1xyXG4gICAgICBjb25zdCBfbWluRGF0ZSA9IG1pbkRhdGUgPyBkYXlqcyhtaW5EYXRlKSA6IGRheWpzKCcxOTAwLTAxLTAxJyk7XHJcbiAgICAgIHNldFJvd0NvdW50KGRheWpzKG1heERhdGUpLmRpZmYoX21pbkRhdGUsICdtb250aCcpICsgMSk7XHJcbiAgICB9XHJcbiAgfSwgW10pO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKGxpc3RSZWYuY3VycmVudCAmJiBjb21wbHNPcGVuKSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBmcm9tRGF0ZSA/IGRheWpzKGZyb21EYXRlKSA6IGRheWpzKCk7XHJcbiAgICAgIGxldCBtb250aERpZmYgPSBkYXRlLmRpZmYoZGF5anMoJzE5MDAtMDEtMDEnKSwgJ21vbnRoJyk7XHJcblxyXG4gICAgICBpZiAobWluRGF0ZSkge1xyXG4gICAgICAgIG1vbnRoRGlmZiA9IGRhdGUuZGlmZihkYXlqcyhtaW5EYXRlKSwgJ21vbnRoJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxpc3RSZWYuY3VycmVudC5zY3JvbGxUb0l0ZW0obW9udGhEaWZmICsgMSwgJ3NtYXJ0Jyk7XHJcbiAgICB9XHJcbiAgfSwgW2NvbXBsc09wZW5dKTtcclxuXHJcbiAgZnVuY3Rpb24gZ2V0TW9udGhZZWFyRnJvbUluZGV4KGluZGV4KSB7XHJcbiAgICBjb25zdCBfaW5kZXggPSBpbmRleCArIG1pbk1vbnRoO1xyXG4gICAgY29uc3QgeWVhciA9IG1pblllYXIgKyBNYXRoLmZsb29yKF9pbmRleCAvIDEyKTtcclxuICAgIGNvbnN0IG1vbnRoID0gX2luZGV4ICUgMTI7XHJcblxyXG4gICAgcmV0dXJuIHsgeWVhciwgbW9udGggfTtcclxuICB9XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXHJcbiAgY29uc3QgUm93ID0gKHsgaW5kZXgsIHN0eWxlIH0pID0+IHtcclxuICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IGdldE1vbnRoWWVhckZyb21JbmRleChpbmRleCk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBzdHlsZT17c3R5bGV9PlxyXG4gICAgICAgIDxNb250aENhbGVuZGFyXHJcbiAgICAgICAgICBtb250aD17bW9udGh9XHJcbiAgICAgICAgICB5ZWFyPXt5ZWFyfVxyXG4gICAgICAgICAgb25TZWxlY3REYXRlPXtvblNlbGVjdERhdGV9XHJcbiAgICAgICAgICBmcm9tRGF0ZT17ZnJvbURhdGV9XHJcbiAgICAgICAgICB0b0RhdGU9e3RvRGF0ZX1cclxuICAgICAgICAgIGhvdmVyRGF0ZT17aG92ZXJEYXRlfVxyXG4gICAgICAgICAgc3RhcnRXZWVrRGF5PXtzdGFydFdlZWtEYXl9XHJcbiAgICAgICAgICBtaW5EYXRlPXttaW5EYXRlfVxyXG4gICAgICAgICAgbWF4RGF0ZT17bWF4RGF0ZX1cclxuICAgICAgICAgIG1vbnRoRm9ybWF0PXttb250aEZvcm1hdH1cclxuICAgICAgICAgIGlzU2luZ2xlPXtpc1NpbmdsZX1cclxuICAgICAgICAgIGhpZ2hsaWdodFRvZGF5PXtoaWdobGlnaHRUb2RheX1cclxuICAgICAgICAgIHRvb2x0aXA9e3Rvb2x0aXB9XHJcbiAgICAgICAgICBzdWJUZXh0RGljdD17c3ViVGV4dERpY3R9XHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGdldEl0ZW1TaXplKGluZGV4KSB7XHJcbiAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSBnZXRNb250aFllYXJGcm9tSW5kZXgoaW5kZXgpO1xyXG4gICAgY29uc3QgeyB0b3RhbFdlZWsgfSA9IGdldE1vbnRoSW5mbyh5ZWFyLCBtb250aCwgJ21vbmRheScpO1xyXG5cclxuICAgIHJldHVybiB0b3RhbFdlZWsubGVuZ3RoICogNDggKyAzNDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbmRlck1vbnRoQ2FsZW5kYXJzKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPEF1dG9TaXplcj5cclxuICAgICAgICB7KHsgaGVpZ2h0LCB3aWR0aCB9KSA9PiAoXHJcbiAgICAgICAgICA8TGlzdFxyXG4gICAgICAgICAgICByZWY9e2xpc3RSZWZ9XHJcbiAgICAgICAgICAgIHdpZHRoPXt3aWR0aH1cclxuICAgICAgICAgICAgaGVpZ2h0PXtoZWlnaHQgLSAzNn1cclxuICAgICAgICAgICAgaXRlbUNvdW50PXtyb3dDb3VudH1cclxuICAgICAgICAgICAgaXRlbVNpemU9e2dldEl0ZW1TaXplfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7Um93fVxyXG4gICAgICAgICAgPC9MaXN0PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvQXV0b1NpemVyPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdlbmVyYXRlV2Vla0RheSgpIHtcclxuICAgIGNvbnN0IGFycldlZWtEYXkgPSBnZXRXZWVrRGF5KHN0YXJ0V2Vla0RheSwgd2Vla0RheUZvcm1hdCk7XHJcblxyXG4gICAgcmV0dXJuIGFycldlZWtEYXkubWFwKChkYXksIGluZGV4KSA9PiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2Vla2RheVwiIGtleT17aW5kZXh9PntkYXl9PC9kaXY+XHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNhbGVuZGFyLXdyYXBwZXJcIj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYWxlbmRhci1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWVrZGF5cyBtb2JpbGVcIj5cclxuICAgICAgICAgIHtnZW5lcmF0ZVdlZWtEYXkoKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7cmVuZGVyTW9udGhDYWxlbmRhcnMoKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgKTtcclxufTtcclxuXHJcbkRpYWxvZ0NvbnRlbnRNb2JpbGUucHJvcFR5cGVzID0ge1xyXG4gIGZyb21EYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcclxuICB0b0RhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIGhvdmVyRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgb25TZWxlY3REYXRlOiBQcm9wVHlwZXMuZnVuYyxcclxuICBzdGFydFdlZWtEYXk6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgbWluRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgbWF4RGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgbW9udGhGb3JtYXQ6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgY29tcGxzT3BlbjogUHJvcFR5cGVzLmJvb2wsXHJcbiAgaXNTaW5nbGU6IFByb3BUeXBlcy5ib29sLFxyXG4gIGhpZ2hsaWdodFRvZGF5OiBQcm9wVHlwZXMuYm9vbCxcclxuICB3ZWVrRGF5Rm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gIHRvb2x0aXA6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xyXG4gICAgUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIFByb3BUeXBlcy5ub2RlLFxyXG4gICAgUHJvcFR5cGVzLmZ1bmMsXHJcbiAgXSksXHJcbiAgc3ViVGV4dERpY3Q6IFByb3BUeXBlcy5vYmplY3RcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaWFsb2dDb250ZW50TW9iaWxlO1xyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInVzZVJlZiIsIlByb3BUeXBlcyIsImRheWpzIiwiVmFyaWFibGVTaXplTGlzdCIsIkxpc3QiLCJBdXRvU2l6ZXIiLCJNb250aENhbGVuZGFyIiwiZ2V0TW9udGhJbmZvIiwiZ2V0V2Vla0RheSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJEaWFsb2dDb250ZW50TW9iaWxlIiwiX3JlZiIsIl9yZWYkZnJvbURhdGUiLCJmcm9tRGF0ZSIsIl9yZWYkdG9EYXRlIiwidG9EYXRlIiwiX3JlZiRob3ZlckRhdGUiLCJob3ZlckRhdGUiLCJfcmVmJG9uU2VsZWN0RGF0ZSIsIm9uU2VsZWN0RGF0ZSIsIl9yZWYkc3RhcnRXZWVrRGF5Iiwic3RhcnRXZWVrRGF5IiwiX3JlZiRtaW5EYXRlIiwibWluRGF0ZSIsIl9yZWYkbWF4RGF0ZSIsIm1heERhdGUiLCJfcmVmJG1vbnRoRm9ybWF0IiwibW9udGhGb3JtYXQiLCJfcmVmJGNvbXBsc09wZW4iLCJjb21wbHNPcGVuIiwiX3JlZiRpc1NpbmdsZSIsImlzU2luZ2xlIiwiX3JlZiRoaWdobGlnaHRUb2RheSIsImhpZ2hsaWdodFRvZGF5IiwiX3JlZiR3ZWVrRGF5Rm9ybWF0Iiwid2Vla0RheUZvcm1hdCIsIl9yZWYkdG9vbHRpcCIsInRvb2x0aXAiLCJfcmVmJHN1YlRleHREaWN0Iiwic3ViVGV4dERpY3QiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJyb3dDb3VudCIsInNldFJvd0NvdW50IiwibWluWWVhciIsInllYXIiLCJtaW5Nb250aCIsIm1vbnRoIiwibGlzdFJlZiIsIl9taW5EYXRlIiwiZGlmZiIsImN1cnJlbnQiLCJkYXRlIiwibW9udGhEaWZmIiwic2Nyb2xsVG9JdGVtIiwiZ2V0TW9udGhZZWFyRnJvbUluZGV4IiwiaW5kZXgiLCJfaW5kZXgiLCJNYXRoIiwiZmxvb3IiLCJSb3ciLCJfcmVmMiIsInN0eWxlIiwiX2dldE1vbnRoWWVhckZyb21JbmRlIiwiY2hpbGRyZW4iLCJnZXRJdGVtU2l6ZSIsIl9nZXRNb250aFllYXJGcm9tSW5kZTIiLCJfZ2V0TW9udGhJbmZvIiwidG90YWxXZWVrIiwibGVuZ3RoIiwicmVuZGVyTW9udGhDYWxlbmRhcnMiLCJfcmVmMyIsImhlaWdodCIsIndpZHRoIiwicmVmIiwiaXRlbUNvdW50IiwiaXRlbVNpemUiLCJnZW5lcmF0ZVdlZWtEYXkiLCJhcnJXZWVrRGF5IiwibWFwIiwiZGF5IiwiY2xhc3NOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/lib/components/DatePicker/DialogContentMobile.js\n");
|
|
59
|
+
|
|
60
|
+
/***/ }),
|
|
61
|
+
|
|
62
|
+
/***/ "./src/lib/components/DatePicker/MonthCalendar.js":
|
|
63
|
+
/*!********************************************************!*\
|
|
64
|
+
!*** ./src/lib/components/DatePicker/MonthCalendar.js ***!
|
|
65
|
+
\********************************************************/
|
|
66
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
67
|
+
|
|
68
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Week__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Week */ \"./src/lib/components/DatePicker/Week.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../helpers */ \"./src/lib/helpers/index.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n\n\n\n\n\n\n\nvar MonthCalendar = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (_ref, ref) {\n var _ref$month = _ref.month,\n month = _ref$month === void 0 ? null : _ref$month,\n _ref$year = _ref.year,\n year = _ref$year === void 0 ? null : _ref$year,\n _ref$onSelectDate = _ref.onSelectDate,\n onSelectDate = _ref$onSelectDate === void 0 ? function () {} : _ref$onSelectDate,\n _ref$onHoverDate = _ref.onHoverDate,\n onHoverDate = _ref$onHoverDate === void 0 ? function () {} : _ref$onHoverDate,\n _ref$fromDate = _ref.fromDate,\n fromDate = _ref$fromDate === void 0 ? null : _ref$fromDate,\n _ref$toDate = _ref.toDate,\n toDate = _ref$toDate === void 0 ? null : _ref$toDate,\n _ref$hoverDate = _ref.hoverDate,\n hoverDate = _ref$hoverDate === void 0 ? null : _ref$hoverDate,\n _ref$hidden = _ref.hidden,\n hidden = _ref$hidden === void 0 ? false : _ref$hidden,\n _ref$isAnimating = _ref.isAnimating,\n isAnimating = _ref$isAnimating === void 0 ? false : _ref$isAnimating,\n _ref$startWeekDay = _ref.startWeekDay,\n startWeekDay = _ref$startWeekDay === void 0 ? null : _ref$startWeekDay,\n _ref$weekDayFormat = _ref.weekDayFormat,\n weekDayFormat = _ref$weekDayFormat === void 0 ? '' : _ref$weekDayFormat,\n _ref$minDate = _ref.minDate,\n minDate = _ref$minDate === void 0 ? null : _ref$minDate,\n _ref$maxDate = _ref.maxDate,\n maxDate = _ref$maxDate === void 0 ? null : _ref$maxDate,\n _ref$monthFormat = _ref.monthFormat,\n monthFormat = _ref$monthFormat === void 0 ? '' : _ref$monthFormat,\n _ref$isSingle = _ref.isSingle,\n isSingle = _ref$isSingle === void 0 ? false : _ref$isSingle,\n _ref$highlightToday = _ref.highlightToday,\n highlightToday = _ref$highlightToday === void 0 ? false : _ref$highlightToday,\n _ref$singleCalendar = _ref.singleCalendar,\n singleCalendar = _ref$singleCalendar === void 0 ? false : _ref$singleCalendar,\n _ref$handleHoverDay = _ref.handleHoverDay,\n handleHoverDay = _ref$handleHoverDay === void 0 ? function () {} : _ref$handleHoverDay,\n _ref$subTextDict = _ref.subTextDict,\n subTextDict = _ref$subTextDict === void 0 ? null : _ref$subTextDict;\n function generateWeek() {\n var _getMonthInfo = (0,_helpers__WEBPACK_IMPORTED_MODULE_4__.getMonthInfo)(year, month, startWeekDay),\n totalWeek = _getMonthInfo.totalWeek,\n totalDay = _getMonthInfo.totalDay;\n return totalWeek.map(function (week, index) {\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_Week__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n // eslint-disable-next-line react/no-array-index-key\n , {\n week: week,\n month: month,\n year: year,\n isFirst: index === 0,\n onSelectDate: onSelectDate,\n onHoverDate: onHoverDate,\n fromDate: fromDate,\n toDate: toDate,\n hoverDate: hoverDate,\n totalDay: totalDay,\n minDate: minDate,\n maxDate: maxDate,\n isSingle: isSingle,\n weekIndex: index,\n highlightToday: highlightToday,\n handleHoverDay: handleHoverDay,\n subTextDict: subTextDict,\n ref: ref\n }, index);\n });\n }\n function generateWeekDay() {\n var arrWeekDay = (0,_helpers__WEBPACK_IMPORTED_MODULE_4__.getWeekDay)(startWeekDay, weekDayFormat);\n return arrWeekDay.map(function (day, index) {\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: \"weekday\",\n children: day\n }, index);\n });\n }\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('month-calendar', {\n isAnimating: isAnimating,\n hidden: hidden,\n single: singleCalendar\n }),\n \"data-month-index\": month + 1,\n children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: \"month-name\",\n children: monthFormat ? dayjs__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(year, \"-\").concat(month + 1, \"-1\")).format(monthFormat) : dayjs__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(year, \"-\").concat(month + 1, \"-1\")).format('MMMM - YYYY')\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: \"weekdays\",\n children: generateWeekDay()\n }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: \"week-container\",\n children: generateWeek()\n })]\n });\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MonthCalendar);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9Nb250aENhbGVuZGFyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBMEM7QUFDUDtBQUNQO0FBQ0Y7QUFFQTtBQUMrQjtBQUFBO0FBRXpELElBQU1ZLGFBQWEsZ0JBQUdYLGlEQUFVLENBQUMsVUFBQVksSUFBQSxFQW9COUJDLEdBQUcsRUFBSztFQUFBLElBQUFDLFVBQUEsR0FBQUYsSUFBQSxDQW5CVEcsS0FBSztJQUFMQSxLQUFLLEdBQUFELFVBQUEsY0FBRSxJQUFJLEdBQUFBLFVBQUE7SUFBQUUsU0FBQSxHQUFBSixJQUFBLENBQ1hLLElBQUk7SUFBSkEsSUFBSSxHQUFBRCxTQUFBLGNBQUUsSUFBSSxHQUFBQSxTQUFBO0lBQUFFLGlCQUFBLEdBQUFOLElBQUEsQ0FDVk8sWUFBWTtJQUFaQSxZQUFZLEdBQUFELGlCQUFBLGNBQUUsWUFBTSxDQUFDLENBQUMsR0FBQUEsaUJBQUE7SUFBQUUsZ0JBQUEsR0FBQVIsSUFBQSxDQUN0QlMsV0FBVztJQUFYQSxXQUFXLEdBQUFELGdCQUFBLGNBQUUsWUFBTSxDQUFDLENBQUMsR0FBQUEsZ0JBQUE7SUFBQUUsYUFBQSxHQUFBVixJQUFBLENBQ3JCVyxRQUFRO0lBQVJBLFFBQVEsR0FBQUQsYUFBQSxjQUFFLElBQUksR0FBQUEsYUFBQTtJQUFBRSxXQUFBLEdBQUFaLElBQUEsQ0FDZGEsTUFBTTtJQUFOQSxNQUFNLEdBQUFELFdBQUEsY0FBRSxJQUFJLEdBQUFBLFdBQUE7SUFBQUUsY0FBQSxHQUFBZCxJQUFBLENBQ1plLFNBQVM7SUFBVEEsU0FBUyxHQUFBRCxjQUFBLGNBQUUsSUFBSSxHQUFBQSxjQUFBO0lBQUFFLFdBQUEsR0FBQWhCLElBQUEsQ0FDZmlCLE1BQU07SUFBTkEsTUFBTSxHQUFBRCxXQUFBLGNBQUUsS0FBSyxHQUFBQSxXQUFBO0lBQUFFLGdCQUFBLEdBQUFsQixJQUFBLENBQ2JtQixXQUFXO0lBQVhBLFdBQVcsR0FBQUQsZ0JBQUEs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Q1AsQ0FBQztFQUNKO0VBRUEsb0JBQ0VoRCx1REFBQTtJQUNFc0QsU0FBUyxFQUFFOUQsaURBQUUsQ0FBQyxnQkFBZ0IsRUFBRTtNQUM5QjZCLFdBQVcsRUFBWEEsV0FBVztNQUNYRixNQUFNLEVBQU5BLE1BQU07TUFDTnFDLE1BQU0sRUFBRW5CO0lBQ1YsQ0FBQyxDQUFFO0lBQ0gsb0JBQWtCaEMsS0FBSyxHQUFHLENBQUU7SUFBQWtELFFBQUEsZ0JBRTVCekQsc0RBQUE7TUFBS3dELFNBQVMsRUFBQyxZQUFZO01BQUFDLFFBQUEsRUFDeEJ4QixXQUFXLEdBQ1J0Qyw0Q0FBSyxJQUFBZ0UsTUFBQSxDQUFJbEQsSUFBSSxPQUFBa0QsTUFBQSxDQUFJcEQsS0FBSyxHQUFHLENBQUMsT0FBSSxDQUFDLENBQUNxRCxNQUFNLENBQUMzQixXQUFXLENBQUMsR0FDbkR0Qyw0Q0FBSyxJQUFBZ0UsTUFBQSxDQUFJbEQsSUFBSSxPQUFBa0QsTUFBQSxDQUFJcEQsS0FBSyxHQUFHLENBQUMsT0FBSSxDQUFDLENBQUNxRCxNQUFNLENBQUMsYUFBYTtJQUFDLENBQ3RELENBQUMsZUFDTjVELHNEQUFBO01BQUt3RCxTQUFTLEVBQUMsVUFBVTtNQUFBQyxRQUFBLEVBQUVKLGVBQWUsQ0FBQztJQUFDLENBQU0sQ0FBQyxlQUNuRHJELHNEQUFBO01BQUt3RCxTQUFTLEVBQUMsZ0JBQWdCO01BQUFDLFFBQUEsRUFDNUJiLFlBQVksQ0FBQztJQUFDLENBQ1osQ0FBQztFQUFBLENBRUgsQ0FBQztBQUVWLENBQUMsQ0FBQztBQXVCRixpRUFBZXpDLGFBQWEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdGVsc2hvL2dvb2dsZS1mbGlnaHQtZGF0ZXBpY2tlci8uL3NyYy9saWIvY29tcG9uZW50cy9EYXRlUGlja2VyL01vbnRoQ2FsZW5kYXIuanM/MGEwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcclxuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5cclxuaW1wb3J0IFdlZWsgZnJvbSAnLi9XZWVrJztcclxuaW1wb3J0IHsgZ2V0TW9udGhJbmZvLCBnZXRXZWVrRGF5IH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XHJcblxyXG5jb25zdCBNb250aENhbGVuZGFyID0gZm9yd2FyZFJlZigoe1xyXG4gIG1vbnRoPSBudWxsLFxyXG4gIHllYXI9IG51bGwsXHJcbiAgb25TZWxlY3REYXRlPSAoKSA9PiB7fSxcclxuICBvbkhvdmVyRGF0ZT0gKCkgPT4ge30sXHJcbiAgZnJvbURhdGU9IG51bGwsXHJcbiAgdG9EYXRlPSBudWxsLFxyXG4gIGhvdmVyRGF0ZT0gbnVsbCxcclxuICBoaWRkZW49IGZhbHNlLFxyXG4gIGlzQW5pbWF0aW5nPSBmYWxzZSxcclxuICBzdGFydFdlZWtEYXk9IG51bGwsXHJcbiAgd2Vla0RheUZvcm1hdD0gJycsXHJcbiAgbWluRGF0ZT0gbnVsbCxcclxuICBtYXhEYXRlPSBudWxsLFxyXG4gIG1vbnRoRm9ybWF0PSAnJyxcclxuICBpc1NpbmdsZT0gZmFsc2UsXHJcbiAgaGlnaGxpZ2h0VG9kYXk9IGZhbHNlLFxyXG4gIHNpbmdsZUNhbGVuZGFyPSBmYWxzZSxcclxuICBoYW5kbGVIb3ZlckRheT0gKCkgPT4ge30sXHJcbiAgc3ViVGV4dERpY3Q9IG51bGxcclxufSwgcmVmKSA9PiB7XHJcbiAgZnVuY3Rpb24gZ2VuZXJhdGVXZWVrKCkge1xyXG4gICAgY29uc3QgeyB0b3RhbFdlZWssIHRvdGFsRGF5IH0gPSBnZXRNb250aEluZm8oeWVhciwgbW9udGgsIHN0YXJ0V2Vla0RheSk7XHJcblxyXG4gICAgcmV0dXJuIHRvdGFsV2Vlay5tYXAoKHdlZWssIGluZGV4KSA9PiAoXHJcbiAgICAgIDxXZWVrXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxyXG4gICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgd2Vlaz17d2Vla31cclxuICAgICAgICBtb250aD17bW9udGh9XHJcbiAgICAgICAgeWVhcj17eWVhcn1cclxuICAgICAgICBpc0ZpcnN0PXtpbmRleCA9PT0gMH1cclxuICAgICAgICBvblNlbGVjdERhdGU9e29uU2VsZWN0RGF0ZX1cclxuICAgICAgICBvbkhvdmVyRGF0ZT17b25Ib3ZlckRhdGV9XHJcbiAgICAgICAgZnJvbURhdGU9e2Zyb21EYXRlfVxyXG4gICAgICAgIHRvRGF0ZT17dG9EYXRlfVxyXG4gICAgICAgIGhvdmVyRGF0ZT17aG92ZXJEYXRlfVxyXG4gICAgICAgIHRvdGFsRGF5PXt0b3RhbERheX1cclxuICAgICAgICBtaW5EYXRlPXttaW5EYXRlfVxyXG4gICAgICAgIG1heERhdGU9e21heERhdGV9XHJcbiAgICAgICAgaXNTaW5nbGU9e2lzU2luZ2xlfVxyXG4gICAgICAgIHdlZWtJbmRleD17aW5kZXh9XHJcbiAgICAgICAgaGlnaGxpZ2h0VG9kYXk9e2hpZ2hsaWdodFRvZGF5fVxyXG4gICAgICAgIGhhbmRsZUhvdmVyRGF5PXtoYW5kbGVIb3ZlckRheX1cclxuICAgICAgICBzdWJUZXh0RGljdD17c3ViVGV4dERpY3R9XHJcbiAgICAgICAgcmVmPXtyZWZ9XHJcbiAgICAgIC8+XHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdlbmVyYXRlV2Vla0RheSgpIHtcclxuICAgIGNvbnN0IGFycldlZWtEYXkgPSBnZXRXZWVrRGF5KHN0YXJ0V2Vla0RheSwgd2Vla0RheUZvcm1hdCk7XHJcblxyXG4gICAgcmV0dXJuIGFycldlZWtEYXkubWFwKChkYXksIGluZGV4KSA9PiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2Vla2RheVwiIGtleT17aW5kZXh9PlxyXG4gICAgICAgIHtkYXl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzc05hbWU9e2N4KCdtb250aC1jYWxlbmRhcicsIHtcclxuICAgICAgICBpc0FuaW1hdGluZyxcclxuICAgICAgICBoaWRkZW4sXHJcbiAgICAgICAgc2luZ2xlOiBzaW5nbGVDYWxlbmRhcixcclxuICAgICAgfSl9XHJcbiAgICAgIGRhdGEtbW9udGgtaW5kZXg9e21vbnRoICsgMX1cclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb250aC1uYW1lXCI+XHJcbiAgICAgICAge21vbnRoRm9ybWF0XHJcbiAgICAgICAgICA/IGRheWpzKGAke3llYXJ9LSR7bW9udGggKyAxfS0xYCkuZm9ybWF0KG1vbnRoRm9ybWF0KVxyXG4gICAgICAgICAgOiBkYXlqcyhgJHt5ZWFyfS0ke21vbnRoICsgMX0tMWApLmZvcm1hdCgnTU1NTSAtIFlZWVknKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2Vla2RheXNcIj57Z2VuZXJhdGVXZWVrRGF5KCl9PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2Vlay1jb250YWluZXJcIj5cclxuICAgICAgICB7Z2VuZXJhdGVXZWVrKCl9XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0pO1xyXG5cclxuTW9udGhDYWxlbmRhci5wcm9wVHlwZXMgPSB7XHJcbiAgbW9udGg6IFByb3BUeXBlcy5udW1iZXIsXHJcbiAgeWVhcjogUHJvcFR5cGVzLm51bWJlcixcclxuICBvblNlbGVjdERhdGU6IFByb3BUeXBlcy5mdW5jLFxyXG4gIG9uSG92ZXJEYXRlOiBQcm9wVHlwZXMuZnVuYyxcclxuICBmcm9tRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgdG9EYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcclxuICBob3ZlckRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIGhpZGRlbjogUHJvcFR5cGVzLmJvb2wsXHJcbiAgaXNBbmltYXRpbmc6IFByb3BUeXBlcy5ib29sLFxyXG4gIHN0YXJ0V2Vla0RheTogUHJvcFR5cGVzLnN0cmluZyxcclxuICB3ZWVrRGF5Rm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gIG1pbkRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIG1heERhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIG1vbnRoRm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gIGlzU2luZ2xlOiBQcm9wVHlwZXMuYm9vbCxcclxuICBoaWdobGlnaHRUb2RheTogUHJvcFR5cGVzLmJvb2wsXHJcbiAgc2luZ2xlQ2FsZW5kYXI6IFByb3BUeXBlcy5ib29sLFxyXG4gIGhhbmRsZUhvdmVyRGF5OiBQcm9wVHlwZXMuZnVuYyxcclxuICBzdWJUZXh0RGljdDogUHJvcFR5cGVzLm9iamVjdFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBNb250aENhbGVuZGFyO1xyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJmb3J3YXJkUmVmIiwiUHJvcFR5cGVzIiwiY3giLCJkYXlqcyIsIldlZWsiLCJnZXRNb250aEluZm8iLCJnZXRXZWVrRGF5IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIk1vbnRoQ2FsZW5kYXIiLCJfcmVmIiwicmVmIiwiX3JlZiRtb250aCIsIm1vbnRoIiwiX3JlZiR5ZWFyIiwieWVhciIsIl9yZWYkb25TZWxlY3REYXRlIiwib25TZWxlY3REYXRlIiwiX3JlZiRvbkhvdmVyRGF0ZSIsIm9uSG92ZXJEYXRlIiwiX3JlZiRmcm9tRGF0ZSIsImZyb21EYXRlIiwiX3JlZiR0b0RhdGUiLCJ0b0RhdGUiLCJfcmVmJGhvdmVyRGF0ZSIsImhvdmVyRGF0ZSIsIl9yZWYkaGlkZGVuIiwiaGlkZGVuIiwiX3JlZiRpc0FuaW1hdGluZyIsImlzQW5pbWF0aW5nIiwiX3JlZiRzdGFydFdlZWtEYXkiLCJzdGFydFdlZWtEYXkiLCJfcmVmJHdlZWtEYXlGb3JtYXQiLCJ3ZWVrRGF5Rm9ybWF0IiwiX3JlZiRtaW5EYXRlIiwibWluRGF0ZSIsIl9yZWYkbWF4RGF0ZSIsIm1heERhdGUiLCJfcmVmJG1vbnRoRm9ybWF0IiwibW9udGhGb3JtYXQiLCJfcmVmJGlzU2luZ2xlIiwiaXNTaW5nbGUiLCJfcmVmJGhpZ2hsaWdodFRvZGF5IiwiaGlnaGxpZ2h0VG9kYXkiLCJfcmVmJHNpbmdsZUNhbGVuZGFyIiwic2luZ2xlQ2FsZW5kYXIiLCJfcmVmJGhhbmRsZUhvdmVyRGF5IiwiaGFuZGxlSG92ZXJEYXkiLCJfcmVmJHN1YlRleHREaWN0Iiwic3ViVGV4dERpY3QiLCJnZW5lcmF0ZVdlZWsiLCJfZ2V0TW9udGhJbmZvIiwidG90YWxXZWVrIiwidG90YWxEYXkiLCJtYXAiLCJ3ZWVrIiwiaW5kZXgiLCJpc0ZpcnN0Iiwid2Vla0luZGV4IiwiZ2VuZXJhdGVXZWVrRGF5IiwiYXJyV2Vla0RheSIsImRheSIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwic2luZ2xlIiwiY29uY2F0IiwiZm9ybWF0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/lib/components/DatePicker/MonthCalendar.js\n");
|
|
69
|
+
|
|
70
|
+
/***/ }),
|
|
71
|
+
|
|
72
|
+
/***/ "./src/lib/components/DatePicker/Week.js":
|
|
73
|
+
/*!***********************************************!*\
|
|
74
|
+
!*** ./src/lib/components/DatePicker/Week.js ***!
|
|
75
|
+
\***********************************************/
|
|
76
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
77
|
+
|
|
78
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Day__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Day */ \"./src/lib/components/DatePicker/Day.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/* eslint-disable react/display-name */\n\n\n\n\n\n\nvar Week = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (_ref, ref) {\n var isFirst = _ref.isFirst,\n week = _ref.week,\n month = _ref.month,\n year = _ref.year,\n fromDate = _ref.fromDate,\n toDate = _ref.toDate,\n hoverDate = _ref.hoverDate,\n onSelectDate = _ref.onSelectDate,\n onHoverDate = _ref.onHoverDate,\n totalDay = _ref.totalDay,\n minDate = _ref.minDate,\n maxDate = _ref.maxDate,\n isSingle = _ref.isSingle,\n weekIndex = _ref.weekIndex,\n highlightToday = _ref.highlightToday,\n handleHoverDay = _ref.handleHoverDay,\n subTextDict = _ref.subTextDict;\n function generateDay() {\n return _toConsumableArray(Array(week.days).keys()).map(function (index) {\n var _subTextDict$dateValu;\n var dateIndex = index + week.start;\n var dateValue = dayjs__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(year, \"-\").concat(month + 1, \"-\").concat(dateIndex));\n var disabled = minDate && dateValue.isBefore(minDate, \"date\") || maxDate && dateValue.isAfter(maxDate, \"date\");\n var selected = dateValue.isSame(fromDate, \"date\") || dateValue.isSame(toDate, \"date\");\n var hovered = false;\n var highlight = highlightToday && dateValue.isSame(new Date(), \"date\");\n if (fromDate && !fromDate.isSame(toDate, \"date\") && !isSingle) {\n if (toDate && !fromDate.isAfter(dateValue, \"date\") && !toDate.isBefore(dateValue, \"date\")) {\n hovered = true;\n }\n if (!toDate && !dateValue.isBefore(fromDate, \"date\") && !(hoverDate && hoverDate.isBefore(dateValue, \"date\")) && fromDate.isBefore(hoverDate, \"date\")) {\n hovered = true;\n }\n }\n var isEndDate = false;\n if (dateValue.isSame(toDate, \"date\") || !toDate && dateValue.isSame(hoverDate, \"date\")) {\n isEndDate = true;\n }\n var subText = subTextDict === null ? \"\" : (_subTextDict$dateValu = subTextDict[dateValue.format(\"YYYY-MM-DD\")]) !== null && _subTextDict$dateValu !== void 0 ? _subTextDict$dateValu : \"\\xA0\";\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_Day__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n dateIndex: dateIndex,\n dateValue: dateValue,\n hoverDate: hoverDate,\n onSelectDate: onSelectDate,\n onHoverDate: onHoverDate,\n selected: selected,\n hovered: hovered,\n highlight: highlight,\n disabled: disabled,\n isEndDay: isEndDate,\n totalDay: totalDay,\n weekDayIndex: index,\n weekIndex: weekIndex,\n handleHoverDay: handleHoverDay,\n subText: subText,\n ref: ref\n }, index);\n });\n }\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"week\", {\n first: isFirst\n }),\n children: generateDay()\n });\n});\nWeek.defaultProps = {\n isFirst: false,\n week: {},\n month: null,\n year: null,\n fromDate: null,\n toDate: null,\n totalDay: null,\n hoverDate: null,\n onSelectDate: function onSelectDate() {},\n onHoverDate: function onHoverDate() {},\n minDate: null,\n maxDate: null,\n isSingle: false,\n weekIndex: 0,\n highlightToday: false,\n handleHoverDay: function handleHoverDay() {},\n subTextDict: null\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Week);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9XZWVrLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQzBDO0FBQ1A7QUFDUDtBQUNGO0FBRUY7QUFBQTtBQUV4QixJQUFNUSxJQUFJLGdCQUFHUCxpREFBVSxDQUNyQixVQUFBUSxJQUFBLEVBb0JFQyxHQUFHLEVBQ0E7RUFBQSxJQW5CREMsT0FBTyxHQUFBRixJQUFBLENBQVBFLE9BQU87SUFDUEMsSUFBSSxHQUFBSCxJQUFBLENBQUpHLElBQUk7SUFDSkMsS0FBSyxHQUFBSixJQUFBLENBQUxJLEtBQUs7SUFDTEMsSUFBSSxHQUFBTCxJQUFBLENBQUpLLElBQUk7SUFDSkMsUUFBUSxHQUFBTixJQUFBLENBQVJNLFFBQVE7SUFDUkMsTUFBTSxHQUFBUCxJQUFBLENBQU5PLE1BQU07SUFDTkMsU0FBUyxHQUFBUixJQUFBLENBQVRRLFNBQVM7SUFDVEMsWUFBWSxHQUFBVCxJQUFBLENBQVpTLFlBQVk7SUFDWkMsV0FBVyxHQUFBVixJQUFBLENBQVhVLFdBQVc7SUFDWEMsUUFBUSxHQUFBWCxJQUFBLENBQVJXLFFBQVE7SUFDUkMsT0FBTyxHQUFBWixJQUFBLENBQVBZLE9BQU87SUFDUEMsT0FBTyxHQUFBYixJQUFBLENBQVBhLE9BQU87SUFDUEMsUUFBUSxHQUFBZCxJQUFBLENBQVJjLFFBQVE7SUFDUkMsU0FBUyxHQUFBZixJQUFBLENBQVRlLFNBQVM7SUFDVEMsY0FBYyxHQUFBaEIsSUFBQSxDQUFkZ0IsY0FBYztJQUNkQyxjQUFjLEdBQUFqQixJQUFBLENBQWRpQixjQUFjO0lBQ2RDLFdBQVcsR0FBQWxCLElBQUEsQ0FBWGtCLFdBQVc7RUFJYixTQUFTQyxXQUFXQSxDQUFBLEVBQUc7SUFDckIsT0FBT0Msa0JBQUEsQ0FBSUMsS0FBSyxDQUFDbEIsSUFBSSxDQUFDbUIsSUFBSSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLEVBQUVDLEdBQUcsQ0FBQyxVQUFDQyxLQUFLLEVB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SSxHQWhCSndCLEtBaUJOLENBQUM7SUFFTixDQUFDLENBQUM7RUFDSjtFQUVBLG9CQUNFM0Isc0RBQUE7SUFBSzhDLFNBQVMsRUFBRWxELGlEQUFFLENBQUMsTUFBTSxFQUFFO01BQUVtRCxLQUFLLEVBQUUzQztJQUFRLENBQUMsQ0FBRTtJQUFBNEMsUUFBQSxFQUFFM0IsV0FBVyxDQUFDO0VBQUMsQ0FBTSxDQUFDO0FBRXpFLENBQ0YsQ0FBQztBQXNCRHBCLElBQUksQ0FBQ2dELFlBQVksR0FBRztFQUNsQjdDLE9BQU8sRUFBRSxLQUFLO0VBQ2RDLElBQUksRUFBRSxDQUFDLENBQUM7RUFDUkMsS0FBSyxFQUFFLElBQUk7RUFDWEMsSUFBSSxFQUFFLElBQUk7RUFDVkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsTUFBTSxFQUFFLElBQUk7RUFDWkksUUFBUSxFQUFFLElBQUk7RUFDZEgsU0FBUyxFQUFFLElBQUk7RUFDZkMsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUEsRUFBUSxDQUFDLENBQUM7RUFDdEJDLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFBLEVBQVEsQ0FBQyxDQUFDO0VBQ3JCRSxPQUFPLEVBQUUsSUFBSTtFQUNiQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxRQUFRLEVBQUUsS0FBSztFQUNmQyxTQUFTLEVBQUUsQ0FBQztFQUNaQyxjQUFjLEVBQUUsS0FBSztFQUNyQkMsY0FBYyxFQUFFLFNBQWhCQSxjQUFjQSxDQUFBLEVBQVEsQ0FBQyxDQUFDO0VBQ3hCQyxXQUFXLEVBQUU7QUFDZixDQUFDO0FBRUQsaUVBQWVuQixJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRlbHNoby9nb29nbGUtZmxpZ2h0LWRhdGVwaWNrZXIvLi9zcmMvbGliL2NvbXBvbmVudHMvRGF0ZVBpY2tlci9XZWVrLmpzPzczOWUiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZGlzcGxheS1uYW1lICovXHJcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcclxuaW1wb3J0IGN4IGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmltcG9ydCBEYXkgZnJvbSBcIi4vRGF5XCI7XHJcblxyXG5jb25zdCBXZWVrID0gZm9yd2FyZFJlZihcclxuICAoXHJcbiAgICB7XHJcbiAgICAgIGlzRmlyc3QsXHJcbiAgICAgIHdlZWssXHJcbiAgICAgIG1vbnRoLFxyXG4gICAgICB5ZWFyLFxyXG4gICAgICBmcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlLFxyXG4gICAgICBob3ZlckRhdGUsXHJcbiAgICAgIG9uU2VsZWN0RGF0ZSxcclxuICAgICAgb25Ib3ZlckRhdGUsXHJcbiAgICAgIHRvdGFsRGF5LFxyXG4gICAgICBtaW5EYXRlLFxyXG4gICAgICBtYXhEYXRlLFxyXG4gICAgICBpc1NpbmdsZSxcclxuICAgICAgd2Vla0luZGV4LFxyXG4gICAgICBoaWdobGlnaHRUb2RheSxcclxuICAgICAgaGFuZGxlSG92ZXJEYXksXHJcbiAgICAgIHN1YlRleHREaWN0LFxyXG4gICAgfSxcclxuICAgIHJlZlxyXG4gICkgPT4ge1xyXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVEYXkoKSB7XHJcbiAgICAgIHJldHVybiBbLi4uQXJyYXkod2Vlay5kYXlzKS5rZXlzKCldLm1hcCgoaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRlSW5kZXggPSBpbmRleCArIHdlZWsuc3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gZGF5anMoYCR7eWVhcn0tJHttb250aCArIDF9LSR7ZGF0ZUluZGV4fWApO1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkID1cclxuICAgICAgICAgIChtaW5EYXRlICYmIGRhdGVWYWx1ZS5pc0JlZm9yZShtaW5EYXRlLCBcImRhdGVcIikpIHx8XHJcbiAgICAgICAgICAobWF4RGF0ZSAmJiBkYXRlVmFsdWUuaXNBZnRlcihtYXhEYXRlLCBcImRhdGVcIikpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID1cclxuICAgICAgICAgIGRhdGVWYWx1ZS5pc1NhbWUoZnJvbURhdGUsIFwiZGF0ZVwiKSB8fFxyXG4gICAgICAgICAgZGF0ZVZhbHVlLmlzU2FtZSh0b0RhdGUsIFwiZGF0ZVwiKTtcclxuICAgICAgICBsZXQgaG92ZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9XHJcbiAgICAgICAgICBoaWdobGlnaHRUb2RheSAmJiBkYXRlVmFsdWUuaXNTYW1lKG5ldyBEYXRlKCksIFwiZGF0ZVwiKTtcclxuXHJcbiAgICAgICAgaWYgKGZyb21EYXRlICYmICFmcm9tRGF0ZS5pc1NhbWUodG9EYXRlLCBcImRhdGVcIikgJiYgIWlzU2luZ2xlKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRvRGF0ZSAmJlxyXG4gICAgICAgICAgICAhZnJvbURhdGUuaXNBZnRlcihkYXRlVmFsdWUsIFwiZGF0ZVwiKSAmJlxyXG4gICAgICAgICAgICAhdG9EYXRlLmlzQmVmb3JlKGRhdGVWYWx1ZSwgXCJkYXRlXCIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0b0RhdGUgJiZcclxuICAgICAgICAgICAgIWRhdGVWYWx1ZS5pc0JlZm9yZShmcm9tRGF0ZSwgXCJkYXRlXCIpICYmXHJcbiAgICAgICAgICAgICEoaG92ZXJEYXRlICYmIGhvdmVyRGF0ZS5pc0JlZm9yZShkYXRlVmFsdWUsIFwiZGF0ZVwiKSkgJiZcclxuICAgICAgICAgICAgZnJvbURhdGUuaXNCZWZvcmUoaG92ZXJEYXRlLCBcImRhdGVcIilcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBob3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpc0VuZERhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBkYXRlVmFsdWUuaXNTYW1lKHRvRGF0ZSwgXCJkYXRlXCIpIHx8XHJcbiAgICAgICAgICAoIXRvRGF0ZSAmJiBkYXRlVmFsdWUuaXNTYW1lKGhvdmVyRGF0ZSwgXCJkYXRlXCIpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaXNFbmREYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YlRleHQgPVxyXG4gICAgICAgICAgc3ViVGV4dERpY3QgPT09IG51bGxcclxuICAgICAgICAgICAgPyBcIlwiXHJcbiAgICAgICAgICAgIDogc3ViVGV4dERpY3RbZGF0ZVZhbHVlLmZvcm1hdChcIllZWVktTU0tRERcIildID8/IFwiXFx1MDBBMFwiO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPERheVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBkYXRlSW5kZXg9e2RhdGVJbmRleH1cclxuICAgICAgICAgICAgZGF0ZVZhbHVlPXtkYXRlVmFsdWV9XHJcbiAgICAgICAgICAgIGhvdmVyRGF0ZT17aG92ZXJEYXRlfVxyXG4gICAgICAgICAgICBvblNlbGVjdERhdGU9e29uU2VsZWN0RGF0ZX1cclxuICAgICAgICAgICAgb25Ib3ZlckRhdGU9e29uSG92ZXJEYXRlfVxyXG4gICAgICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWR9XHJcbiAgICAgICAgICAgIGhvdmVyZWQ9e2hvdmVyZWR9XHJcbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxyXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgICAgIGlzRW5kRGF5PXtpc0VuZERhdGV9XHJcbiAgICAgICAgICAgIHRvdGFsRGF5PXt0b3RhbERheX1cclxuICAgICAgICAgICAgd2Vla0RheUluZGV4PXtpbmRleH1cclxuICAgICAgICAgICAgd2Vla0luZGV4PXt3ZWVrSW5kZXh9XHJcbiAgICAgICAgICAgIGhhbmRsZUhvdmVyRGF5PXtoYW5kbGVIb3ZlckRheX1cclxuICAgICAgICAgICAgc3ViVGV4dD17c3ViVGV4dH1cclxuICAgICAgICAgICAgcmVmPXtyZWZ9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjeChcIndlZWtcIiwgeyBmaXJzdDogaXNGaXJzdCB9KX0+e2dlbmVyYXRlRGF5KCl9PC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuKTtcclxuXHJcbldlZWsucHJvcFR5cGVzID0ge1xyXG4gIGlzRmlyc3Q6IFByb3BUeXBlcy5ib29sLFxyXG4gIHdlZWs6IFByb3BUeXBlcy5vYmplY3QsXHJcbiAgbW9udGg6IFByb3BUeXBlcy5udW1iZXIsXHJcbiAgeWVhcjogUHJvcFR5cGVzLm51bWJlcixcclxuICBmcm9tRGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXHJcbiAgdG9EYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcclxuICBob3ZlckRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIHRvdGFsRGF5OiBQcm9wVHlwZXMubnVtYmVyLFxyXG4gIG9uU2VsZWN0RGF0ZTogUHJvcFR5cGVzLmZ1bmMsXHJcbiAgb25Ib3ZlckRhdGU6IFByb3BUeXBlcy5mdW5jLFxyXG4gIG1pbkRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIG1heERhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxyXG4gIGlzU2luZ2xlOiBQcm9wVHlwZXMuYm9vbCxcclxuICB3ZWVrSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXHJcbiAgaGlnaGxpZ2h0VG9kYXk6IFByb3BUeXBlcy5ib29sLFxyXG4gIGhhbmRsZUhvdmVyRGF5OiBQcm9wVHlwZXMuZnVuYyxcclxuICBzdWJUZXh0RGljdDogUHJvcFR5cGVzLm9iamVjdCxcclxufTtcclxuXHJcbldlZWsuZGVmYXVsdFByb3BzID0ge1xyXG4gIGlzRmlyc3Q6IGZhbHNlLFxyXG4gIHdlZWs6IHt9LFxyXG4gIG1vbnRoOiBudWxsLFxyXG4gIHllYXI6IG51bGwsXHJcbiAgZnJvbURhdGU6IG51bGwsXHJcbiAgdG9EYXRlOiBudWxsLFxyXG4gIHRvdGFsRGF5OiBudWxsLFxyXG4gIGhvdmVyRGF0ZTogbnVsbCxcclxuICBvblNlbGVjdERhdGU6ICgpID0+IHt9LFxyXG4gIG9uSG92ZXJEYXRlOiAoKSA9PiB7fSxcclxuICBtaW5EYXRlOiBudWxsLFxyXG4gIG1heERhdGU6IG51bGwsXHJcbiAgaXNTaW5nbGU6IGZhbHNlLFxyXG4gIHdlZWtJbmRleDogMCxcclxuICBoaWdobGlnaHRUb2RheTogZmFsc2UsXHJcbiAgaGFuZGxlSG92ZXJEYXk6ICgpID0+IHt9LFxyXG4gIHN1YlRleHREaWN0OiBudWxsLFxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgV2VlaztcclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiZm9yd2FyZFJlZiIsIlByb3BUeXBlcyIsImN4IiwiZGF5anMiLCJEYXkiLCJqc3giLCJfanN4IiwiV2VlayIsIl9yZWYiLCJyZWYiLCJpc0ZpcnN0Iiwid2VlayIsIm1vbnRoIiwieWVhciIsImZyb21EYXRlIiwidG9EYXRlIiwiaG92ZXJEYXRlIiwib25TZWxlY3REYXRlIiwib25Ib3ZlckRhdGUiLCJ0b3RhbERheSIsIm1pbkRhdGUiLCJtYXhEYXRlIiwiaXNTaW5nbGUiLCJ3ZWVrSW5kZXgiLCJoaWdobGlnaHRUb2RheSIsImhhbmRsZUhvdmVyRGF5Iiwic3ViVGV4dERpY3QiLCJnZW5lcmF0ZURheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIkFycmF5IiwiZGF5cyIsImtleXMiLCJtYXAiLCJpbmRleCIsIl9zdWJUZXh0RGljdCRkYXRlVmFsdSIsImRhdGVJbmRleCIsInN0YXJ0IiwiZGF0ZVZhbHVlIiwiY29uY2F0IiwiZGlzYWJsZWQiLCJpc0JlZm9yZSIsImlzQWZ0ZXIiLCJzZWxlY3RlZCIsImlzU2FtZSIsImhvdmVyZWQiLCJoaWdobGlnaHQiLCJEYXRlIiwiaXNFbmREYXRlIiwic3ViVGV4dCIsImZvcm1hdCIsImlzRW5kRGF5Iiwid2Vla0RheUluZGV4IiwiY2xhc3NOYW1lIiwiZmlyc3QiLCJjaGlsZHJlbiIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/lib/components/DatePicker/Week.js\n");
|
|
79
|
+
|
|
80
|
+
/***/ }),
|
|
81
|
+
|
|
82
|
+
/***/ "./node_modules/memoize-one/dist/memoize-one.esm.js":
|
|
83
|
+
/*!**********************************************************!*\
|
|
84
|
+
!*** ./node_modules/memoize-one/dist/memoize-one.esm.js ***!
|
|
85
|
+
\**********************************************************/
|
|
86
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
87
|
+
|
|
88
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoizeOne);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsdUJBQXVCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0ZWxzaG8vZ29vZ2xlLWZsaWdodC1kYXRlcGlja2VyLy4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzPzViMGEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/memoize-one/dist/memoize-one.esm.js\n");
|
|
89
|
+
|
|
90
|
+
/***/ }),
|
|
91
|
+
|
|
92
|
+
/***/ "./node_modules/react-virtualized-auto-sizer/dist/react-virtualized-auto-sizer.esm.js":
|
|
93
|
+
/*!********************************************************************************************!*\
|
|
94
|
+
!*** ./node_modules/react-virtualized-auto-sizer/dist/react-virtualized-auto-sizer.esm.js ***!
|
|
95
|
+
\********************************************************************************************/
|
|
96
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
97
|
+
|
|
98
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AutoSizer),\n/* harmony export */ isHeightAndWidthProps: () => (/* binding */ isHeightAndWidthProps),\n/* harmony export */ isHeightOnlyProps: () => (/* binding */ isHeightOnlyProps),\n/* harmony export */ isWidthOnlyProps: () => (/* binding */ isWidthOnlyProps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\n/**\n * Detect Element Resize.\n * https://github.com/sdecima/javascript-detect-element-resize\n * Sebastian Decima\n *\n * Forked from version 0.5.3; includes the following modifications:\n * 1) Guard against unsafe 'window' and 'document' references (to support SSR).\n * 2) Defer initialization code via a top-level function wrapper (to support SSR).\n * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.\n * 4) Add nonce for style element.\n * 5) Use 'export' statement over 'module.exports' assignment\n **/\n\n// Check `document` and `window` in case of server-side rendering\nlet windowObject;\nif (typeof window !== \"undefined\") {\n windowObject = window;\n\n // eslint-disable-next-line no-restricted-globals\n} else if (typeof self !== \"undefined\") {\n // eslint-disable-next-line no-restricted-globals\n windowObject = self;\n} else {\n windowObject = __webpack_require__.g;\n}\nlet cancelFrame = null;\nlet requestFrame = null;\nconst TIMEOUT_DURATION = 20;\nconst clearTimeoutFn = windowObject.clearTimeout;\nconst setTimeoutFn = windowObject.setTimeout;\nconst cancelAnimationFrameFn = windowObject.cancelAnimationFrame || windowObject.mozCancelAnimationFrame || windowObject.webkitCancelAnimationFrame;\nconst requestAnimationFrameFn = windowObject.requestAnimationFrame || windowObject.mozRequestAnimationFrame || windowObject.webkitRequestAnimationFrame;\nif (cancelAnimationFrameFn == null || requestAnimationFrameFn == null) {\n // For environments that don't support animation frame,\n // fallback to a setTimeout based approach.\n cancelFrame = clearTimeoutFn;\n requestFrame = function requestAnimationFrameViaSetTimeout(callback) {\n return setTimeoutFn(callback, TIMEOUT_DURATION);\n };\n} else {\n // Counter intuitively, environments that support animation frames can be trickier.\n // Chrome's \"Throttle non-visible cross-origin iframes\" flag can prevent rAFs from being called.\n // In this case, we should fallback to a setTimeout() implementation.\n cancelFrame = function cancelFrame([animationFrameID, timeoutID]) {\n cancelAnimationFrameFn(animationFrameID);\n clearTimeoutFn(timeoutID);\n };\n requestFrame = function requestAnimationFrameWithSetTimeoutFallback(callback) {\n const animationFrameID = requestAnimationFrameFn(function animationFrameCallback() {\n clearTimeoutFn(timeoutID);\n callback();\n });\n const timeoutID = setTimeoutFn(function timeoutCallback() {\n cancelAnimationFrameFn(animationFrameID);\n callback();\n }, TIMEOUT_DURATION);\n return [animationFrameID, timeoutID];\n };\n}\nfunction createDetectElementResize(nonce) {\n let animationKeyframes;\n let animationName;\n let animationStartEvent;\n let animationStyle;\n let checkTriggers;\n let resetTriggers;\n let scrollListener;\n const attachEvent = typeof document !== \"undefined\" && document.attachEvent;\n if (!attachEvent) {\n resetTriggers = function (element) {\n const triggers = element.__resizeTriggers__,\n expand = triggers.firstElementChild,\n contract = triggers.lastElementChild,\n expandChild = expand.firstElementChild;\n contract.scrollLeft = contract.scrollWidth;\n contract.scrollTop = contract.scrollHeight;\n expandChild.style.width = expand.offsetWidth + 1 + \"px\";\n expandChild.style.height = expand.offsetHeight + 1 + \"px\";\n expand.scrollLeft = expand.scrollWidth;\n expand.scrollTop = expand.scrollHeight;\n };\n checkTriggers = function (element) {\n return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;\n };\n scrollListener = function (e) {\n // Don't measure (which forces) reflow for scrolls that happen inside of children!\n if (e.target.className && typeof e.target.className.indexOf === \"function\" && e.target.className.indexOf(\"contract-trigger\") < 0 && e.target.className.indexOf(\"expand-trigger\") < 0) {\n return;\n }\n const element = this;\n resetTriggers(this);\n if (this.__resizeRAF__) {\n cancelFrame(this.__resizeRAF__);\n }\n this.__resizeRAF__ = requestFrame(function animationFrame() {\n if (checkTriggers(element)) {\n element.__resizeLast__.width = element.offsetWidth;\n element.__resizeLast__.height = element.offsetHeight;\n element.__resizeListeners__.forEach(function forEachResizeListener(fn) {\n fn.call(element, e);\n });\n }\n });\n };\n\n /* Detect CSS Animations support to detect element display/re-attach */\n let animation = false;\n let keyframeprefix = \"\";\n animationStartEvent = \"animationstart\";\n const domPrefixes = \"Webkit Moz O ms\".split(\" \");\n let startEvents = \"webkitAnimationStart animationstart oAnimationStart MSAnimationStart\".split(\" \");\n let pfx = \"\";\n {\n const elm = document.createElement(\"fakeelement\");\n if (elm.style.animationName !== undefined) {\n animation = true;\n }\n if (animation === false) {\n for (let i = 0; i < domPrefixes.length; i++) {\n if (elm.style[domPrefixes[i] + \"AnimationName\"] !== undefined) {\n pfx = domPrefixes[i];\n keyframeprefix = \"-\" + pfx.toLowerCase() + \"-\";\n animationStartEvent = startEvents[i];\n animation = true;\n break;\n }\n }\n }\n }\n animationName = \"resizeanim\";\n animationKeyframes = \"@\" + keyframeprefix + \"keyframes \" + animationName + \" { from { opacity: 0; } to { opacity: 0; } } \";\n animationStyle = keyframeprefix + \"animation: 1ms \" + animationName + \"; \";\n }\n const createStyles = function (doc) {\n if (!doc.getElementById(\"detectElementResize\")) {\n //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n const css = (animationKeyframes ? animationKeyframes : \"\") + \".resize-triggers { \" + (animationStyle ? animationStyle : \"\") + \"visibility: hidden; opacity: 0; } \" + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n head = doc.head || doc.getElementsByTagName(\"head\")[0],\n style = doc.createElement(\"style\");\n style.id = \"detectElementResize\";\n style.type = \"text/css\";\n if (nonce != null) {\n style.setAttribute(\"nonce\", nonce);\n }\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(doc.createTextNode(css));\n }\n head.appendChild(style);\n }\n };\n const addResizeListener = function (element, fn) {\n if (attachEvent) {\n element.attachEvent(\"onresize\", fn);\n } else {\n if (!element.__resizeTriggers__) {\n const doc = element.ownerDocument;\n const elementStyle = windowObject.getComputedStyle(element);\n if (elementStyle && elementStyle.position === \"static\") {\n element.style.position = \"relative\";\n }\n createStyles(doc);\n element.__resizeLast__ = {};\n element.__resizeListeners__ = [];\n (element.__resizeTriggers__ = doc.createElement(\"div\")).className = \"resize-triggers\";\n const expandTrigger = doc.createElement(\"div\");\n expandTrigger.className = \"expand-trigger\";\n expandTrigger.appendChild(doc.createElement(\"div\"));\n const contractTrigger = doc.createElement(\"div\");\n contractTrigger.className = \"contract-trigger\";\n element.__resizeTriggers__.appendChild(expandTrigger);\n element.__resizeTriggers__.appendChild(contractTrigger);\n element.appendChild(element.__resizeTriggers__);\n resetTriggers(element);\n element.addEventListener(\"scroll\", scrollListener, true);\n\n /* Listen for a css animation to detect element display/re-attach */\n if (animationStartEvent) {\n element.__resizeTriggers__.__animationListener__ = function animationListener(e) {\n if (e.animationName === animationName) {\n resetTriggers(element);\n }\n };\n element.__resizeTriggers__.addEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);\n }\n }\n element.__resizeListeners__.push(fn);\n }\n };\n const removeResizeListener = function (element, fn) {\n if (attachEvent) {\n element.detachEvent(\"onresize\", fn);\n } else {\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n if (!element.__resizeListeners__.length) {\n element.removeEventListener(\"scroll\", scrollListener, true);\n if (element.__resizeTriggers__.__animationListener__) {\n element.__resizeTriggers__.removeEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);\n element.__resizeTriggers__.__animationListener__ = null;\n }\n try {\n element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n } catch (e) {\n // Preact compat; see developit/preact-compat/issues/228\n }\n }\n }\n };\n return {\n addResizeListener,\n removeResizeListener\n };\n}\n\nclass AutoSizer extends react__WEBPACK_IMPORTED_MODULE_0__.Component {\n constructor(...args) {\n super(...args);\n this.state = {\n height: this.props.defaultHeight || 0,\n scaledHeight: this.props.defaultHeight || 0,\n scaledWidth: this.props.defaultWidth || 0,\n width: this.props.defaultWidth || 0\n };\n this._autoSizer = null;\n this._detectElementResize = null;\n this._parentNode = null;\n this._resizeObserver = null;\n this._timeoutId = null;\n this._onResize = () => {\n this._timeoutId = null;\n const {\n disableHeight,\n disableWidth,\n onResize\n } = this.props;\n if (this._parentNode) {\n // Guard against AutoSizer component being removed from the DOM immediately after being added.\n // This can result in invalid style values which can result in NaN values if we don't handle them.\n // See issue #150 for more context.\n\n const style = window.getComputedStyle(this._parentNode) || {};\n const paddingLeft = parseFloat(style.paddingLeft || \"0\");\n const paddingRight = parseFloat(style.paddingRight || \"0\");\n const paddingTop = parseFloat(style.paddingTop || \"0\");\n const paddingBottom = parseFloat(style.paddingBottom || \"0\");\n const rect = this._parentNode.getBoundingClientRect();\n const scaledHeight = rect.height - paddingTop - paddingBottom;\n const scaledWidth = rect.width - paddingLeft - paddingRight;\n const height = this._parentNode.offsetHeight - paddingTop - paddingBottom;\n const width = this._parentNode.offsetWidth - paddingLeft - paddingRight;\n if (!disableHeight && (this.state.height !== height || this.state.scaledHeight !== scaledHeight) || !disableWidth && (this.state.width !== width || this.state.scaledWidth !== scaledWidth)) {\n this.setState({\n height,\n width,\n scaledHeight,\n scaledWidth\n });\n if (typeof onResize === \"function\") {\n onResize({\n height,\n scaledHeight,\n scaledWidth,\n width\n });\n }\n }\n }\n };\n this._setRef = autoSizer => {\n this._autoSizer = autoSizer;\n };\n }\n componentDidMount() {\n const {\n nonce\n } = this.props;\n const parentNode = this._autoSizer ? this._autoSizer.parentNode : null;\n if (parentNode != null && parentNode.ownerDocument && parentNode.ownerDocument.defaultView && parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement) {\n // Delay access of parentNode until mount.\n // This handles edge-cases where the component has already been unmounted before its ref has been set,\n // As well as libraries like react-lite which have a slightly different lifecycle.\n this._parentNode = parentNode;\n\n // Use ResizeObserver from the same context where parentNode (which we will observe) was defined\n // Using just global can result into onResize events not being emitted in cases with multiple realms\n const ResizeObserverInstance = parentNode.ownerDocument.defaultView.ResizeObserver;\n if (ResizeObserverInstance != null) {\n this._resizeObserver = new ResizeObserverInstance(() => {\n // Guard against \"ResizeObserver loop limit exceeded\" error;\n // could be triggered if the state update causes the ResizeObserver handler to run long.\n // See https://github.com/bvaughn/react-virtualized-auto-sizer/issues/55\n this._timeoutId = setTimeout(this._onResize, 0);\n });\n this._resizeObserver.observe(parentNode);\n } else {\n // Defer requiring resize handler in order to support server-side rendering.\n // See issue #41\n this._detectElementResize = createDetectElementResize(nonce);\n this._detectElementResize.addResizeListener(parentNode, this._onResize);\n }\n this._onResize();\n }\n }\n componentWillUnmount() {\n if (this._parentNode) {\n if (this._detectElementResize) {\n this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);\n }\n if (this._timeoutId !== null) {\n clearTimeout(this._timeoutId);\n }\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n }\n }\n render() {\n const {\n children,\n defaultHeight,\n defaultWidth,\n disableHeight = false,\n disableWidth = false,\n doNotBailOutOnEmptyChildren = false,\n nonce,\n onResize,\n style = {},\n tagName = \"div\",\n ...rest\n } = this.props;\n const {\n height,\n scaledHeight,\n scaledWidth,\n width\n } = this.state;\n\n // Outer div should not force width/height since that may prevent containers from shrinking.\n // Inner component should overflow and use calculated width/height.\n // See issue #68 for more information.\n const outerStyle = {\n overflow: \"visible\"\n };\n const childParams = {};\n\n // Avoid rendering children before the initial measurements have been collected.\n // At best this would just be wasting cycles.\n let bailoutOnChildren = false;\n if (!disableHeight) {\n if (height === 0) {\n bailoutOnChildren = true;\n }\n outerStyle.height = 0;\n childParams.height = height;\n childParams.scaledHeight = scaledHeight;\n }\n if (!disableWidth) {\n if (width === 0) {\n bailoutOnChildren = true;\n }\n outerStyle.width = 0;\n childParams.width = width;\n childParams.scaledWidth = scaledWidth;\n }\n if (doNotBailOutOnEmptyChildren) {\n bailoutOnChildren = false;\n }\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(tagName, {\n ref: this._setRef,\n style: {\n ...outerStyle,\n ...style\n },\n ...rest\n }, !bailoutOnChildren && children(childParams));\n }\n}\n\nfunction isHeightAndWidthProps(props) {\n return props && props.disableHeight !== true && props.disableWidth !== true;\n}\nfunction isHeightOnlyProps(props) {\n return props && props.disableHeight !== true && props.disableWidth === true;\n}\nfunction isWidthOnlyProps(props) {\n return props && props.disableHeight === true && props.disableWidth !== true;\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9kaXN0L3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIuZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFpRDs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRixpQkFBaUIscUJBQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRkFBbUYsT0FBTyxjQUFjLEtBQUssZ0JBQWdCO0FBQzdILDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RixrRUFBa0UsY0FBYywwRUFBMEUsY0FBYyxnQkFBZ0Isb0JBQW9CLFFBQVEsU0FBUyxjQUFjLGFBQWEsa0JBQWtCLGVBQWUseUJBQXlCLGtCQUFrQixrQkFBa0IsMkJBQTJCLGFBQWEsZUFBZTtBQUNwZTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDViw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qiw0Q0FBUztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG9EQUFhO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU0RiIsInNvdXJjZXMiOlsid2VicGFjazovL0B0ZWxzaG8vZ29vZ2xlLWZsaWdodC1kYXRlcGlja2VyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIvZGlzdC9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyLmVzbS5qcz9hZTVlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBEZXRlY3QgRWxlbWVudCBSZXNpemUuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc2RlY2ltYS9qYXZhc2NyaXB0LWRldGVjdC1lbGVtZW50LXJlc2l6ZVxuICogU2ViYXN0aWFuIERlY2ltYVxuICpcbiAqIEZvcmtlZCBmcm9tIHZlcnNpb24gMC41LjM7IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczpcbiAqIDEpIEd1YXJkIGFnYWluc3QgdW5zYWZlICd3aW5kb3cnIGFuZCAnZG9jdW1lbnQnIHJlZmVyZW5jZXMgKHRvIHN1cHBvcnQgU1NSKS5cbiAqIDIpIERlZmVyIGluaXRpYWxpemF0aW9uIGNvZGUgdmlhIGEgdG9wLWxldmVsIGZ1bmN0aW9uIHdyYXBwZXIgKHRvIHN1cHBvcnQgU1NSKS5cbiAqIDMpIEF2b2lkIHVubmVjZXNzYXJ5IHJlZmxvd3MgYnkgbm90IG1lYXN1cmluZyBzaXplIGZvciBzY3JvbGwgZXZlbnRzIGJ1YmJsaW5nIGZyb20gY2hpbGRyZW4uXG4gKiA0KSBBZGQgbm9uY2UgZm9yIHN0eWxlIGVsZW1lbnQuXG4gKiA1KSBVc2UgJ2V4cG9ydCcgc3RhdGVtZW50IG92ZXIgJ21vZHVsZS5leHBvcnRzJyBhc3NpZ25tZW50XG4gKiovXG5cbi8vIENoZWNrIGBkb2N1bWVudGAgYW5kIGB3aW5kb3dgIGluIGNhc2Ugb2Ygc2VydmVyLXNpZGUgcmVuZGVyaW5nXG5sZXQgd2luZG93T2JqZWN0O1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgd2luZG93T2JqZWN0ID0gd2luZG93O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICB3aW5kb3dPYmplY3QgPSBzZWxmO1xufSBlbHNlIHtcbiAgd2luZG93T2JqZWN0ID0gZ2xvYmFsO1xufVxubGV0IGNhbmNlbEZyYW1lID0gbnVsbDtcbmxldCByZXF1ZXN0RnJhbWUgPSBudWxsO1xuY29uc3QgVElNRU9VVF9EVVJBVElPTiA9IDIwO1xuY29uc3QgY2xlYXJUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3QuY2xlYXJUaW1lb3V0O1xuY29uc3Qgc2V0VGltZW91dEZuID0gd2luZG93T2JqZWN0LnNldFRpbWVvdXQ7XG5jb25zdCBjYW5jZWxBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC5tb3pDYW5jZWxBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3Qud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5jb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbiA9IHdpbmRvd09iamVjdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3Qud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuaWYgKGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPT0gbnVsbCB8fCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsKSB7XG4gIC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBzdXBwb3J0IGFuaW1hdGlvbiBmcmFtZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBzZXRUaW1lb3V0IGJhc2VkIGFwcHJvYWNoLlxuICBjYW5jZWxGcmFtZSA9IGNsZWFyVGltZW91dEZuO1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVWaWFTZXRUaW1lb3V0KGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXRGbihjYWxsYmFjaywgVElNRU9VVF9EVVJBVElPTik7XG4gIH07XG59IGVsc2Uge1xuICAvLyBDb3VudGVyIGludHVpdGl2ZWx5LCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IGFuaW1hdGlvbiBmcmFtZXMgY2FuIGJlIHRyaWNraWVyLlxuICAvLyBDaHJvbWUncyBcIlRocm90dGxlIG5vbi12aXNpYmxlIGNyb3NzLW9yaWdpbiBpZnJhbWVzXCIgZmxhZyBjYW4gcHJldmVudCByQUZzIGZyb20gYmVpbmcgY2FsbGVkLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQoKSBpbXBsZW1lbnRhdGlvbi5cbiAgY2FuY2VsRnJhbWUgPSBmdW5jdGlvbiBjYW5jZWxGcmFtZShbYW5pbWF0aW9uRnJhbWVJRCwgdGltZW91dElEXSkge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4oYW5pbWF0aW9uRnJhbWVJRCk7XG4gICAgY2xlYXJUaW1lb3V0Rm4odGltZW91dElEKTtcbiAgfTtcbiAgcmVxdWVzdEZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lV2l0aFNldFRpbWVvdXRGYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGNvbnN0IGFuaW1hdGlvbkZyYW1lSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbihmdW5jdGlvbiBhbmltYXRpb25GcmFtZUNhbGxiYWNrKCkge1xuICAgICAgY2xlYXJUaW1lb3V0Rm4odGltZW91dElEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dElEID0gc2V0VGltZW91dEZuKGZ1bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4oYW5pbWF0aW9uRnJhbWVJRCk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0sIFRJTUVPVVRfRFVSQVRJT04pO1xuICAgIHJldHVybiBbYW5pbWF0aW9uRnJhbWVJRCwgdGltZW91dElEXTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpIHtcbiAgbGV0IGFuaW1hdGlvbktleWZyYW1lcztcbiAgbGV0IGFuaW1hdGlvbk5hbWU7XG4gIGxldCBhbmltYXRpb25TdGFydEV2ZW50O1xuICBsZXQgYW5pbWF0aW9uU3R5bGU7XG4gIGxldCBjaGVja1RyaWdnZXJzO1xuICBsZXQgcmVzZXRUcmlnZ2VycztcbiAgbGV0IHNjcm9sbExpc3RlbmVyO1xuICBjb25zdCBhdHRhY2hFdmVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hdHRhY2hFdmVudDtcbiAgaWYgKCFhdHRhY2hFdmVudCkge1xuICAgIHJlc2V0VHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgdHJpZ2dlcnMgPSBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyxcbiAgICAgICAgZXhwYW5kID0gdHJpZ2dlcnMuZmlyc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgIGNvbnRyYWN0ID0gdHJpZ2dlcnMubGFzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgZXhwYW5kQ2hpbGQgPSBleHBhbmQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICBjb250cmFjdC5zY3JvbGxMZWZ0ID0gY29udHJhY3Quc2Nyb2xsV2lkdGg7XG4gICAgICBjb250cmFjdC5zY3JvbGxUb3AgPSBjb250cmFjdC5zY3JvbGxIZWlnaHQ7XG4gICAgICBleHBhbmRDaGlsZC5zdHlsZS53aWR0aCA9IGV4cGFuZC5vZmZzZXRXaWR0aCArIDEgKyBcInB4XCI7XG4gICAgICBleHBhbmRDaGlsZC5zdHlsZS5oZWlnaHQgPSBleHBhbmQub2Zmc2V0SGVpZ2h0ICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZC5zY3JvbGxMZWZ0ID0gZXhwYW5kLnNjcm9sbFdpZHRoO1xuICAgICAgZXhwYW5kLnNjcm9sbFRvcCA9IGV4cGFuZC5zY3JvbGxIZWlnaHQ7XG4gICAgfTtcbiAgICBjaGVja1RyaWdnZXJzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoIHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodDtcbiAgICB9O1xuICAgIHNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIERvbid0IG1lYXN1cmUgKHdoaWNoIGZvcmNlcykgcmVmbG93IGZvciBzY3JvbGxzIHRoYXQgaGFwcGVuIGluc2lkZSBvZiBjaGlsZHJlbiFcbiAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgJiYgdHlwZW9mIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mID09PSBcImZ1bmN0aW9uXCIgJiYgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJjb250cmFjdC10cmlnZ2VyXCIpIDwgMCAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImV4cGFuZC10cmlnZ2VyXCIpIDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcztcbiAgICAgIHJlc2V0VHJpZ2dlcnModGhpcyk7XG4gICAgICBpZiAodGhpcy5fX3Jlc2l6ZVJBRl9fKSB7XG4gICAgICAgIGNhbmNlbEZyYW1lKHRoaXMuX19yZXNpemVSQUZfXyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9fcmVzaXplUkFGX18gPSByZXF1ZXN0RnJhbWUoZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWUoKSB7XG4gICAgICAgIGlmIChjaGVja1RyaWdnZXJzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy53aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy5oZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoUmVzaXplTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIGZuLmNhbGwoZWxlbWVudCwgZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKiBEZXRlY3QgQ1NTIEFuaW1hdGlvbnMgc3VwcG9ydCB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgIGxldCBhbmltYXRpb24gPSBmYWxzZTtcbiAgICBsZXQga2V5ZnJhbWVwcmVmaXggPSBcIlwiO1xuICAgIGFuaW1hdGlvblN0YXJ0RXZlbnQgPSBcImFuaW1hdGlvbnN0YXJ0XCI7XG4gICAgY29uc3QgZG9tUHJlZml4ZXMgPSBcIldlYmtpdCBNb3ogTyBtc1wiLnNwbGl0KFwiIFwiKTtcbiAgICBsZXQgc3RhcnRFdmVudHMgPSBcIndlYmtpdEFuaW1hdGlvblN0YXJ0IGFuaW1hdGlvbnN0YXJ0IG9BbmltYXRpb25TdGFydCBNU0FuaW1hdGlvblN0YXJ0XCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBwZnggPSBcIlwiO1xuICAgIHtcbiAgICAgIGNvbnN0IGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmYWtlZWxlbWVudFwiKTtcbiAgICAgIGlmIChlbG0uc3R5bGUuYW5pbWF0aW9uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFuaW1hdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoYW5pbWF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbVByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGVsbS5zdHlsZVtkb21QcmVmaXhlc1tpXSArIFwiQW5pbWF0aW9uTmFtZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwZnggPSBkb21QcmVmaXhlc1tpXTtcbiAgICAgICAgICAgIGtleWZyYW1lcHJlZml4ID0gXCItXCIgKyBwZngudG9Mb3dlckNhc2UoKSArIFwiLVwiO1xuICAgICAgICAgICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IHN0YXJ0RXZlbnRzW2ldO1xuICAgICAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhbmltYXRpb25OYW1lID0gXCJyZXNpemVhbmltXCI7XG4gICAgYW5pbWF0aW9uS2V5ZnJhbWVzID0gXCJAXCIgKyBrZXlmcmFtZXByZWZpeCArIFwia2V5ZnJhbWVzIFwiICsgYW5pbWF0aW9uTmFtZSArIFwiIHsgZnJvbSB7IG9wYWNpdHk6IDA7IH0gdG8geyBvcGFjaXR5OiAwOyB9IH0gXCI7XG4gICAgYW5pbWF0aW9uU3R5bGUgPSBrZXlmcmFtZXByZWZpeCArIFwiYW5pbWF0aW9uOiAxbXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCI7IFwiO1xuICB9XG4gIGNvbnN0IGNyZWF0ZVN0eWxlcyA9IGZ1bmN0aW9uIChkb2MpIHtcbiAgICBpZiAoIWRvYy5nZXRFbGVtZW50QnlJZChcImRldGVjdEVsZW1lbnRSZXNpemVcIikpIHtcbiAgICAgIC8vb3BhY2l0eTowIHdvcmtzIGFyb3VuZCBhIGNocm9tZSBidWcgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI4NjM2MFxuICAgICAgY29uc3QgY3NzID0gKGFuaW1hdGlvbktleWZyYW1lcyA/IGFuaW1hdGlvbktleWZyYW1lcyA6IFwiXCIpICsgXCIucmVzaXplLXRyaWdnZXJzIHsgXCIgKyAoYW5pbWF0aW9uU3R5bGUgPyBhbmltYXRpb25TdHlsZSA6IFwiXCIpICsgXCJ2aXNpYmlsaXR5OiBoaWRkZW47IG9wYWNpdHk6IDA7IH0gXCIgKyAnLnJlc2l6ZS10cmlnZ2VycywgLnJlc2l6ZS10cmlnZ2VycyA+IGRpdiwgLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgY29udGVudDogXCIgXCI7IGRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgei1pbmRleDogLTE7IH0gLnJlc2l6ZS10cmlnZ2VycyA+IGRpdiB7IGJhY2tncm91bmQ6ICNlZWU7IG92ZXJmbG93OiBhdXRvOyB9IC5jb250cmFjdC10cmlnZ2VyOmJlZm9yZSB7IHdpZHRoOiAyMDAlOyBoZWlnaHQ6IDIwMCU7IH0nLFxuICAgICAgICBoZWFkID0gZG9jLmhlYWQgfHwgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSxcbiAgICAgICAgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgc3R5bGUuaWQgPSBcImRldGVjdEVsZW1lbnRSZXNpemVcIjtcbiAgICAgIHN0eWxlLnR5cGUgPSBcInRleHQvY3NzXCI7XG4gICAgICBpZiAobm9uY2UgIT0gbnVsbCkge1xuICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgICB9XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGFkZFJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIGZuKSB7XG4gICAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KFwib25yZXNpemVcIiwgZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgY29uc3QgZWxlbWVudFN0eWxlID0gd2luZG93T2JqZWN0LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50U3R5bGUgJiYgZWxlbWVudFN0eWxlLnBvc2l0aW9uID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVTdHlsZXMoZG9jKTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXyA9IHt9O1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18gPSBbXTtcbiAgICAgICAgKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmNsYXNzTmFtZSA9IFwicmVzaXplLXRyaWdnZXJzXCI7XG4gICAgICAgIGNvbnN0IGV4cGFuZFRyaWdnZXIgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5jbGFzc05hbWUgPSBcImV4cGFuZC10cmlnZ2VyXCI7XG4gICAgICAgIGV4cGFuZFRyaWdnZXIuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgICBjb25zdCBjb250cmFjdFRyaWdnZXIgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgY29udHJhY3RUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiY29udHJhY3QtdHJpZ2dlclwiO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChleHBhbmRUcmlnZ2VyKTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uYXBwZW5kQ2hpbGQoY29udHJhY3RUcmlnZ2VyKTtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyk7XG4gICAgICAgIHJlc2V0VHJpZ2dlcnMoZWxlbWVudCk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxMaXN0ZW5lciwgdHJ1ZSk7XG5cbiAgICAgICAgLyogTGlzdGVuIGZvciBhIGNzcyBhbmltYXRpb24gdG8gZGV0ZWN0IGVsZW1lbnQgZGlzcGxheS9yZS1hdHRhY2ggKi9cbiAgICAgICAgaWYgKGFuaW1hdGlvblN0YXJ0RXZlbnQpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18gPSBmdW5jdGlvbiBhbmltYXRpb25MaXN0ZW5lcihlKSB7XG4gICAgICAgICAgICBpZiAoZS5hbmltYXRpb25OYW1lID09PSBhbmltYXRpb25OYW1lKSB7XG4gICAgICAgICAgICAgIHJlc2V0VHJpZ2dlcnMoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvblN0YXJ0RXZlbnQsIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5wdXNoKGZuKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlbW92ZVJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIGZuKSB7XG4gICAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgICBlbGVtZW50LmRldGFjaEV2ZW50KFwib25yZXNpemVcIiwgZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uc3BsaWNlKGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5pbmRleE9mKGZuKSwgMSk7XG4gICAgICBpZiAoIWVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5sZW5ndGgpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXykge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLnJlbW92ZUV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSAhZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBQcmVhY3QgY29tcGF0OyBzZWUgZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvaXNzdWVzLzIyOFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFkZFJlc2l6ZUxpc3RlbmVyLFxuICAgIHJlbW92ZVJlc2l6ZUxpc3RlbmVyXG4gIH07XG59XG5cbmNsYXNzIEF1dG9TaXplciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICBzdXBlciguLi5hcmdzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZEhlaWdodDogdGhpcy5wcm9wcy5kZWZhdWx0SGVpZ2h0IHx8IDAsXG4gICAgICBzY2FsZWRXaWR0aDogdGhpcy5wcm9wcy5kZWZhdWx0V2lkdGggfHwgMCxcbiAgICAgIHdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwXG4gICAgfTtcbiAgICB0aGlzLl9hdXRvU2l6ZXIgPSBudWxsO1xuICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUgPSBudWxsO1xuICAgIHRoaXMuX3BhcmVudE5vZGUgPSBudWxsO1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgIHRoaXMuX29uUmVzaXplID0gKCkgPT4ge1xuICAgICAgdGhpcy5fdGltZW91dElkID0gbnVsbDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGlzYWJsZUhlaWdodCxcbiAgICAgICAgZGlzYWJsZVdpZHRoLFxuICAgICAgICBvblJlc2l6ZVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAodGhpcy5fcGFyZW50Tm9kZSkge1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IEF1dG9TaXplciBjb21wb25lbnQgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBET00gaW1tZWRpYXRlbHkgYWZ0ZXIgYmVpbmcgYWRkZWQuXG4gICAgICAgIC8vIFRoaXMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHN0eWxlIHZhbHVlcyB3aGljaCBjYW4gcmVzdWx0IGluIE5hTiB2YWx1ZXMgaWYgd2UgZG9uJ3QgaGFuZGxlIHRoZW0uXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjMTUwIGZvciBtb3JlIGNvbnRleHQuXG5cbiAgICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9wYXJlbnROb2RlKSB8fCB7fTtcbiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0IHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY2FsZWRIZWlnaHQgPSByZWN0LmhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCBzY2FsZWRXaWR0aCA9IHJlY3Qud2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fcGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQgLSBwYWRkaW5nVG9wIC0gcGFkZGluZ0JvdHRvbTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XG4gICAgICAgIGlmICghZGlzYWJsZUhlaWdodCAmJiAodGhpcy5zdGF0ZS5oZWlnaHQgIT09IGhlaWdodCB8fCB0aGlzLnN0YXRlLnNjYWxlZEhlaWdodCAhPT0gc2NhbGVkSGVpZ2h0KSB8fCAhZGlzYWJsZVdpZHRoICYmICh0aGlzLnN0YXRlLndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLnN0YXRlLnNjYWxlZFdpZHRoICE9PSBzY2FsZWRXaWR0aCkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgICAgICAgc2NhbGVkV2lkdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzaXplID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIG9uUmVzaXplKHtcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZFdpZHRoLFxuICAgICAgICAgICAgICB3aWR0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl9zZXRSZWYgPSBhdXRvU2l6ZXIgPT4ge1xuICAgICAgdGhpcy5fYXV0b1NpemVyID0gYXV0b1NpemVyO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbm9uY2VcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fYXV0b1NpemVyID8gdGhpcy5fYXV0b1NpemVyLnBhcmVudE5vZGUgOiBudWxsO1xuICAgIGlmIChwYXJlbnROb2RlICE9IG51bGwgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50ICYmIHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyAmJiBwYXJlbnROb2RlIGluc3RhbmNlb2YgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50KSB7XG4gICAgICAvLyBEZWxheSBhY2Nlc3Mgb2YgcGFyZW50Tm9kZSB1bnRpbCBtb3VudC5cbiAgICAgIC8vIFRoaXMgaGFuZGxlcyBlZGdlLWNhc2VzIHdoZXJlIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQgYmVmb3JlIGl0cyByZWYgaGFzIGJlZW4gc2V0LFxuICAgICAgLy8gQXMgd2VsbCBhcyBsaWJyYXJpZXMgbGlrZSByZWFjdC1saXRlIHdoaWNoIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgbGlmZWN5Y2xlLlxuICAgICAgdGhpcy5fcGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG5cbiAgICAgIC8vIFVzZSBSZXNpemVPYnNlcnZlciBmcm9tIHRoZSBzYW1lIGNvbnRleHQgd2hlcmUgcGFyZW50Tm9kZSAod2hpY2ggd2Ugd2lsbCBvYnNlcnZlKSB3YXMgZGVmaW5lZFxuICAgICAgLy8gVXNpbmcganVzdCBnbG9iYWwgY2FuIHJlc3VsdCBpbnRvIG9uUmVzaXplIGV2ZW50cyBub3QgYmVpbmcgZW1pdHRlZCBpbiBjYXNlcyB3aXRoIG11bHRpcGxlIHJlYWxtc1xuICAgICAgY29uc3QgUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSA9IHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5SZXNpemVPYnNlcnZlcjtcbiAgICAgIGlmIChSZXNpemVPYnNlcnZlckluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSgoKSA9PiB7XG4gICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBcIlJlc2l6ZU9ic2VydmVyIGxvb3AgbGltaXQgZXhjZWVkZWRcIiBlcnJvcjtcbiAgICAgICAgICAvLyBjb3VsZCBiZSB0cmlnZ2VyZWQgaWYgdGhlIHN0YXRlIHVwZGF0ZSBjYXVzZXMgdGhlIFJlc2l6ZU9ic2VydmVyIGhhbmRsZXIgdG8gcnVuIGxvbmcuXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIvaXNzdWVzLzU1XG4gICAgICAgICAgdGhpcy5fdGltZW91dElkID0gc2V0VGltZW91dCh0aGlzLl9vblJlc2l6ZSwgMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVmZXIgcmVxdWlyaW5nIHJlc2l6ZSBoYW5kbGVyIGluIG9yZGVyIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgICAgICAvLyBTZWUgaXNzdWUgIzQxXG4gICAgICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUgPSBjcmVhdGVEZXRlY3RFbGVtZW50UmVzaXplKG5vbmNlKTtcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZS5hZGRSZXNpemVMaXN0ZW5lcihwYXJlbnROb2RlLCB0aGlzLl9vblJlc2l6ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vblJlc2l6ZSgpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5fcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUpIHtcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZS5yZW1vdmVSZXNpemVMaXN0ZW5lcih0aGlzLl9wYXJlbnROb2RlLCB0aGlzLl9vblJlc2l6ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVmYXVsdEhlaWdodCxcbiAgICAgIGRlZmF1bHRXaWR0aCxcbiAgICAgIGRpc2FibGVIZWlnaHQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVXaWR0aCA9IGZhbHNlLFxuICAgICAgZG9Ob3RCYWlsT3V0T25FbXB0eUNoaWxkcmVuID0gZmFsc2UsXG4gICAgICBub25jZSxcbiAgICAgIG9uUmVzaXplLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIHRhZ05hbWUgPSBcImRpdlwiLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGhlaWdodCxcbiAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgIHNjYWxlZFdpZHRoLFxuICAgICAgd2lkdGhcbiAgICB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIE91dGVyIGRpdiBzaG91bGQgbm90IGZvcmNlIHdpZHRoL2hlaWdodCBzaW5jZSB0aGF0IG1heSBwcmV2ZW50IGNvbnRhaW5lcnMgZnJvbSBzaHJpbmtpbmcuXG4gICAgLy8gSW5uZXIgY29tcG9uZW50IHNob3VsZCBvdmVyZmxvdyBhbmQgdXNlIGNhbGN1bGF0ZWQgd2lkdGgvaGVpZ2h0LlxuICAgIC8vIFNlZSBpc3N1ZSAjNjggZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgY29uc3Qgb3V0ZXJTdHlsZSA9IHtcbiAgICAgIG92ZXJmbG93OiBcInZpc2libGVcIlxuICAgIH07XG4gICAgY29uc3QgY2hpbGRQYXJhbXMgPSB7fTtcblxuICAgIC8vIEF2b2lkIHJlbmRlcmluZyBjaGlsZHJlbiBiZWZvcmUgdGhlIGluaXRpYWwgbWVhc3VyZW1lbnRzIGhhdmUgYmVlbiBjb2xsZWN0ZWQuXG4gICAgLy8gQXQgYmVzdCB0aGlzIHdvdWxkIGp1c3QgYmUgd2FzdGluZyBjeWNsZXMuXG4gICAgbGV0IGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgaWYgKCFkaXNhYmxlSGVpZ2h0KSB7XG4gICAgICBpZiAoaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gMDtcbiAgICAgIGNoaWxkUGFyYW1zLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZEhlaWdodCA9IHNjYWxlZEhlaWdodDtcbiAgICB9XG4gICAgaWYgKCFkaXNhYmxlV2lkdGgpIHtcbiAgICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBvdXRlclN0eWxlLndpZHRoID0gMDtcbiAgICAgIGNoaWxkUGFyYW1zLndpZHRoID0gd2lkdGg7XG4gICAgICBjaGlsZFBhcmFtcy5zY2FsZWRXaWR0aCA9IHNjYWxlZFdpZHRoO1xuICAgIH1cbiAgICBpZiAoZG9Ob3RCYWlsT3V0T25FbXB0eUNoaWxkcmVuKSB7XG4gICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCB7XG4gICAgICByZWY6IHRoaXMuX3NldFJlZixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIC4uLm91dGVyU3R5bGUsXG4gICAgICAgIC4uLnN0eWxlXG4gICAgICB9LFxuICAgICAgLi4ucmVzdFxuICAgIH0sICFiYWlsb3V0T25DaGlsZHJlbiAmJiBjaGlsZHJlbihjaGlsZFBhcmFtcykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSGVpZ2h0QW5kV2lkdGhQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCAhPT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggIT09IHRydWU7XG59XG5mdW5jdGlvbiBpc0hlaWdodE9ubHlQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCAhPT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggPT09IHRydWU7XG59XG5mdW5jdGlvbiBpc1dpZHRoT25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ID09PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cblxuZXhwb3J0IHsgQXV0b1NpemVyIGFzIGRlZmF1bHQsIGlzSGVpZ2h0QW5kV2lkdGhQcm9wcywgaXNIZWlnaHRPbmx5UHJvcHMsIGlzV2lkdGhPbmx5UHJvcHMgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react-virtualized-auto-sizer/dist/react-virtualized-auto-sizer.esm.js\n");
|
|
99
|
+
|
|
100
|
+
/***/ }),
|
|
101
|
+
|
|
102
|
+
/***/ "./node_modules/react-window/dist/index.esm.js":
|
|
103
|
+
/*!*****************************************************!*\
|
|
104
|
+
!*** ./node_modules/react-window/dist/index.esm.js ***!
|
|
105
|
+
\*****************************************************/
|
|
106
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
107
|
+
|
|
108
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FixedSizeGrid: () => (/* binding */ FixedSizeGrid),\n/* harmony export */ FixedSizeList: () => (/* binding */ FixedSizeList),\n/* harmony export */ VariableSizeGrid: () => (/* binding */ VariableSizeGrid),\n/* harmony export */ VariableSizeList: () => (/* binding */ VariableSizeList),\n/* harmony export */ areEqual: () => (/* binding */ areEqual),\n/* harmony export */ shouldComponentUpdate: () => (/* binding */ shouldComponentUpdate)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var memoize_one__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! memoize-one */ \"./node_modules/memoize-one/dist/memoize-one.esm.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n\n\n\n\n\n\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (true) {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = (0,memoize_one__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = (0,memoize_one__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = (0,memoize_one__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push((0,react__WEBPACK_IMPORTED_MODULE_3__.createElement)(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return (0,react__WEBPACK_IMPORTED_MODULE_3__.createElement)(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, (0,react__WEBPACK_IMPORTED_MODULE_3__.createElement)(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(react__WEBPACK_IMPORTED_MODULE_3__.PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (true) {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (true) {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (true) {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = (0,memoize_one__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = (0,memoize_one__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = (0,memoize_one__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push((0,react__WEBPACK_IMPORTED_MODULE_3__.createElement)(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return (0,react__WEBPACK_IMPORTED_MODULE_3__.createElement)(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, (0,react__WEBPACK_IMPORTED_MODULE_3__.createElement)(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(react__WEBPACK_IMPORTED_MODULE_3__.PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (true) {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (true) {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (true) {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (true) {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\n\n//# sourceMappingURL=index.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L2Rpc3QvaW5kZXguZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEQ7QUFDNEI7QUFDaEI7QUFDakM7QUFDZ0I7QUFDK0M7O0FBRXBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QixtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksb0ZBQWM7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0REFBNEQsNEZBQXNCO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw0RkFBc0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx1REFBVTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsNEJBQTRCLHVEQUFVO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQyx1REFBVTtBQUMzQztBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOzs7QUFHWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlGQUF5RjtBQUN6RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw0Q0FBNEMsMkJBQTJCO0FBQ3ZFLG9EQUFvRCxpQ0FBaUM7QUFDckYsdUJBQXVCLG9EQUFhO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFFBQVE7QUFDUjs7O0FBR0E7QUFDQTtBQUNBLGFBQWEsb0RBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsZUFBZSw4RUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPLEVBQUUsb0RBQWE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdIQUFnSDtBQUNoSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEdBQTRHO0FBQzVHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxDQUFDLGdEQUFhO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0MsWUFBWTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUEsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9GQUFjOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNERBQTRELDRGQUFzQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNEZBQXNCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx1REFBVTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLDRCQUE0Qix1REFBVTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBLDRFQUE0RTs7QUFFNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUMsdURBQVU7QUFDM0M7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOzs7QUFHWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7OztBQUdaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0EseUNBQXlDOztBQUV6Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHNDQUFzQyxxQkFBcUI7QUFDM0QscUJBQXFCLG9EQUFhO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxRQUFRO0FBQ1I7OztBQUdBO0FBQ0EsYUFBYSxvREFBYTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhFQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU8sRUFBRSxvREFBYTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0R0FBNEc7QUFDNUc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHLENBQUMsZ0RBQWE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLFlBQVk7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFD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QTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCO0FBQ3RCLFlBQVk7QUFDWixtQ0FBbUM7QUFDbkMsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsd0RBQXdEO0FBQ3hELEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLG1HQUE2Qjs7QUFFOUM7QUFDQSxpQkFBaUIsbUdBQTZCOztBQUU5QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUU2RztBQUM3RyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0ZWxzaG8vZ29vZ2xlLWZsaWdodC1kYXRlcGlja2VyLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcz84OTFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuXG4vLyBBbmltYXRpb24gZnJhbWUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc2V0VGltZW91dC5cbi8vIEluc3BpcmVkIGJ5IEpvZSBMYW1iZXJ0LCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb2VsYW1iZXJ0LzEwMDIxMTYjZmlsZS1yZXF1ZXN0dGltZW91dC1qc1xudmFyIGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xudmFyIG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID8gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07XG5mdW5jdGlvbiBjYW5jZWxUaW1lb3V0KHRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KSB7XG4gIHZhciBzdGFydCA9IG5vdygpO1xuXG4gIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgaWYgKG5vdygpIC0gc3RhcnQgPj0gZGVsYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXRJRC5pZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgfTtcbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cblxudmFyIHNpemUgPSAtMTsgLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuXG5mdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChzaXplID09PSAtMSB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG52YXIgY2FjaGVkUlRMUmVzdWx0ID0gbnVsbDsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5cbmZ1bmN0aW9uIGdldFJUTE9mZnNldFR5cGUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGNhY2hlZFJUTFJlc3VsdCA9PT0gbnVsbCB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcbiAgICB2YXIgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcbiAgICBvdXRlckRpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG5cbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcbiAgICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbn1cblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5ID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoX3JlZikge1xuICB2YXIgY29sdW1uSW5kZXggPSBfcmVmLmNvbHVtbkluZGV4LFxuICAgICAgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgIHJvd0luZGV4ID0gX3JlZi5yb3dJbmRleDtcbiAgcmV0dXJuIHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudChfcmVmMikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRDb2x1bW5PZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5PZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgZ2V0Q29sdW1uV2lkdGggPSBfcmVmMi5nZXRDb2x1bW5XaWR0aCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgICAgIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgICAgIGdldFJvd0hlaWdodCA9IF9yZWYyLmdldFJvd0hlaWdodCxcbiAgICAgIGdldFJvd09mZnNldCA9IF9yZWYyLmdldFJvd09mZnNldCxcbiAgICAgIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYyLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYyLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZjIudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShHcmlkLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gR3JpZChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsTGVmdDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0IDogMCxcbiAgICAgICAgc2Nyb2xsVG9wOiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wIDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJ1xuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsIG92ZXJzY2FuUm93U3RvcEluZGV4LCB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIHZpc2libGVSb3dTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleDogb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoID0gX3RoaXMkcHJvcHMuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wcy5yb3dIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgY29sdW1uV2lkdGgsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIHJvd0hlaWdodCk7XG5cbiAgICAgICAgdmFyIGtleSA9IHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0Q29sdW1uT2Zmc2V0KF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogX29mZnNldCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IF9vZmZzZXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6IGdldFJvd09mZnNldChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG5cbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYWxjdWxhdGVkU2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IGNhbGN1bGF0ZWRTY3JvbGxUb3AsXG4gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgR3JpZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBHcmlkLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKF9yZWYzKSB7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9yZWYzLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3JlZjMuc2Nyb2xsVG9wO1xuXG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCdcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKF9yZWY0KSB7XG4gICAgICB2YXIgX3JlZjQkYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY0JGFsaWduID09PSB2b2lkIDAgPyAnYXV0bycgOiBfcmVmNCRhbGlnbixcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF9yZWY0LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjQucm93SW5kZXg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzMi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczIuaGVpZ2h0LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHMyLnJvd0NvdW50LFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZS5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LFxuICAgICAgLy8gdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG5cbiAgICAgIHZhciBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsV2lkdGggPiB3aWR0aCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdmFyIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDogY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6IHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMsIGhvcml6b250YWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbFRvcFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbExlZnQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbExlZnQsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbFRvcCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsVG9wO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMi5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlMi5zY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNC5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM0LmNvbHVtbkNvdW50LFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM0LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNC5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNC5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczQkaXRlbUtleSA9IF90aGlzJHByb3BzNC5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkgOiBfdGhpcyRwcm9wczQkaXRlbUtleSxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNC5yb3dDb3VudCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNC51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNC53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIGNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMF0sXG4gICAgICAgICAgY29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzFdO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgcm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblswXSxcbiAgICAgICAgICByb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAodmFyIF9yb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7IF9yb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7IF9yb3dJbmRleCsrKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2NvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgX2NvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDsgX2NvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleSh7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4LFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9yb3dJbmRleCwgX2NvbHVtbkluZGV4KVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGVzdGltYXRlZFRvdGFsV2lkdGhcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNS5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQgPSBfdGhpcyRwcm9wczUub25JdGVtc1JlbmRlcmVkLFxuICAgICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHM1Lm9uU2Nyb2xsLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM1LnJvd0NvdW50O1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlszXTtcblxuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4yID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgX292ZXJzY2FuUm93U3RhcnRJbmRleCwgX292ZXJzY2FuUm93U3RvcEluZGV4LCBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4LCBfdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIF92aXNpYmxlUm93U3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbExlZnQsXG4gICAgICAgICAgICBfc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUzLnNjcm9sbFRvcCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgICAgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsTGVmdCwgX3Njcm9sbFRvcCwgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM2LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNC5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU0LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTQuc2Nyb2xsTGVmdDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhbkNvbHVtbkNvdW50IHx8IG92ZXJzY2FuQ29sdW1uc0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczcuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93Q291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dDb3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNy5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU1LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU1LnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlNS5zY3JvbGxUb3A7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBHcmlkO1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufVxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjUsIF9yZWY2KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjUuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjUuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjUub3V0ZXJUYWdOYW1lLFxuICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgIG92ZXJzY2FuQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvdW50LFxuICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfcmVmNS5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgIHdpZHRoID0gX3JlZjUud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWY2Lmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ291bnQgcHJvcCBoYXMgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIHJvd0NvdW50ID0gX3JlZi5yb3dDb3VudDtcbiAgdmFyIHJvd01ldGFkYXRhTWFwID0gX3JlZjIucm93TWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmMi5lc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IF9yZWYyLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSByb3dDb3VudCkge1xuICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gcm93Q291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWYzLCBfcmVmNCkge1xuICB2YXIgY29sdW1uQ291bnQgPSBfcmVmMy5jb2x1bW5Db3VudDtcbiAgdmFyIGNvbHVtbk1ldGFkYXRhTWFwID0gX3JlZjQuY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY0LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBfcmVmNC5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGNvbHVtbk1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZENvbHVtbkluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLmNvbHVtbldpZHRoO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMucm93SGVpZ2h0O1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICB2YXIgc2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLndpZHRoIDogcHJvcHMuaGVpZ2h0O1xuICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKSA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuXG4gIH1cbn07XG5cbnZhciBWYXJpYWJsZVNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IHByb3BzLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoO1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsTGVmdCArIHdpZHRoO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgncm93JywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIHJvd0NvdW50ID0gcHJvcHMucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY1ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjUuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWY1LmVzdGltYXRlZFJvd0hlaWdodDtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge31cbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckNvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gZnVuY3Rpb24gKHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciBjb2x1bW5JbmRleCA9IF9yZWY2LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjYucm93SW5kZXgsXG4gICAgICAgICAgX3JlZjYkc2hvdWxkRm9yY2VVcGRhID0gX3JlZjYuc2hvdWxkRm9yY2VVcGRhdGUsXG4gICAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRzaG91bGRGb3JjZVVwZGE7XG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4LCBjb2x1bW5JbmRleCAtIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCwgcm93SW5kZXggLSAxKTtcbiAgICAgIH0gLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSQxID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoaW5kZXgsIGRhdGEpIHtcbiAgcmV0dXJuIGluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoX3JlZikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRJdGVtT2Zmc2V0ID0gX3JlZi5nZXRJdGVtT2Zmc2V0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gX3JlZi5nZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICBnZXRJdGVtU2l6ZSA9IF9yZWYuZ2V0SXRlbVNpemUsXG4gICAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IF9yZWYuZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZi5nZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYuZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKExpc3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBMaXN0KHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbE9mZnNldDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5TdGFydEluZGV4LCBvdmVyc2NhblN0b3BJbmRleCwgdmlzaWJsZVN0YXJ0SW5kZXgsIHZpc2libGVTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXg6IG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdGFydEluZGV4OiB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIGl0ZW1TaXplID0gX3RoaXMkcHJvcHMuaXRlbVNpemUsXG4gICAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wcy5sYXlvdXQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgaXRlbVNpemUsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgbGF5b3V0LCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbik7XG5cbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldEl0ZW1PZmZzZXQoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgc2l6ZSA9IGdldEl0ZW1TaXplKF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIHZhciBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDA7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0SG9yaXpvbnRhbCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMCxcbiAgICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsVmVydGljYWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0MiA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxUb3A7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgTGlzdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMkMShuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIF9wcm90byA9IExpc3QucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvID0gZnVuY3Rpb24gc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbikge1xuICAgICAgaWYgKGFsaWduID09PSB2b2lkIDApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzMi5pdGVtQ291bnQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMyLmxheW91dDtcbiAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSB0aGlzLnN0YXRlLnNjcm9sbE9mZnNldDtcbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuXG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IDA7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbFdpZHRoID4gb3V0ZXJSZWYuY2xpZW50V2lkdGggPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxIZWlnaHQgPiBvdXRlclJlZi5jbGllbnRIZWlnaHQgPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczMuZGlyZWN0aW9uLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxPZmZzZXQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbE9mZnNldCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczMubGF5b3V0O1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNC5sYXlvdXQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBvdXRlclJlZi5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNS5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczUuY2xhc3NOYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNS5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM1LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNS5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczUuaXRlbUNvdW50LFxuICAgICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkcHJvcHM1Lml0ZW1EYXRhLFxuICAgICAgICAgIF90aGlzJHByb3BzNSRpdGVtS2V5ID0gX3RoaXMkcHJvcHM1Lml0ZW1LZXksXG4gICAgICAgICAgaXRlbUtleSA9IF90aGlzJHByb3BzNSRpdGVtS2V5ID09PSB2b2lkIDAgPyBkZWZhdWx0SXRlbUtleSQxIDogX3RoaXMkcHJvcHM1JGl0ZW1LZXksXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM1LmxheW91dCxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNS5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNS51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNS53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICB2YXIgb25TY3JvbGwgPSBpc0hvcml6b250YWwgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWwgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMF0sXG4gICAgICAgICAgc3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAga2V5OiBpdGVtS2V5KF9pbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgaW5kZXg6IF9pbmRleCxcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfaW5kZXgpXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZSh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6IGVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaXRlbUNvdW50ID0gdGhpcy5wcm9wcy5pdGVtQ291bnQ7XG5cbiAgICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kMiA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlszXTtcblxuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoX292ZXJzY2FuU3RhcnRJbmRleCwgX292ZXJzY2FuU3RvcEluZGV4LCBfdmlzaWJsZVN0YXJ0SW5kZXgsIF92aXNpYmxlU3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBfc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUyLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKF9zY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxPZmZzZXQsIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0UmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNi5pdGVtQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTMuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsT2Zmc2V0O1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0U3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gTGlzdDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgbGF5b3V0OiAndmVydGljYWwnLFxuICAgIG92ZXJzY2FuQ291bnQ6IDIsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn0gLy8gTk9URTogSSBjb25zaWRlcmVkIGZ1cnRoZXIgd3JhcHBpbmcgaW5kaXZpZHVhbCBpdGVtcyB3aXRoIGEgcHVyZSBMaXN0SXRlbSBjb21wb25lbnQuXG4vLyBUaGlzIHdvdWxkIGF2b2lkIGV2ZXIgY2FsbGluZyB0aGUgcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgc2FtZSBpbmRleCBtb3JlIHRoYW4gb25jZSxcbi8vIEJ1dCBpdCB3b3VsZCBhbHNvIGFkZCB0aGUgb3ZlcmhlYWQgb2YgYSBsb3Qgb2YgY29tcG9uZW50cy9maWJlcnMuXG4vLyBJIGFzc3VtZSBwZW9wbGUgYWxyZWFkeSBkbyB0aGlzIChyZW5kZXIgZnVuY3Rpb24gcmV0dXJuaW5nIGEgY2xhc3MgY29tcG9uZW50KSxcbi8vIFNvIG15IGRvaW5nIGl0IHdvdWxkIGp1c3QgdW5uZWNlc3NhcmlseSBkb3VibGUgdGhlIHdyYXBwZXJzLlxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyQxID0gZnVuY3Rpb24gdmFsaWRhdGVTaGFyZWRQcm9wcyhfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmMi5kaXJlY3Rpb24sXG4gICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQsXG4gICAgICBsYXlvdXQgPSBfcmVmMi5sYXlvdXQsXG4gICAgICBpbm5lclRhZ05hbWUgPSBfcmVmMi5pbm5lclRhZ05hbWUsXG4gICAgICBvdXRlclRhZ05hbWUgPSBfcmVmMi5vdXRlclRhZ05hbWUsXG4gICAgICB3aWR0aCA9IF9yZWYyLndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmMy5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSQxICYmICFkZXZXYXJuaW5nc1RhZ05hbWUkMS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZSQxLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIGlmIChkZXZXYXJuaW5nc0RpcmVjdGlvbiAmJiAhZGV2V2FybmluZ3NEaXJlY3Rpb24uaGFzKGluc3RhbmNlKSkge1xuICAgICAgICAgIGRldldhcm5pbmdzRGlyZWN0aW9uLmFkZChpbnN0YW5jZSk7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICsgKFwiXFxcIlwiICsgZGlyZWN0aW9uICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJsYXlvdXRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIi4gJyArIChcIlxcXCJcIiArIGxheW91dCArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoXCJcXFwiXCIgKyAod2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9IGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmVydGljYWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgKyAoXCJcXFwiXCIgKyAoaGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxID0gNTA7XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEkMSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgdmFyIF9yZWYgPSBwcm9wcyxcbiAgICAgIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSwgb2Zmc2V0KTtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaW5kZXgsIG9mZnNldCkge1xuICB2YXIgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldCkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IF9yZWYyLml0ZW1Db3VudDtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IF9yZWYzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjMuZXN0aW1hdGVkSXRlbVNpemUsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IF9yZWYzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gaXRlbUNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpdGVtQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIFZhcmlhYmxlU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAgIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG5cbiAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldCkpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBvZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgc2l6ZTtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcywgaW5zdGFuY2UpIHtcbiAgICB2YXIgX3JlZjQgPSBwcm9wcyxcbiAgICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmNC5lc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleDogLTFcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGV4ID0gZnVuY3Rpb24gKGluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCwgaW5kZXggLSAxKTsgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjUpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGluZGV4ICogY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KF9yZWYzLCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMy5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIGluZGV4ICogcm93SGVpZ2h0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChfcmVmNCwgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjQucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChfcmVmNSkge1xuICAgIHZhciByb3dDb3VudCA9IF9yZWY1LnJvd0NvdW50LFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNS5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodCAqIHJvd0NvdW50O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWY2KSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjYuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoICogY29sdW1uQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KF9yZWY3LCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNy5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgd2lkdGggPSBfcmVmNy53aWR0aDtcbiAgICB2YXIgbGFzdENvbHVtbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkNvdW50ICogY29sdW1uV2lkdGggLSB3aWR0aCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RDb2x1bW5PZmZzZXQsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGgpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoIC0gd2lkdGggKyBzY3JvbGxiYXJTaXplICsgY29sdW1uV2lkdGgpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgLSB3aWR0aCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCArIHdpZHRoKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdENvbHVtbk9mZnNldCArIE1hdGguZmxvb3Iod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Q29sdW1uT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQoX3JlZjgsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY4LnJvd0hlaWdodCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjguaGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWY4LnJvd0NvdW50O1xuICAgIHZhciBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93Q291bnQgKiByb3dIZWlnaHQgLSBoZWlnaHQpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Um93T2Zmc2V0LCByb3dJbmRleCAqIHJvd0hlaWdodCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIHJvd0luZGV4ICogcm93SGVpZ2h0IC0gaGVpZ2h0ICsgc2Nyb2xsYmFyU2l6ZSArIHJvd0hlaWdodCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxUb3AgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChfcmVmOSwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY5LmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWY5LmNvbHVtbkNvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsTGVmdCAvIGNvbHVtbldpZHRoKSkpO1xuICB9LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMCwgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMC5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmMTAuY29sdW1uQ291bnQsXG4gICAgICAgIHdpZHRoID0gX3JlZjEwLndpZHRoO1xuICAgIHZhciBsZWZ0ID0gc3RhcnRJbmRleCAqIGNvbHVtbldpZHRoO1xuICAgIHZhciBudW1WaXNpYmxlQ29sdW1ucyA9IE1hdGguY2VpbCgod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyBjb2x1bW5XaWR0aCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjExLCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjExLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTEucm93Q291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyByb3dIZWlnaHQpKSk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEyLCBzdGFydEluZGV4LCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjEyLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTIucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IF9yZWYxMi5oZWlnaHQ7XG4gICAgdmFyIHRvcCA9IHN0YXJ0SW5kZXggKiByb3dIZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVSb3dzID0gTWF0aC5jZWlsKChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gcm93SGVpZ2h0KTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWYxMykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjEzLnJvd0hlaWdodDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICAgIHJldHVybiBpbmRleCAqIGl0ZW1TaXplO1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjIuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMykge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmMy5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjMuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplICogaXRlbUNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoX3JlZjQsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY0LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjQuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNC5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjQuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY0LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbGFzdEl0ZW1PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtQ291bnQgKiBpdGVtU2l6ZSAtIHNpemUpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0SXRlbU9mZnNldCwgaW5kZXggKiBpdGVtU2l6ZSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGluZGV4ICogaXRlbVNpemUgLSBzaXplICsgaXRlbVNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RJdGVtT2Zmc2V0ICsgTWF0aC5mbG9vcihzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0SXRlbU9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjUsIG9mZnNldCkge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmNS5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIE1hdGguZmxvb3Iob2Zmc2V0IC8gaXRlbVNpemUpKSk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjYsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNi5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY2LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjYuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY2Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNi5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjYud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBvZmZzZXQgPSBzdGFydEluZGV4ICogaXRlbVNpemU7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZUl0ZW1zID0gTWF0aC5jZWlsKChzaXplICsgc2Nyb2xsT2Zmc2V0IC0gb2Zmc2V0KSAvIGl0ZW1TaXplKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVJdGVtcyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNy5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5mdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2LCBuZXh0KSB7XG4gIGZvciAodmFyIGF0dHJpYnV0ZSBpbiBwcmV2KSB7XG4gICAgaWYgKCEoYXR0cmlidXRlIGluIG5leHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfYXR0cmlidXRlIGluIG5leHQpIHtcbiAgICBpZiAocHJldltfYXR0cmlidXRlXSAhPT0gbmV4dFtfYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wic3R5bGVcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcInN0eWxlXCJdO1xuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdG1lbW9cblxuZnVuY3Rpb24gYXJlRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdHlsZSA9IHByZXZQcm9wcy5zdHlsZSxcbiAgICAgIHByZXZSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJldlByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBuZXh0U3R5bGUgPSBuZXh0UHJvcHMuc3R5bGUsXG4gICAgICBuZXh0UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG5leHRQcm9wcywgX2V4Y2x1ZGVkMik7XG5cbiAgcmV0dXJuICFzaGFsbG93RGlmZmVycyhwcmV2U3R5bGUsIG5leHRTdHlsZSkgJiYgIXNoYWxsb3dEaWZmZXJzKHByZXZSZXN0LCBuZXh0UmVzdCk7XG59XG5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtY29tcG9uZW50Lmh0bWwjc2hvdWxkY29tcG9uZW50dXBkYXRlXG5cbmZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICByZXR1cm4gIWFyZUVxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgc2hhbGxvd0RpZmZlcnModGhpcy5zdGF0ZSwgbmV4dFN0YXRlKTtcbn1cblxuZXhwb3J0IHsgRml4ZWRTaXplR3JpZCwgRml4ZWRTaXplTGlzdCwgVmFyaWFibGVTaXplR3JpZCwgVmFyaWFibGVTaXplTGlzdCwgYXJlRXF1YWwsIHNob3VsZENvbXBvbmVudFVwZGF0ZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguZXNtLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react-window/dist/index.esm.js\n");
|
|
109
|
+
|
|
110
|
+
/***/ }),
|
|
111
|
+
|
|
112
|
+
/***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
|
|
113
|
+
/*!**************************************************************************!*\
|
|
114
|
+
!*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
|
|
115
|
+
\**************************************************************************/
|
|
116
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
117
|
+
|
|
118
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _assertThisInitialized)\n/* harmony export */ });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdGVsc2hvL2dvb2dsZS1mbGlnaHQtZGF0ZXBpY2tlci8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanM/Y2IyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\n");
|
|
119
|
+
|
|
120
|
+
/***/ }),
|
|
121
|
+
|
|
122
|
+
/***/ "./node_modules/@babel/runtime/helpers/esm/extends.js":
|
|
123
|
+
/*!************************************************************!*\
|
|
124
|
+
!*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
|
|
125
|
+
\************************************************************/
|
|
126
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
127
|
+
|
|
128
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _extends)\n/* harmony export */ });\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0ZWxzaG8vZ29vZ2xlLWZsaWdodC1kYXRlcGlja2VyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanM/ZjUyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/extends.js\n");
|
|
129
|
+
|
|
130
|
+
/***/ }),
|
|
131
|
+
|
|
132
|
+
/***/ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js":
|
|
133
|
+
/*!******************************************************************!*\
|
|
134
|
+
!*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***!
|
|
135
|
+
\******************************************************************/
|
|
136
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
137
|
+
|
|
138
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _inheritsLoose)\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ \"./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(subClass, superClass);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFpRDtBQUNsQztBQUNmO0FBQ0E7QUFDQSxFQUFFLDhEQUFjO0FBQ2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRlbHNoby9nb29nbGUtZmxpZ2h0LWRhdGVwaWNrZXIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcz9iNzRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\n");
|
|
139
|
+
|
|
140
|
+
/***/ }),
|
|
141
|
+
|
|
142
|
+
/***/ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js":
|
|
143
|
+
/*!*********************************************************************************!*\
|
|
144
|
+
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
|
|
145
|
+
\*********************************************************************************/
|
|
146
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
147
|
+
|
|
148
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _objectWithoutPropertiesLoose)\n/* harmony export */ });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsdUJBQXVCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0ZWxzaG8vZ29vZ2xlLWZsaWdodC1kYXRlcGlja2VyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/MGU5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\n");
|
|
149
|
+
|
|
150
|
+
/***/ }),
|
|
151
|
+
|
|
152
|
+
/***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js":
|
|
153
|
+
/*!*******************************************************************!*\
|
|
154
|
+
!*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***!
|
|
155
|
+
\*******************************************************************/
|
|
156
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
157
|
+
|
|
158
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _setPrototypeOf)\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRlbHNoby9nb29nbGUtZmxpZ2h0LWRhdGVwaWNrZXIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanM/ODI2MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\n");
|
|
159
|
+
|
|
160
|
+
/***/ })
|
|
161
|
+
|
|
162
|
+
},
|
|
163
|
+
/******/ function(__webpack_require__) { // webpackRuntimeModules
|
|
164
|
+
/******/ /* webpack/runtime/getFullHash */
|
|
165
|
+
/******/ (() => {
|
|
166
|
+
/******/ __webpack_require__.h = () => ("ea8f8af8ef2a488e45b7")
|
|
167
|
+
/******/ })();
|
|
168
|
+
/******/
|
|
169
|
+
/******/ /* webpack/runtime/global */
|
|
170
|
+
/******/ (() => {
|
|
171
|
+
/******/ __webpack_require__.g = (function() {
|
|
172
|
+
/******/ if (typeof globalThis === 'object') return globalThis;
|
|
173
|
+
/******/ try {
|
|
174
|
+
/******/ return this || new Function('return this')();
|
|
175
|
+
/******/ } catch (e) {
|
|
176
|
+
/******/ if (typeof window === 'object') return window;
|
|
177
|
+
/******/ }
|
|
178
|
+
/******/ })();
|
|
179
|
+
/******/ })();
|
|
180
|
+
/******/
|
|
181
|
+
/******/ }
|
|
182
|
+
);
|