@pinerohit11/testwidget 0.1.23 → 0.1.25
Sign up to get free protection for your applications and to get access to all the features.
- package/.next/app-build-manifest.json +0 -5
- package/.next/build-manifest.json +2 -13
- package/.next/cache/webpack/client-development/0.pack.gz +0 -0
- package/.next/cache/webpack/client-development/1.pack.gz +0 -0
- package/.next/cache/webpack/client-development/14.pack.gz +0 -0
- package/.next/cache/webpack/client-development/17.pack.gz +0 -0
- package/.next/cache/webpack/client-development/2.pack.gz +0 -0
- package/.next/cache/webpack/client-development/3.pack.gz +0 -0
- package/.next/cache/webpack/client-development/5.pack.gz +0 -0
- package/.next/cache/webpack/client-development/6.pack.gz +0 -0
- package/.next/cache/webpack/client-development/8.pack.gz +0 -0
- package/.next/cache/webpack/client-development/index.pack.gz +0 -0
- package/.next/cache/webpack/client-development/index.pack.gz.old +0 -0
- package/.next/cache/webpack/client-development-fallback/0.pack.gz +0 -0
- package/.next/cache/webpack/client-development-fallback/1.pack.gz +0 -0
- package/.next/cache/webpack/client-development-fallback/index.pack.gz +0 -0
- package/.next/cache/webpack/client-development-fallback/index.pack.gz.old +0 -0
- package/.next/cache/webpack/server-development/0.pack.gz +0 -0
- package/.next/cache/webpack/server-development/1.pack.gz +0 -0
- package/.next/cache/webpack/server-development/14.pack.gz +0 -0
- package/.next/cache/webpack/server-development/15.pack.gz +0 -0
- package/.next/cache/webpack/server-development/2.pack.gz +0 -0
- package/.next/cache/webpack/server-development/3.pack.gz +0 -0
- package/.next/cache/webpack/server-development/4.pack.gz +0 -0
- package/.next/cache/webpack/server-development/5.pack.gz +0 -0
- package/.next/cache/webpack/server-development/index.pack.gz +0 -0
- package/.next/cache/webpack/server-development/index.pack.gz.old +0 -0
- package/.next/server/app/page.js +36 -25
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +0 -1
- package/.next/server/middleware-build-manifest.js +2 -13
- package/.next/server/pages-manifest.json +1 -5
- package/.next/server/vendor-chunks/@swc.js +0 -20
- package/.next/server/vendor-chunks/next.js +4 -421
- package/.next/server/webpack-runtime.js +1 -1
- package/.next/static/chunks/app/layout.js +22 -11
- package/.next/static/chunks/app/page.js +7 -7
- package/.next/static/chunks/app-pages-internals.js +1 -1
- package/.next/static/chunks/main-app.js +5 -5
- package/.next/static/chunks/webpack.js +1 -1
- package/.next/static/css/app/layout.css +690 -0
- package/.next/static/css/app/page.css +689 -689
- package/.next/static/development/_buildManifest.js +1 -1
- package/.next/static/webpack/app/{layout.300fc5b668ca0906.hot-update.js → layout.068fbf99e4cd8b82.hot-update.js} +2 -2
- package/.next/static/webpack/{webpack.05e804a9c98d6744.hot-update.js → webpack.068fbf99e4cd8b82.hot-update.js} +1 -1
- package/.next/trace +17 -148
- package/dist/index.cjs +0 -6
- package/dist/index.css +544 -0
- package/dist/index.js +0 -6
- package/package.json +2 -1
- package/.next/fallback-build-manifest.json +0 -28
- package/.next/server/_error.js +0 -76
- package/.next/server/app/_not-found/page.js +0 -210
- package/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
- package/.next/server/pages/_app.js +0 -46
- package/.next/server/pages/_document.js +0 -66
- package/.next/server/pages/_error.js +0 -76
- package/.next/static/chunks/_error.js +0 -28
- package/.next/static/chunks/app/_not-found/page.js +0 -39
- package/.next/static/chunks/fallback/amp.js +0 -885
- package/.next/static/chunks/fallback/main.js +0 -2057
- package/.next/static/chunks/fallback/pages/_app.js +0 -28
- package/.next/static/chunks/fallback/pages/_error.js +0 -28
- package/.next/static/chunks/fallback/react-refresh.js +0 -62
- package/.next/static/chunks/fallback/webpack.js +0 -1210
- package/.next/static/chunks/main.js +0 -2057
- package/.next/static/chunks/pages/_app.js +0 -28
- package/.next/static/chunks/pages/_error.js +0 -28
- package/.next/static/chunks/react-refresh.js +0 -62
- package/.next/static/webpack/03ee13d215584d59.webpack.hot-update.json +0 -1
- package/.next/static/webpack/05e804a9c98d6744.webpack.hot-update.json +0 -1
- package/.next/static/webpack/09b6bf9d551718e6.webpack.hot-update.json +0 -1
- package/.next/static/webpack/19bfc21a985c41a3.webpack.hot-update.json +0 -1
- package/.next/static/webpack/1c4c3e518f810365.webpack.hot-update.json +0 -1
- package/.next/static/webpack/1dc8bb4faa862342.webpack.hot-update.json +0 -1
- package/.next/static/webpack/217f0b5265f56be2.webpack.hot-update.json +0 -1
- package/.next/static/webpack/21d00cb457913b06.webpack.hot-update.json +0 -1
- package/.next/static/webpack/2813c5d79542e32e.webpack.hot-update.json +0 -1
- package/.next/static/webpack/28ebfaec609673ec.webpack.hot-update.json +0 -1
- package/.next/static/webpack/2b7d71482ca7a5b0.webpack.hot-update.json +0 -1
- package/.next/static/webpack/300fc5b668ca0906.webpack.hot-update.json +0 -1
- package/.next/static/webpack/31b91c765347fb55.webpack.hot-update.json +0 -1
- package/.next/static/webpack/32e5c09644d13662.webpack.hot-update.json +0 -1
- package/.next/static/webpack/33df40926ef177b8.webpack.hot-update.json +0 -1
- package/.next/static/webpack/343e03d8261d3d56.webpack.hot-update.json +0 -1
- package/.next/static/webpack/3d336feedc5241cc.webpack.hot-update.json +0 -1
- package/.next/static/webpack/3de1fe8a6a590578.webpack.hot-update.json +0 -1
- package/.next/static/webpack/3fffc4287d1af227.webpack.hot-update.json +0 -1
- package/.next/static/webpack/511251a6a8797ede.webpack.hot-update.json +0 -1
- package/.next/static/webpack/5361cbc07110a7d3.webpack.hot-update.json +0 -1
- package/.next/static/webpack/55648f4af4cd339a.webpack.hot-update.json +0 -1
- package/.next/static/webpack/5592a999a18ce828.webpack.hot-update.json +0 -1
- package/.next/static/webpack/5a1cff97146b50bb.webpack.hot-update.json +0 -1
- package/.next/static/webpack/605a7773ba1d798b.webpack.hot-update.json +0 -1
- package/.next/static/webpack/60b6b08662112fd8.webpack.hot-update.json +0 -1
- package/.next/static/webpack/660742a3b5333202.webpack.hot-update.json +0 -1
- package/.next/static/webpack/68289df254bc1101.webpack.hot-update.json +0 -1
- package/.next/static/webpack/6965c86e8cf1c189.webpack.hot-update.json +0 -1
- package/.next/static/webpack/6ee5f39e8d123868.webpack.hot-update.json +0 -1
- package/.next/static/webpack/77e53aa0ed10b537.webpack.hot-update.json +0 -1
- package/.next/static/webpack/79fe8ba93a0b810b.webpack.hot-update.json +0 -1
- package/.next/static/webpack/7bb361b5246e77d2.webpack.hot-update.json +0 -1
- package/.next/static/webpack/7d5deda3951c8e99.webpack.hot-update.json +0 -1
- package/.next/static/webpack/7dd58225de2c96b1.webpack.hot-update.json +0 -1
- package/.next/static/webpack/7e9ea68e1248f8c4.webpack.hot-update.json +0 -1
- package/.next/static/webpack/8635c08a046e0cc3.webpack.hot-update.json +0 -1
- package/.next/static/webpack/8b5b5419d114117b.webpack.hot-update.json +0 -1
- package/.next/static/webpack/912fdb75a65577d9.webpack.hot-update.json +0 -1
- package/.next/static/webpack/9211406c39b8c7d6.webpack.hot-update.json +0 -1
- package/.next/static/webpack/954c98691962cd98.webpack.hot-update.json +0 -1
- package/.next/static/webpack/973f3512b11e3d54.webpack.hot-update.json +0 -1
- package/.next/static/webpack/97dcbdd43d9b0185.webpack.hot-update.json +0 -1
- package/.next/static/webpack/98ceb1d86c3608da.webpack.hot-update.json +0 -1
- package/.next/static/webpack/9c321599ae8772f6.webpack.hot-update.json +0 -1
- package/.next/static/webpack/9e012937cc8b78c3.webpack.hot-update.json +0 -1
- package/.next/static/webpack/9f1faeb236a539a7.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a09fb847fbd6c830.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a32ac07f1f02ef92.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a3b2da5299326aea.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a40ddad54b6bc90e.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a495282bd4f45272.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a6280d0500ceb91c.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a81d8481ae8f1db5.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a8d577cb610891a6.webpack.hot-update.json +0 -1
- package/.next/static/webpack/a8e05348c0e655b9.webpack.hot-update.json +0 -1
- package/.next/static/webpack/app/layout.255312d1130cf6ec.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.2813c5d79542e32e.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.2b7d71482ca7a5b0.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.31b91c765347fb55.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.32e5c09644d13662.hot-update.js +0 -32
- package/.next/static/webpack/app/layout.33df40926ef177b8.hot-update.js +0 -21
- package/.next/static/webpack/app/layout.343e03d8261d3d56.hot-update.js +0 -32
- package/.next/static/webpack/app/layout.3fffc4287d1af227.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.5a1cff97146b50bb.hot-update.js +0 -21
- package/.next/static/webpack/app/layout.660742a3b5333202.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.7dd58225de2c96b1.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.7e9ea68e1248f8c4.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.9211406c39b8c7d6.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.954c98691962cd98.hot-update.js +0 -21
- package/.next/static/webpack/app/layout.a09fb847fbd6c830.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.a495282bd4f45272.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.a6280d0500ceb91c.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.a8d577cb610891a6.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.a8e05348c0e655b9.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.c6e67d2545c174a8.hot-update.js +0 -21
- package/.next/static/webpack/app/layout.dcebba06ee4c3470.hot-update.js +0 -31
- package/.next/static/webpack/app/layout.df471031cb4836a9.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.e7d9eed4488f9850.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.eb00615f06d96185.hot-update.js +0 -22
- package/.next/static/webpack/app/layout.f678ffea2e9fb9a3.hot-update.js +0 -32
- package/.next/static/webpack/app/layout.fa81cc9e0039618f.hot-update.js +0 -22
- package/.next/static/webpack/app/page.03ee13d215584d59.hot-update.js +0 -32
- package/.next/static/webpack/app/page.05e804a9c98d6744.hot-update.js +0 -32
- package/.next/static/webpack/app/page.09b6bf9d551718e6.hot-update.js +0 -32
- package/.next/static/webpack/app/page.1c4c3e518f810365.hot-update.js +0 -22
- package/.next/static/webpack/app/page.1dc8bb4faa862342.hot-update.js +0 -22
- package/.next/static/webpack/app/page.217f0b5265f56be2.hot-update.js +0 -22
- package/.next/static/webpack/app/page.21d00cb457913b06.hot-update.js +0 -22
- package/.next/static/webpack/app/page.28ebfaec609673ec.hot-update.js +0 -22
- package/.next/static/webpack/app/page.31b91c765347fb55.hot-update.js +0 -22
- package/.next/static/webpack/app/page.3d336feedc5241cc.hot-update.js +0 -22
- package/.next/static/webpack/app/page.3de1fe8a6a590578.hot-update.js +0 -22
- package/.next/static/webpack/app/page.511251a6a8797ede.hot-update.js +0 -21
- package/.next/static/webpack/app/page.5361cbc07110a7d3.hot-update.js +0 -22
- package/.next/static/webpack/app/page.55648f4af4cd339a.hot-update.js +0 -22
- package/.next/static/webpack/app/page.605a7773ba1d798b.hot-update.js +0 -32
- package/.next/static/webpack/app/page.60b6b08662112fd8.hot-update.js +0 -22
- package/.next/static/webpack/app/page.68289df254bc1101.hot-update.js +0 -22
- package/.next/static/webpack/app/page.6965c86e8cf1c189.hot-update.js +0 -22
- package/.next/static/webpack/app/page.6ee5f39e8d123868.hot-update.js +0 -22
- package/.next/static/webpack/app/page.79fe8ba93a0b810b.hot-update.js +0 -22
- package/.next/static/webpack/app/page.7bb361b5246e77d2.hot-update.js +0 -1436
- package/.next/static/webpack/app/page.7d5deda3951c8e99.hot-update.js +0 -22
- package/.next/static/webpack/app/page.8635c08a046e0cc3.hot-update.js +0 -22
- package/.next/static/webpack/app/page.912fdb75a65577d9.hot-update.js +0 -22
- package/.next/static/webpack/app/page.954c98691962cd98.hot-update.js +0 -22
- package/.next/static/webpack/app/page.9c321599ae8772f6.hot-update.js +0 -22
- package/.next/static/webpack/app/page.9f1faeb236a539a7.hot-update.js +0 -22
- package/.next/static/webpack/app/page.a32ac07f1f02ef92.hot-update.js +0 -22
- package/.next/static/webpack/app/page.a40ddad54b6bc90e.hot-update.js +0 -22
- package/.next/static/webpack/app/page.a81d8481ae8f1db5.hot-update.js +0 -22
- package/.next/static/webpack/app/page.a8e05348c0e655b9.hot-update.js +0 -22
- package/.next/static/webpack/app/page.b03ecf92b407ff16.hot-update.js +0 -22
- package/.next/static/webpack/app/page.cb073814fceeab04.hot-update.js +0 -22
- package/.next/static/webpack/app/page.cb900b98801a8b71.hot-update.js +0 -22
- package/.next/static/webpack/app/page.ce5481dea825fd10.hot-update.js +0 -22
- package/.next/static/webpack/app/page.dc647358f2db4ecb.hot-update.js +0 -22
- package/.next/static/webpack/app/page.df471031cb4836a9.hot-update.js +0 -22
- package/.next/static/webpack/app/page.e7d9eed4488f9850.hot-update.js +0 -22
- package/.next/static/webpack/app/page.ed88e0eaa00d7b0d.hot-update.js +0 -22
- package/.next/static/webpack/app/page.f237070410740d3e.hot-update.js +0 -22
- package/.next/static/webpack/app/page.f8210ae9a27d9415.hot-update.js +0 -22
- package/.next/static/webpack/app/page.f8cf2c2ac33a1f08.hot-update.js +0 -22
- package/.next/static/webpack/app/page.f92b6717ea88db27.hot-update.js +0 -22
- package/.next/static/webpack/app/page.fa81cc9e0039618f.hot-update.js +0 -22
- package/.next/static/webpack/app/page.facf69ec54a9c1ea.hot-update.js +0 -22
- package/.next/static/webpack/app/page.fbec410876605123.hot-update.js +0 -22
- package/.next/static/webpack/app-pages-internals.98ceb1d86c3608da.hot-update.js +0 -186
- package/.next/static/webpack/app-pages-internals.dcebba06ee4c3470.hot-update.js +0 -21
- package/.next/static/webpack/b03ecf92b407ff16.webpack.hot-update.json +0 -1
- package/.next/static/webpack/c6e67d2545c174a8.webpack.hot-update.json +0 -1
- package/.next/static/webpack/cb073814fceeab04.webpack.hot-update.json +0 -1
- package/.next/static/webpack/cb900b98801a8b71.webpack.hot-update.json +0 -1
- package/.next/static/webpack/ce5481dea825fd10.webpack.hot-update.json +0 -1
- package/.next/static/webpack/dc647358f2db4ecb.webpack.hot-update.json +0 -1
- package/.next/static/webpack/dcebba06ee4c3470.webpack.hot-update.json +0 -1
- package/.next/static/webpack/df471031cb4836a9.webpack.hot-update.json +0 -1
- package/.next/static/webpack/e7d9eed4488f9850.webpack.hot-update.json +0 -1
- package/.next/static/webpack/eb00615f06d96185.webpack.hot-update.json +0 -1
- package/.next/static/webpack/ed88e0eaa00d7b0d.webpack.hot-update.json +0 -1
- package/.next/static/webpack/f237070410740d3e.webpack.hot-update.json +0 -1
- package/.next/static/webpack/f678ffea2e9fb9a3.webpack.hot-update.json +0 -1
- package/.next/static/webpack/f8210ae9a27d9415.webpack.hot-update.json +0 -1
- package/.next/static/webpack/f8cf2c2ac33a1f08.webpack.hot-update.json +0 -1
- package/.next/static/webpack/f92b6717ea88db27.webpack.hot-update.json +0 -1
- package/.next/static/webpack/fa81cc9e0039618f.webpack.hot-update.json +0 -1
- package/.next/static/webpack/facf69ec54a9c1ea.webpack.hot-update.json +0 -1
- package/.next/static/webpack/fbec410876605123.webpack.hot-update.json +0 -1
- package/.next/static/webpack/webpack.03ee13d215584d59.hot-update.js +0 -18
- package/.next/static/webpack/webpack.09b6bf9d551718e6.hot-update.js +0 -18
- package/.next/static/webpack/webpack.19bfc21a985c41a3.hot-update.js +0 -18
- package/.next/static/webpack/webpack.1c4c3e518f810365.hot-update.js +0 -18
- package/.next/static/webpack/webpack.1dc8bb4faa862342.hot-update.js +0 -18
- package/.next/static/webpack/webpack.217f0b5265f56be2.hot-update.js +0 -18
- package/.next/static/webpack/webpack.21d00cb457913b06.hot-update.js +0 -18
- package/.next/static/webpack/webpack.255312d1130cf6ec.hot-update.js +0 -18
- package/.next/static/webpack/webpack.2813c5d79542e32e.hot-update.js +0 -18
- package/.next/static/webpack/webpack.28ebfaec609673ec.hot-update.js +0 -18
- package/.next/static/webpack/webpack.2b7d71482ca7a5b0.hot-update.js +0 -18
- package/.next/static/webpack/webpack.300fc5b668ca0906.hot-update.js +0 -18
- package/.next/static/webpack/webpack.31b91c765347fb55.hot-update.js +0 -18
- package/.next/static/webpack/webpack.32e5c09644d13662.hot-update.js +0 -18
- package/.next/static/webpack/webpack.33df40926ef177b8.hot-update.js +0 -18
- package/.next/static/webpack/webpack.343e03d8261d3d56.hot-update.js +0 -18
- package/.next/static/webpack/webpack.3d336feedc5241cc.hot-update.js +0 -18
- package/.next/static/webpack/webpack.3de1fe8a6a590578.hot-update.js +0 -18
- package/.next/static/webpack/webpack.3fffc4287d1af227.hot-update.js +0 -18
- package/.next/static/webpack/webpack.511251a6a8797ede.hot-update.js +0 -18
- package/.next/static/webpack/webpack.5361cbc07110a7d3.hot-update.js +0 -18
- package/.next/static/webpack/webpack.55648f4af4cd339a.hot-update.js +0 -18
- package/.next/static/webpack/webpack.5592a999a18ce828.hot-update.js +0 -18
- package/.next/static/webpack/webpack.5a1cff97146b50bb.hot-update.js +0 -18
- package/.next/static/webpack/webpack.605a7773ba1d798b.hot-update.js +0 -18
- package/.next/static/webpack/webpack.60b6b08662112fd8.hot-update.js +0 -18
- package/.next/static/webpack/webpack.660742a3b5333202.hot-update.js +0 -18
- package/.next/static/webpack/webpack.68289df254bc1101.hot-update.js +0 -18
- package/.next/static/webpack/webpack.6965c86e8cf1c189.hot-update.js +0 -18
- package/.next/static/webpack/webpack.6ee5f39e8d123868.hot-update.js +0 -18
- package/.next/static/webpack/webpack.77e53aa0ed10b537.hot-update.js +0 -18
- package/.next/static/webpack/webpack.79fe8ba93a0b810b.hot-update.js +0 -18
- package/.next/static/webpack/webpack.7bb361b5246e77d2.hot-update.js +0 -18
- package/.next/static/webpack/webpack.7d5deda3951c8e99.hot-update.js +0 -18
- package/.next/static/webpack/webpack.7dd58225de2c96b1.hot-update.js +0 -18
- package/.next/static/webpack/webpack.7e9ea68e1248f8c4.hot-update.js +0 -18
- package/.next/static/webpack/webpack.8635c08a046e0cc3.hot-update.js +0 -18
- package/.next/static/webpack/webpack.8b5b5419d114117b.hot-update.js +0 -18
- package/.next/static/webpack/webpack.912fdb75a65577d9.hot-update.js +0 -18
- package/.next/static/webpack/webpack.9211406c39b8c7d6.hot-update.js +0 -18
- package/.next/static/webpack/webpack.954c98691962cd98.hot-update.js +0 -18
- package/.next/static/webpack/webpack.973f3512b11e3d54.hot-update.js +0 -18
- package/.next/static/webpack/webpack.97dcbdd43d9b0185.hot-update.js +0 -18
- package/.next/static/webpack/webpack.98ceb1d86c3608da.hot-update.js +0 -18
- package/.next/static/webpack/webpack.9c321599ae8772f6.hot-update.js +0 -18
- package/.next/static/webpack/webpack.9e012937cc8b78c3.hot-update.js +0 -18
- package/.next/static/webpack/webpack.9f1faeb236a539a7.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a09fb847fbd6c830.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a32ac07f1f02ef92.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a3b2da5299326aea.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a40ddad54b6bc90e.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a495282bd4f45272.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a6280d0500ceb91c.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a81d8481ae8f1db5.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a8d577cb610891a6.hot-update.js +0 -18
- package/.next/static/webpack/webpack.a8e05348c0e655b9.hot-update.js +0 -18
- package/.next/static/webpack/webpack.b03ecf92b407ff16.hot-update.js +0 -18
- package/.next/static/webpack/webpack.c6e67d2545c174a8.hot-update.js +0 -18
- package/.next/static/webpack/webpack.cb073814fceeab04.hot-update.js +0 -18
- package/.next/static/webpack/webpack.cb900b98801a8b71.hot-update.js +0 -18
- package/.next/static/webpack/webpack.ce5481dea825fd10.hot-update.js +0 -18
- package/.next/static/webpack/webpack.dc647358f2db4ecb.hot-update.js +0 -18
- package/.next/static/webpack/webpack.dcebba06ee4c3470.hot-update.js +0 -18
- package/.next/static/webpack/webpack.df471031cb4836a9.hot-update.js +0 -18
- package/.next/static/webpack/webpack.e7d9eed4488f9850.hot-update.js +0 -18
- package/.next/static/webpack/webpack.eb00615f06d96185.hot-update.js +0 -18
- package/.next/static/webpack/webpack.ed88e0eaa00d7b0d.hot-update.js +0 -18
- package/.next/static/webpack/webpack.f237070410740d3e.hot-update.js +0 -18
- package/.next/static/webpack/webpack.f678ffea2e9fb9a3.hot-update.js +0 -18
- package/.next/static/webpack/webpack.f8210ae9a27d9415.hot-update.js +0 -18
- package/.next/static/webpack/webpack.f8cf2c2ac33a1f08.hot-update.js +0 -18
- package/.next/static/webpack/webpack.f92b6717ea88db27.hot-update.js +0 -18
- package/.next/static/webpack/webpack.fa81cc9e0039618f.hot-update.js +0 -18
- package/.next/static/webpack/webpack.facf69ec54a9c1ea.hot-update.js +0 -18
- package/.next/static/webpack/webpack.fbec410876605123.hot-update.js +0 -18
- /package/.next/static/webpack/{255312d1130cf6ec.webpack.hot-update.json → 068fbf99e4cd8b82.webpack.hot-update.json} +0 -0
@@ -10,423 +10,6 @@ exports.id = "vendor-chunks/next";
|
|
10
10
|
exports.ids = ["vendor-chunks/next"];
|
11
11
|
exports.modules = {
|
12
12
|
|
13
|
-
/***/ "./node_modules/next/dist/build/templates/helpers.js":
|
14
|
-
/*!***********************************************************!*\
|
15
|
-
!*** ./node_modules/next/dist/build/templates/helpers.js ***!
|
16
|
-
\***********************************************************/
|
17
|
-
/***/ ((__unused_webpack_module, exports) => {
|
18
|
-
|
19
|
-
"use strict";
|
20
|
-
eval("/**\n * Hoists a name from a module or promised module.\n *\n * @param module the module to hoist the name from\n * @param name the name to hoist\n * @returns the value on the module (or promised module)\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hoist\", ({\n enumerable: true,\n get: function() {\n return hoist;\n }\n}));\nfunction hoist(module, name) {\n // If the name is available in the module, return it.\n if (name in module) {\n return module[name];\n }\n // If a property called `then` exists, assume it's a promise and\n // return a promise that resolves to the name.\n if ('then' in module && typeof module.then === 'function') {\n return module.then((mod)=>hoist(mod, name));\n }\n // If we're trying to hoise the default export, and the module is a function,\n // return the module itself.\n if (typeof module === 'function' && name === 'default') {\n return module;\n }\n // Otherwise, return undefined.\n return undefined;\n}\n\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3RlbXBsYXRlcy9oZWxwZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQWlCO0FBQ2pCLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLHlDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcRGVza3RvcFxcV29ya1NwYWNlXFx0ZXN0d2lkZ2V0XFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXGJ1aWxkXFx0ZW1wbGF0ZXNcXGhlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIb2lzdHMgYSBuYW1lIGZyb20gYSBtb2R1bGUgb3IgcHJvbWlzZWQgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBtb2R1bGUgdGhlIG1vZHVsZSB0byBob2lzdCB0aGUgbmFtZSBmcm9tXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSB0byBob2lzdFxuICogQHJldHVybnMgdGhlIHZhbHVlIG9uIHRoZSBtb2R1bGUgKG9yIHByb21pc2VkIG1vZHVsZSlcbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhvaXN0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBob2lzdDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGhvaXN0KG1vZHVsZSwgbmFtZSkge1xuICAgIC8vIElmIHRoZSBuYW1lIGlzIGF2YWlsYWJsZSBpbiB0aGUgbW9kdWxlLCByZXR1cm4gaXQuXG4gICAgaWYgKG5hbWUgaW4gbW9kdWxlKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVbbmFtZV07XG4gICAgfVxuICAgIC8vIElmIGEgcHJvcGVydHkgY2FsbGVkIGB0aGVuYCBleGlzdHMsIGFzc3VtZSBpdCdzIGEgcHJvbWlzZSBhbmRcbiAgICAvLyByZXR1cm4gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5hbWUuXG4gICAgaWYgKCd0aGVuJyBpbiBtb2R1bGUgJiYgdHlwZW9mIG1vZHVsZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGUudGhlbigobW9kKT0+aG9pc3QobW9kLCBuYW1lKSk7XG4gICAgfVxuICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBob2lzZSB0aGUgZGVmYXVsdCBleHBvcnQsIGFuZCB0aGUgbW9kdWxlIGlzIGEgZnVuY3Rpb24sXG4gICAgLy8gcmV0dXJuIHRoZSBtb2R1bGUgaXRzZWxmLlxuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnZnVuY3Rpb24nICYmIG5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHJldHVybiB1bmRlZmluZWQuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/templates/helpers.js\n");
|
21
|
-
|
22
|
-
/***/ }),
|
23
|
-
|
24
|
-
/***/ "./node_modules/next/dist/pages/_app.js":
|
25
|
-
/*!**********************************************!*\
|
26
|
-
!*** ./node_modules/next/dist/pages/_app.js ***!
|
27
|
-
\**********************************************/
|
28
|
-
/***/ ((module, exports, __webpack_require__) => {
|
29
|
-
|
30
|
-
"use strict";
|
31
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return App;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"react\"));\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\n/**\n * `App` component is used for initialize of pages. It allows for overwriting and full control of the `page` initialization.\n * This allows for keeping state between navigation, custom error handling, injecting additional data.\n */ async function appGetInitialProps(param) {\n let { Component, ctx } = param;\n const pageProps = await (0, _utils.loadGetInitialProps)(Component, ctx);\n return {\n pageProps\n };\n}\nclass App extends _react.default.Component {\n render() {\n const { Component, pageProps } = this.props;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...pageProps\n });\n }\n}\nApp.origGetInitialProps = appGetInitialProps;\nApp.getInitialProps = appGetInitialProps;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_app.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19hcHAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztlQWlDcUJBOzs7Ozs0RUFqQ0g7bUNBV2tCO0FBVXBDOzs7Q0FHQyxHQUNELGVBQWVDLG1CQUFtQixLQUdyQjtJQUhxQixNQUNoQ0MsU0FBUyxFQUNUQyxHQUFHLEVBQ1EsR0FIcUI7SUFJaEMsTUFBTUMsWUFBWSxNQUFNQyxDQUFBQSxHQUFBQSxPQUFBQSxtQkFBQUEsRUFBb0JILFdBQVdDO0lBQ3ZELE9BQU87UUFBRUM7SUFBVTtBQUNyQjtBQUVlLE1BQU1KLFlBQXNDTSxPQUFBQSxPQUFLLENBQUNKLFNBQVM7SUFPeEVLLFNBQVM7UUFDUCxNQUFNLEVBQUVMLFNBQVMsRUFBRUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDSSxLQUFLO1FBRTNDLE9BQU8sV0FBUCxHQUFPLHFCQUFDTixXQUFBQTtZQUFXLEdBQUdFLFNBQVM7O0lBQ2pDO0FBQ0Y7QUFacUJKLElBSVpTLG1CQUFBQSxHQUFzQlI7QUFKVkQsSUFLWlUsZUFBQUEsR0FBa0JUIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxEZXNrdG9wXFxzcmNcXHBhZ2VzXFxfYXBwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwQ29udGV4dFR5cGUsXG4gIEFwcEluaXRpYWxQcm9wcyxcbiAgQXBwUHJvcHNUeXBlLFxuICBOZXh0V2ViVml0YWxzTWV0cmljLFxuICBBcHBUeXBlLFxufSBmcm9tICcuLi9zaGFyZWQvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXIgfSBmcm9tICcuLi9jbGllbnQvcm91dGVyJ1xuXG5pbXBvcnQgeyBsb2FkR2V0SW5pdGlhbFByb3BzIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi91dGlscydcblxuZXhwb3J0IHR5cGUgeyBBcHBJbml0aWFsUHJvcHMsIEFwcFR5cGUgfVxuXG5leHBvcnQgdHlwZSB7IE5leHRXZWJWaXRhbHNNZXRyaWMgfVxuXG5leHBvcnQgdHlwZSBBcHBDb250ZXh0ID0gQXBwQ29udGV4dFR5cGU8Um91dGVyPlxuXG5leHBvcnQgdHlwZSBBcHBQcm9wczxQID0gYW55PiA9IEFwcFByb3BzVHlwZTxSb3V0ZXIsIFA+XG5cbi8qKlxuICogYEFwcGAgY29tcG9uZW50IGlzIHVzZWQgZm9yIGluaXRpYWxpemUgb2YgcGFnZXMuIEl0IGFsbG93cyBmb3Igb3ZlcndyaXRpbmcgYW5kIGZ1bGwgY29udHJvbCBvZiB0aGUgYHBhZ2VgIGluaXRpYWxpemF0aW9uLlxuICogVGhpcyBhbGxvd3MgZm9yIGtlZXBpbmcgc3RhdGUgYmV0d2VlbiBuYXZpZ2F0aW9uLCBjdXN0b20gZXJyb3IgaGFuZGxpbmcsIGluamVjdGluZyBhZGRpdGlvbmFsIGRhdGEuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFwcEdldEluaXRpYWxQcm9wcyh7XG4gIENvbXBvbmVudCxcbiAgY3R4LFxufTogQXBwQ29udGV4dCk6IFByb21pc2U8QXBwSW5pdGlhbFByb3BzPiB7XG4gIGNvbnN0IHBhZ2VQcm9wcyA9IGF3YWl0IGxvYWRHZXRJbml0aWFsUHJvcHMoQ29tcG9uZW50LCBjdHgpXG4gIHJldHVybiB7IHBhZ2VQcm9wcyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcDxQID0gYW55LCBDUCA9IHt9LCBTID0ge30+IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBQICYgQXBwUHJvcHM8Q1A+LFxuICBTXG4+IHtcbiAgc3RhdGljIG9yaWdHZXRJbml0aWFsUHJvcHMgPSBhcHBHZXRJbml0aWFsUHJvcHNcbiAgc3RhdGljIGdldEluaXRpYWxQcm9wcyA9IGFwcEdldEluaXRpYWxQcm9wc1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IENvbXBvbmVudCwgcGFnZVByb3BzIH0gPSB0aGlzLnByb3BzIGFzIEFwcFByb3BzPENQPlxuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgey4uLnBhZ2VQcm9wc30gLz5cbiAgfVxufVxuIl0sIm5hbWVzIjpbIkFwcCIsImFwcEdldEluaXRpYWxQcm9wcyIsIkNvbXBvbmVudCIsImN0eCIsInBhZ2VQcm9wcyIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJSZWFjdCIsInJlbmRlciIsInByb3BzIiwib3JpZ0dldEluaXRpYWxQcm9wcyIsImdldEluaXRpYWxQcm9wcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_app.js\n");
|
32
|
-
|
33
|
-
/***/ }),
|
34
|
-
|
35
|
-
/***/ "./node_modules/next/dist/pages/_document.js":
|
36
|
-
/*!***************************************************!*\
|
37
|
-
!*** ./node_modules/next/dist/pages/_document.js ***!
|
38
|
-
\***************************************************/
|
39
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
40
|
-
|
41
|
-
"use strict";
|
42
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Head: function() {\n return Head;\n },\n Html: function() {\n return Html;\n },\n Main: function() {\n return Main;\n },\n NextScript: function() {\n return NextScript;\n },\n /**\n * `Document` component handles the initial `document` markup and renders only on the server side.\n * Commonly used for implementing server side rendering for `css-in-js` libraries.\n */ default: function() {\n return Document;\n }\n});\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(/*! react */ \"react\"));\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"./node_modules/next/dist/shared/lib/constants.js\");\nconst _getpagefiles = __webpack_require__(/*! ../server/get-page-files */ \"./node_modules/next/dist/server/get-page-files.js\");\nconst _htmlescape = __webpack_require__(/*! ../server/htmlescape */ \"./node_modules/next/dist/server/htmlescape.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default(__webpack_require__(/*! ../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\"));\nconst _htmlcontextsharedruntime = __webpack_require__(/*! ../shared/lib/html-context.shared-runtime */ \"./node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js\");\nconst _encodeuripath = __webpack_require__(/*! ../shared/lib/encode-uri-path */ \"./node_modules/next/dist/shared/lib/encode-uri-path.js\");\nconst _tracer = __webpack_require__(/*! ../server/lib/trace/tracer */ \"./node_modules/next/dist/server/lib/trace/tracer.js\");\nconst _utils = __webpack_require__(/*! ../server/lib/trace/utils */ \"./node_modules/next/dist/server/lib/trace/utils.js\");\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {\n __proto__: null\n };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\n/** Set of pages that have triggered a large data warning on production mode. */ const largePageDataWarnings = new Set();\nfunction getDocumentFiles(buildManifest, pathname, inAmpMode) {\n const sharedFiles = (0, _getpagefiles.getPageFiles)(buildManifest, '/_app');\n const pageFiles = true && inAmpMode ? [] : (0, _getpagefiles.getPageFiles)(buildManifest, pathname);\n return {\n sharedFiles,\n pageFiles,\n allFiles: [\n ...new Set([\n ...sharedFiles,\n ...pageFiles\n ])\n ]\n };\n}\nfunction getPolyfillScripts(context, props) {\n // polyfills.js has to be rendered as nomodule without async\n // It also has to be the first script to load\n const { assetPrefix, buildManifest, assetQueryString, disableOptimizedLoading, crossOrigin } = context;\n return buildManifest.polyfillFiles.filter((polyfill)=>polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')).map((polyfill)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n defer: !disableOptimizedLoading,\n nonce: props.nonce,\n crossOrigin: props.crossOrigin || crossOrigin,\n noModule: true,\n src: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(polyfill)}${assetQueryString}`\n }, polyfill));\n}\nfunction hasComponentProps(child) {\n return !!child && !!child.props;\n}\nfunction AmpStyles({ styles }) {\n if (!styles) return null;\n // try to parse styles from fragment for backwards compat\n const curStyles = Array.isArray(styles) ? styles : [];\n if (styles.props && // @ts-ignore Property 'props' does not exist on type ReactElement\n Array.isArray(styles.props.children)) {\n const hasStyles = (el)=>{\n var _el_props_dangerouslySetInnerHTML, _el_props;\n return el == null ? void 0 : (_el_props = el.props) == null ? void 0 : (_el_props_dangerouslySetInnerHTML = _el_props.dangerouslySetInnerHTML) == null ? void 0 : _el_props_dangerouslySetInnerHTML.__html;\n };\n // @ts-ignore Property 'props' does not exist on type ReactElement\n styles.props.children.forEach((child)=>{\n if (Array.isArray(child)) {\n child.forEach((el)=>hasStyles(el) && curStyles.push(el));\n } else if (hasStyles(child)) {\n curStyles.push(child);\n }\n });\n }\n /* Add custom styles before AMP styles to prevent accidental overrides */ return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"amp-custom\": \"\",\n dangerouslySetInnerHTML: {\n __html: curStyles.map((style)=>style.props.dangerouslySetInnerHTML.__html).join('').replace(/\\/\\*# sourceMappingURL=.*\\*\\//g, '').replace(/\\/\\*@ sourceURL=.*?\\*\\//g, '')\n }\n });\n}\nfunction getDynamicChunks(context, props, files) {\n const { dynamicImports, assetPrefix, isDevelopment, assetQueryString, disableOptimizedLoading, crossOrigin } = context;\n return dynamicImports.map((file)=>{\n if (!file.endsWith('.js') || files.allFiles.includes(file)) return null;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n async: !isDevelopment && disableOptimizedLoading,\n defer: !disableOptimizedLoading,\n src: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n nonce: props.nonce,\n crossOrigin: props.crossOrigin || crossOrigin\n }, file);\n });\n}\nfunction getScripts(context, props, files) {\n var _buildManifest_lowPriorityFiles;\n const { assetPrefix, buildManifest, isDevelopment, assetQueryString, disableOptimizedLoading, crossOrigin } = context;\n const normalScripts = files.allFiles.filter((file)=>file.endsWith('.js'));\n const lowPriorityScripts = (_buildManifest_lowPriorityFiles = buildManifest.lowPriorityFiles) == null ? void 0 : _buildManifest_lowPriorityFiles.filter((file)=>file.endsWith('.js'));\n return [\n ...normalScripts,\n ...lowPriorityScripts\n ].map((file)=>{\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n src: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n nonce: props.nonce,\n async: !isDevelopment && disableOptimizedLoading,\n defer: !disableOptimizedLoading,\n crossOrigin: props.crossOrigin || crossOrigin\n }, file);\n });\n}\nfunction getPreNextWorkerScripts(context, props) {\n const { assetPrefix, scriptLoader, crossOrigin, nextScriptWorkers } = context;\n // disable `nextScriptWorkers` in edge runtime\n if (!nextScriptWorkers || \"nodejs\" === 'edge') return null;\n try {\n let { partytownSnippet } = require('@builder.io/partytown/integration');\n const children = Array.isArray(props.children) ? props.children : [\n props.children\n ];\n // Check to see if the user has defined their own Partytown configuration\n const userDefinedConfig = children.find((child)=>{\n var _child_props_dangerouslySetInnerHTML, _child_props;\n return hasComponentProps(child) && (child == null ? void 0 : (_child_props = child.props) == null ? void 0 : (_child_props_dangerouslySetInnerHTML = _child_props.dangerouslySetInnerHTML) == null ? void 0 : _child_props_dangerouslySetInnerHTML.__html.length) && 'data-partytown-config' in child.props;\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n !userDefinedConfig && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n \"data-partytown-config\": \"\",\n dangerouslySetInnerHTML: {\n __html: `\n partytown = {\n lib: \"${assetPrefix}/_next/static/~partytown/\"\n };\n `\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n \"data-partytown\": \"\",\n dangerouslySetInnerHTML: {\n __html: partytownSnippet()\n }\n }),\n (scriptLoader.worker || []).map((file, index)=>{\n const { strategy, src, children: scriptChildren, dangerouslySetInnerHTML, ...scriptProps } = file;\n let srcProps = {};\n if (src) {\n // Use external src if provided\n srcProps.src = src;\n } else if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n // Embed inline script if provided with dangerouslySetInnerHTML\n srcProps.dangerouslySetInnerHTML = {\n __html: dangerouslySetInnerHTML.__html\n };\n } else if (scriptChildren) {\n // Embed inline script if provided with children\n srcProps.dangerouslySetInnerHTML = {\n __html: typeof scriptChildren === 'string' ? scriptChildren : Array.isArray(scriptChildren) ? scriptChildren.join('') : ''\n };\n } else {\n throw new Error('Invalid usage of next/script. Did you forget to include a src attribute or an inline script? https://nextjs.org/docs/messages/invalid-script');\n }\n return /*#__PURE__*/ (0, _react.createElement)(\"script\", {\n ...srcProps,\n ...scriptProps,\n type: \"text/partytown\",\n key: src || index,\n nonce: props.nonce,\n \"data-nscript\": \"worker\",\n crossOrigin: props.crossOrigin || crossOrigin\n });\n })\n ]\n });\n } catch (err) {\n if ((0, _iserror.default)(err) && err.code !== 'MODULE_NOT_FOUND') {\n console.warn(`Warning: ${err.message}`);\n }\n return null;\n }\n}\nfunction getPreNextScripts(context, props) {\n const { scriptLoader, disableOptimizedLoading, crossOrigin } = context;\n const webWorkerScripts = getPreNextWorkerScripts(context, props);\n const beforeInteractiveScripts = (scriptLoader.beforeInteractive || []).filter((script)=>script.src).map((file, index)=>{\n const { strategy, ...scriptProps } = file;\n return /*#__PURE__*/ (0, _react.createElement)(\"script\", {\n ...scriptProps,\n key: scriptProps.src || index,\n defer: scriptProps.defer ?? !disableOptimizedLoading,\n nonce: props.nonce,\n \"data-nscript\": \"beforeInteractive\",\n crossOrigin: props.crossOrigin || crossOrigin\n });\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n webWorkerScripts,\n beforeInteractiveScripts\n ]\n });\n}\nfunction getHeadHTMLProps(props) {\n const { crossOrigin, nonce, ...restProps } = props;\n // This assignment is necessary for additional type checking to avoid unsupported attributes in <head>\n const headProps = restProps;\n return headProps;\n}\nfunction getAmpPath(ampPath, asPath) {\n return ampPath || `${asPath}${asPath.includes('?') ? '&' : '?'}amp=1`;\n}\nfunction getNextFontLinkTags(nextFontManifest, dangerousAsPath, assetPrefix = '') {\n if (!nextFontManifest) {\n return {\n preconnect: null,\n preload: null\n };\n }\n const appFontsEntry = nextFontManifest.pages['/_app'];\n const pageFontsEntry = nextFontManifest.pages[dangerousAsPath];\n const preloadedFontFiles = Array.from(new Set([\n ...appFontsEntry ?? [],\n ...pageFontsEntry ?? []\n ]));\n // If no font files should preload but there's an entry for the path, add a preconnect tag.\n const preconnectToSelf = !!(preloadedFontFiles.length === 0 && (appFontsEntry || pageFontsEntry));\n return {\n preconnect: preconnectToSelf ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n \"data-next-font\": nextFontManifest.pagesUsingSizeAdjust ? 'size-adjust' : '',\n rel: \"preconnect\",\n href: \"/\",\n crossOrigin: \"anonymous\"\n }) : null,\n preload: preloadedFontFiles ? preloadedFontFiles.map((fontFile)=>{\n const ext = /\\.(woff|woff2|eot|ttf|otf)$/.exec(fontFile)[1];\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"preload\",\n href: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(fontFile)}`,\n as: \"font\",\n type: `font/${ext}`,\n crossOrigin: \"anonymous\",\n \"data-next-font\": fontFile.includes('-s') ? 'size-adjust' : ''\n }, fontFile);\n }) : null\n };\n}\nclass Head extends _react.default.Component {\n static #_ = this.contextType = _htmlcontextsharedruntime.HtmlContext;\n getCssLinks(files) {\n const { assetPrefix, assetQueryString, dynamicImports, crossOrigin, optimizeCss } = this.context;\n const cssFiles = files.allFiles.filter((f)=>f.endsWith('.css'));\n const sharedFiles = new Set(files.sharedFiles);\n // Unmanaged files are CSS files that will be handled directly by the\n // webpack runtime (`mini-css-extract-plugin`).\n let unmanagedFiles = new Set([]);\n let dynamicCssFiles = Array.from(new Set(dynamicImports.filter((file)=>file.endsWith('.css'))));\n if (dynamicCssFiles.length) {\n const existing = new Set(cssFiles);\n dynamicCssFiles = dynamicCssFiles.filter((f)=>!(existing.has(f) || sharedFiles.has(f)));\n unmanagedFiles = new Set(dynamicCssFiles);\n cssFiles.push(...dynamicCssFiles);\n }\n let cssLinkElements = [];\n cssFiles.forEach((file)=>{\n const isSharedFile = sharedFiles.has(file);\n if (!optimizeCss) {\n cssLinkElements.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"preload\",\n href: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n as: \"style\",\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, `${file}-preload`));\n }\n const isUnmanagedFile = unmanagedFiles.has(file);\n cssLinkElements.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"stylesheet\",\n href: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n \"data-n-g\": isUnmanagedFile ? undefined : isSharedFile ? '' : undefined,\n \"data-n-p\": isUnmanagedFile ? undefined : isSharedFile ? undefined : ''\n }, file));\n });\n return cssLinkElements.length === 0 ? null : cssLinkElements;\n }\n getPreloadDynamicChunks() {\n const { dynamicImports, assetPrefix, assetQueryString, crossOrigin } = this.context;\n return dynamicImports.map((file)=>{\n if (!file.endsWith('.js')) {\n return null;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"preload\",\n href: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n as: \"script\",\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file);\n }) // Filter out nulled scripts\n .filter(Boolean);\n }\n getPreloadMainLinks(files) {\n const { assetPrefix, assetQueryString, scriptLoader, crossOrigin } = this.context;\n const preloadFiles = files.allFiles.filter((file)=>{\n return file.endsWith('.js');\n });\n return [\n ...(scriptLoader.beforeInteractive || []).map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"preload\",\n href: file.src,\n as: \"script\",\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file.src)),\n ...preloadFiles.map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"preload\",\n href: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n as: \"script\",\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file))\n ];\n }\n getBeforeInteractiveInlineScripts() {\n const { scriptLoader } = this.context;\n const { nonce, crossOrigin } = this.props;\n return (scriptLoader.beforeInteractive || []).filter((script)=>!script.src && (script.dangerouslySetInnerHTML || script.children)).map((file, index)=>{\n const { strategy, children, dangerouslySetInnerHTML, src, ...scriptProps } = file;\n let html = '';\n if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n html = dangerouslySetInnerHTML.__html;\n } else if (children) {\n html = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n }\n return /*#__PURE__*/ (0, _react.createElement)(\"script\", {\n ...scriptProps,\n dangerouslySetInnerHTML: {\n __html: html\n },\n key: scriptProps.id || index,\n nonce: nonce,\n \"data-nscript\": \"beforeInteractive\",\n crossOrigin: crossOrigin || undefined\n });\n });\n }\n getDynamicChunks(files) {\n return getDynamicChunks(this.context, this.props, files);\n }\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props);\n }\n getScripts(files) {\n return getScripts(this.context, this.props, files);\n }\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props);\n }\n render() {\n const { styles, ampPath, inAmpMode, hybridAmp, canonicalBase, __NEXT_DATA__, dangerousAsPath, headTags, unstable_runtimeJS, unstable_JsPreload, disableOptimizedLoading, optimizeCss, assetPrefix, nextFontManifest } = this.context;\n const disableRuntimeJS = unstable_runtimeJS === false;\n const disableJsPreload = unstable_JsPreload === false || !disableOptimizedLoading;\n this.context.docComponentsRendered.Head = true;\n let { head } = this.context;\n let cssPreloads = [];\n let otherHeadElements = [];\n if (head) {\n head.forEach((child)=>{\n if (child && child.type === 'link' && child.props['rel'] === 'preload' && child.props['as'] === 'style') {\n if (this.context.strictNextHead) {\n cssPreloads.push(/*#__PURE__*/ _react.default.cloneElement(child, {\n 'data-next-head': ''\n }));\n } else {\n cssPreloads.push(child);\n }\n } else {\n if (child) {\n if (this.context.strictNextHead) {\n otherHeadElements.push(/*#__PURE__*/ _react.default.cloneElement(child, {\n 'data-next-head': ''\n }));\n } else {\n otherHeadElements.push(child);\n }\n }\n }\n });\n head = cssPreloads.concat(otherHeadElements);\n }\n let children = _react.default.Children.toArray(this.props.children).filter(Boolean);\n // show a warning if Head contains <title> (only in development)\n if (true) {\n children = _react.default.Children.map(children, (child)=>{\n var _child_props;\n const isReactHelmet = child == null ? void 0 : (_child_props = child.props) == null ? void 0 : _child_props['data-react-helmet'];\n if (!isReactHelmet) {\n var _child_props1;\n if ((child == null ? void 0 : child.type) === 'title') {\n console.warn(\"Warning: <title> should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-title\");\n } else if ((child == null ? void 0 : child.type) === 'meta' && (child == null ? void 0 : (_child_props1 = child.props) == null ? void 0 : _child_props1.name) === 'viewport') {\n console.warn(\"Warning: viewport meta tags should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-viewport-meta\");\n }\n }\n return child;\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n });\n if (this.props.crossOrigin) console.warn('Warning: `Head` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated');\n }\n let hasAmphtmlRel = false;\n let hasCanonicalRel = false;\n // show warning and remove conflicting amp head tags\n head = _react.default.Children.map(head || [], (child)=>{\n if (!child) return child;\n const { type, props } = child;\n if ( true && inAmpMode) {\n let badProp = '';\n if (type === 'meta' && props.name === 'viewport') {\n badProp = 'name=\"viewport\"';\n } else if (type === 'link' && props.rel === 'canonical') {\n hasCanonicalRel = true;\n } else if (type === 'script') {\n // only block if\n // 1. it has a src and isn't pointing to ampproject's CDN\n // 2. it is using dangerouslySetInnerHTML without a type or\n // a type of text/javascript\n if (props.src && props.src.indexOf('ampproject') < -1 || props.dangerouslySetInnerHTML && (!props.type || props.type === 'text/javascript')) {\n badProp = '<script';\n Object.keys(props).forEach((prop)=>{\n badProp += ` ${prop}=\"${props[prop]}\"`;\n });\n badProp += '/>';\n }\n }\n if (badProp) {\n console.warn(`Found conflicting amp tag \"${child.type}\" with conflicting prop ${badProp} in ${__NEXT_DATA__.page}. https://nextjs.org/docs/messages/conflicting-amp-tag`);\n return null;\n }\n } else {\n // non-amp mode\n if (type === 'link' && props.rel === 'amphtml') {\n hasAmphtmlRel = true;\n }\n }\n return child;\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n });\n const files = getDocumentFiles(this.context.buildManifest, this.context.__NEXT_DATA__.page, true && inAmpMode);\n const nextFontLinkTags = getNextFontLinkTags(nextFontManifest, dangerousAsPath, assetPrefix);\n const tracingMetadata = (0, _utils.getTracedMetadata)((0, _tracer.getTracer)().getTracePropagationData(), this.context.experimentalClientTraceMetadata);\n const traceMetaTags = (tracingMetadata || []).map(({ key, value }, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: key,\n content: value\n }, `next-trace-data-${index}`));\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"head\", {\n ...getHeadHTMLProps(this.props),\n children: [\n this.context.isDevelopment && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"data-next-hide-fouc\": true,\n \"data-ampdevmode\": true && inAmpMode ? 'true' : undefined,\n dangerouslySetInnerHTML: {\n __html: `body{display:none}`\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n \"data-next-hide-fouc\": true,\n \"data-ampdevmode\": true && inAmpMode ? 'true' : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n __html: `body{display:block}`\n }\n })\n })\n ]\n }),\n head,\n this.context.strictNextHead ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"next-head-count\",\n content: _react.default.Children.count(head || []).toString()\n }),\n children,\n nextFontLinkTags.preconnect,\n nextFontLinkTags.preload,\n true && inAmpMode && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width,minimum-scale=1,initial-scale=1\"\n }),\n !hasCanonicalRel && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"canonical\",\n href: canonicalBase + (__webpack_require__(/*! ../server/utils */ \"./node_modules/next/dist/server/utils.js\").cleanAmpPath)(dangerousAsPath)\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"preload\",\n as: \"script\",\n href: \"https://cdn.ampproject.org/v0.js\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(AmpStyles, {\n styles: styles\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"amp-boilerplate\": \"\",\n dangerouslySetInnerHTML: {\n __html: `body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}`\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"amp-boilerplate\": \"\",\n dangerouslySetInnerHTML: {\n __html: `body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}`\n }\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n async: true,\n src: \"https://cdn.ampproject.org/v0.js\"\n })\n ]\n }),\n !( true && inAmpMode) && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n !hasAmphtmlRel && hybridAmp && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"amphtml\",\n href: canonicalBase + getAmpPath(ampPath, dangerousAsPath)\n }),\n this.getBeforeInteractiveInlineScripts(),\n !optimizeCss && this.getCssLinks(files),\n !optimizeCss && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n \"data-n-css\": this.props.nonce ?? ''\n }),\n !disableRuntimeJS && !disableJsPreload && this.getPreloadDynamicChunks(),\n !disableRuntimeJS && !disableJsPreload && this.getPreloadMainLinks(files),\n !disableOptimizedLoading && !disableRuntimeJS && this.getPolyfillScripts(),\n !disableOptimizedLoading && !disableRuntimeJS && this.getPreNextScripts(),\n !disableOptimizedLoading && !disableRuntimeJS && this.getDynamicChunks(files),\n !disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files),\n optimizeCss && this.getCssLinks(files),\n optimizeCss && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n \"data-n-css\": this.props.nonce ?? ''\n }),\n this.context.isDevelopment && // this element is used to mount development styles so the\n // ordering matches production\n // (by default, style-loader injects at the bottom of <head />)\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n id: \"__next_css__DO_NOT_USE__\"\n }),\n traceMetaTags,\n styles || null\n ]\n }),\n /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, {}, ...headTags || [])\n ]\n });\n }\n}\nfunction handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props) {\n var _children_find_props, _children_find, _children_find_props1, _children_find1;\n if (!props.children) return;\n const scriptLoaderItems = [];\n const children = Array.isArray(props.children) ? props.children : [\n props.children\n ];\n const headChildren = (_children_find = children.find((child)=>child.type === Head)) == null ? void 0 : (_children_find_props = _children_find.props) == null ? void 0 : _children_find_props.children;\n const bodyChildren = (_children_find1 = children.find((child)=>child.type === 'body')) == null ? void 0 : (_children_find_props1 = _children_find1.props) == null ? void 0 : _children_find_props1.children;\n // Scripts with beforeInteractive can be placed inside Head or <body> so children of both needs to be traversed\n const combinedChildren = [\n ...Array.isArray(headChildren) ? headChildren : [\n headChildren\n ],\n ...Array.isArray(bodyChildren) ? bodyChildren : [\n bodyChildren\n ]\n ];\n _react.default.Children.forEach(combinedChildren, (child)=>{\n var _child_type;\n if (!child) return;\n // When using the `next/script` component, register it in script loader.\n if ((_child_type = child.type) == null ? void 0 : _child_type.__nextScript) {\n if (child.props.strategy === 'beforeInteractive') {\n scriptLoader.beforeInteractive = (scriptLoader.beforeInteractive || []).concat([\n {\n ...child.props\n }\n ]);\n return;\n } else if ([\n 'lazyOnload',\n 'afterInteractive',\n 'worker'\n ].includes(child.props.strategy)) {\n scriptLoaderItems.push(child.props);\n return;\n } else if (typeof child.props.strategy === 'undefined') {\n scriptLoaderItems.push({\n ...child.props,\n strategy: 'afterInteractive'\n });\n return;\n }\n }\n });\n __NEXT_DATA__.scriptLoader = scriptLoaderItems;\n}\nclass NextScript extends _react.default.Component {\n static #_ = this.contextType = _htmlcontextsharedruntime.HtmlContext;\n getDynamicChunks(files) {\n return getDynamicChunks(this.context, this.props, files);\n }\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props);\n }\n getScripts(files) {\n return getScripts(this.context, this.props, files);\n }\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props);\n }\n static getInlineScriptSource(context) {\n const { __NEXT_DATA__, largePageDataBytes } = context;\n try {\n const data = JSON.stringify(__NEXT_DATA__);\n if (largePageDataWarnings.has(__NEXT_DATA__.page)) {\n return (0, _htmlescape.htmlEscapeJsonString)(data);\n }\n const bytes = false ? 0 : Buffer.from(data).byteLength;\n const prettyBytes = (__webpack_require__(/*! ../lib/pretty-bytes */ \"./node_modules/next/dist/lib/pretty-bytes.js\")[\"default\"]);\n if (largePageDataBytes && bytes > largePageDataBytes) {\n if (false) {}\n console.warn(`Warning: data for page \"${__NEXT_DATA__.page}\"${__NEXT_DATA__.page === context.dangerousAsPath ? '' : ` (path \"${context.dangerousAsPath}\")`} is ${prettyBytes(bytes)} which exceeds the threshold of ${prettyBytes(largePageDataBytes)}, this amount of data can reduce performance.\\nSee more info here: https://nextjs.org/docs/messages/large-page-data`);\n }\n return (0, _htmlescape.htmlEscapeJsonString)(data);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.message.indexOf('circular structure') !== -1) {\n throw new Error(`Circular structure in \"getInitialProps\" result of page \"${__NEXT_DATA__.page}\". https://nextjs.org/docs/messages/circular-structure`);\n }\n throw err;\n }\n }\n render() {\n const { assetPrefix, inAmpMode, buildManifest, unstable_runtimeJS, docComponentsRendered, assetQueryString, disableOptimizedLoading, crossOrigin } = this.context;\n const disableRuntimeJS = unstable_runtimeJS === false;\n docComponentsRendered.NextScript = true;\n if ( true && inAmpMode) {\n if (false) {}\n const ampDevFiles = [\n ...buildManifest.devFiles,\n ...buildManifest.polyfillFiles,\n ...buildManifest.ampDevFiles\n ];\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n disableRuntimeJS ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n id: \"__NEXT_DATA__\",\n type: \"application/json\",\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n dangerouslySetInnerHTML: {\n __html: NextScript.getInlineScriptSource(this.context)\n },\n \"data-ampdevmode\": true\n }),\n ampDevFiles.map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n src: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n \"data-ampdevmode\": true\n }, file))\n ]\n });\n }\n if (true) {\n if (this.props.crossOrigin) console.warn('Warning: `NextScript` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated');\n }\n const files = getDocumentFiles(this.context.buildManifest, this.context.__NEXT_DATA__.page, true && inAmpMode);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n !disableRuntimeJS && buildManifest.devFiles ? buildManifest.devFiles.map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n src: `${assetPrefix}/_next/${(0, _encodeuripath.encodeURIPath)(file)}${assetQueryString}`,\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file)) : null,\n disableRuntimeJS ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n id: \"__NEXT_DATA__\",\n type: \"application/json\",\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n dangerouslySetInnerHTML: {\n __html: NextScript.getInlineScriptSource(this.context)\n }\n }),\n disableOptimizedLoading && !disableRuntimeJS && this.getPolyfillScripts(),\n disableOptimizedLoading && !disableRuntimeJS && this.getPreNextScripts(),\n disableOptimizedLoading && !disableRuntimeJS && this.getDynamicChunks(files),\n disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files)\n ]\n });\n }\n}\nfunction Html(props) {\n const { inAmpMode, docComponentsRendered, locale, scriptLoader, __NEXT_DATA__ } = (0, _htmlcontextsharedruntime.useHtmlContext)();\n docComponentsRendered.Html = true;\n handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"html\", {\n ...props,\n lang: props.lang || locale || undefined,\n amp: true && inAmpMode ? '' : undefined,\n \"data-ampdevmode\": true && inAmpMode && \"development\" !== 'production' ? '' : undefined\n });\n}\nfunction Main() {\n const { docComponentsRendered } = (0, _htmlcontextsharedruntime.useHtmlContext)();\n docComponentsRendered.Main = true;\n // @ts-ignore\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"next-js-internal-body-render-target\", {});\n}\nclass Document extends _react.default.Component {\n /**\n * `getInitialProps` hook returns the context object with the addition of `renderPage`.\n * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers\n */ static getInitialProps(ctx) {\n return ctx.defaultGetInitialProps(ctx);\n }\n render() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(Html, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Main, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(NextScript, {})\n ]\n })\n ]\n });\n }\n}\n// Add a special property to the built-in `Document` component so later we can\n// identify if a user customized `Document` is used or not.\nconst InternalFunctionDocument = function InternalFunctionDocument() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(Html, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Main, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(NextScript, {})\n ]\n })\n ]\n });\n};\nDocument[_constants.NEXT_BUILTIN_DOCUMENT] = InternalFunctionDocument; //# sourceMappingURL=_document.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19kb2N1bWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFxYWFBLElBQUk7ZUFBSkE7O0lBMnNCR0MsSUFBSTtlQUFKQTs7SUFpQ0FDLElBQUk7ZUFBSkE7O0lBN01IQyxVQUFVO2VBQVZBOztJQW9OYjs7O0NBR0MsR0FDRCxPQXNCQztlQXRCb0JDOzs7OzJFQTVwQ1c7dUNBQ007MENBV1Q7d0NBRVE7NEVBQ2pCO3NEQUtiOzJDQUV1QjtvQ0FFSjttQ0FDUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QmxDLDhFQUE4RSxHQUM5RSxNQUFNQyx3QkFBd0IsSUFBSUM7QUFFbEMsU0FBU0MsaUJBQ1BDLGFBQTRCLEVBQzVCQyxRQUFnQixFQUNoQkMsU0FBa0I7SUFFbEIsTUFBTUMsY0FBaUNDLENBQUFBLEdBQUFBLGNBQUFBLFlBQUFBLEVBQWFKLGVBQWU7SUFDbkUsTUFBTUssWUFDSkMsS0FBbUMsSUFBSUosWUFDbkMsRUFBRSxHQUNGRSxDQUFBQSxHQUFBQSxjQUFBQSxZQUFBQSxFQUFhSixlQUFlQztJQUVsQyxPQUFPO1FBQ0xFO1FBQ0FFO1FBQ0FJLFVBQVU7ZUFBSSxJQUFJWCxJQUFJO21CQUFJSzttQkFBZ0JFO2FBQVU7U0FBRTtJQUN4RDtBQUNGO0FBRUEsU0FBU0ssbUJBQW1CQyxPQUFrQixFQUFFQyxLQUFrQjtJQUNoRSw0REFBNEQ7SUFDNUQsNkNBQTZDO0lBQzdDLE1BQU0sRUFDSkMsV0FBVyxFQUNYYixhQUFhLEVBQ2JjLGdCQUFnQixFQUNoQkMsdUJBQXVCLEVBQ3ZCQyxXQUFXLEVBQ1osR0FBR0w7SUFFSixPQUFPWCxjQUFjaUIsYUFBYSxDQUMvQkMsTUFBTSxDQUNMLENBQUNDLFdBQWFBLFNBQVNDLFFBQVEsQ0FBQyxVQUFVLENBQUNELFNBQVNDLFFBQVEsQ0FBQyxlQUU5REMsR0FBRyxDQUFDLENBQUNGLFdBQ0osV0FESUEsR0FDSixx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SixxQkFBcUIsRUFBRSxHQUFHaUUsQ0FBQUEsR0FBQUEsMEJBQUFBLGNBQUFBO0lBQ2xDakUsc0JBQXNCMUosSUFBSSxHQUFHO0lBQzdCLGFBQWE7SUFDYixxQkFBTyxxQkFBQzhOLHVDQUFBQSxDQUFBQTtBQUNWO0FBTWUsTUFBTTVOLGlCQUF5QnFILE9BQUFBLE9BQUssQ0FBQ0MsU0FBUztJQUczRDs7O0dBR0MsR0FDRCxPQUFPdUcsZ0JBQWdCQyxHQUFvQixFQUFpQztRQUMxRSxPQUFPQSxJQUFJQyxzQkFBc0IsQ0FBQ0Q7SUFDcEM7SUFFQS9FLFNBQVM7UUFDUCxxQkFDRSxzQkFBQ2xKLE1BQUFBOzs4QkFDQyxxQkFBQ0QsTUFBQUEsQ0FBQUE7OEJBQ0Qsc0JBQUNvTyxRQUFBQTs7c0NBQ0MscUJBQUNsTyxNQUFBQSxDQUFBQTtzQ0FDRCxxQkFBQ0MsWUFBQUEsQ0FBQUE7Ozs7O0lBSVQ7QUFDRjtBQUVBLDhFQUE4RTtBQUM5RSwyREFBMkQ7QUFDM0QsTUFBTWtPLDJCQUNKLFNBQVNBO0lBQ1AscUJBQ0Usc0JBQUNwTyxNQUFBQTs7MEJBQ0MscUJBQUNELE1BQUFBLENBQUFBOzBCQUNELHNCQUFDb08sUUFBQUE7O2tDQUNDLHFCQUFDbE8sTUFBQUEsQ0FBQUE7a0NBQ0QscUJBQUNDLFlBQUFBLENBQUFBOzs7OztBQUlUO0FBQ0FDLFFBQWdCLENBQUNrTyxXQUFBQSxxQkFBcUIsQ0FBQyxHQUFHRCIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcRGVza3RvcFxcc3JjXFxwYWdlc1xcX2RvY3VtZW50LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IE5FWFRfQlVJTFRJTl9ET0NVTUVOVCB9IGZyb20gJy4uL3NoYXJlZC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUge1xuICBEb2N1bWVudENvbnRleHQsXG4gIERvY3VtZW50SW5pdGlhbFByb3BzLFxuICBEb2N1bWVudFByb3BzLFxuICBEb2N1bWVudFR5cGUsXG4gIE5FWFRfREFUQSxcbn0gZnJvbSAnLi4vc2hhcmVkL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2NyaXB0UHJvcHMgfSBmcm9tICcuLi9jbGllbnQvc2NyaXB0J1xuaW1wb3J0IHR5cGUgeyBOZXh0Rm9udE1hbmlmZXN0IH0gZnJvbSAnLi4vYnVpbGQvd2VicGFjay9wbHVnaW5zL25leHQtZm9udC1tYW5pZmVzdC1wbHVnaW4nXG5cbmltcG9ydCB7IGdldFBhZ2VGaWxlcyB9IGZyb20gJy4uL3NlcnZlci9nZXQtcGFnZS1maWxlcydcbmltcG9ydCB0eXBlIHsgQnVpbGRNYW5pZmVzdCB9IGZyb20gJy4uL3NlcnZlci9nZXQtcGFnZS1maWxlcydcbmltcG9ydCB7IGh0bWxFc2NhcGVKc29uU3RyaW5nIH0gZnJvbSAnLi4vc2VydmVyL2h0bWxlc2NhcGUnXG5pbXBvcnQgaXNFcnJvciBmcm9tICcuLi9saWIvaXMtZXJyb3InXG5cbmltcG9ydCB7XG4gIEh0bWxDb250ZXh0LFxuICB1c2VIdG1sQ29udGV4dCxcbn0gZnJvbSAnLi4vc2hhcmVkL2xpYi9odG1sLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IEh0bWxQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC9saWIvaHRtbC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZW5jb2RlVVJJUGF0aCB9IGZyb20gJy4uL3NoYXJlZC9saWIvZW5jb2RlLXVyaS1wYXRoJ1xuaW1wb3J0IHR5cGUgeyBEZWVwUmVhZG9ubHkgfSBmcm9tICcuLi9zaGFyZWQvbGliL2RlZXAtcmVhZG9ubHknXG5pbXBvcnQgeyBnZXRUcmFjZXIgfSBmcm9tICcuLi9zZXJ2ZXIvbGliL3RyYWNlL3RyYWNlcidcbmltcG9ydCB7IGdldFRyYWNlZE1ldGFkYXRhIH0gZnJvbSAnLi4vc2VydmVyL2xpYi90cmFjZS91dGlscydcblxuZXhwb3J0IHR5cGUgeyBEb2N1bWVudENvbnRleHQsIERvY3VtZW50SW5pdGlhbFByb3BzLCBEb2N1bWVudFByb3BzIH1cblxuZXhwb3J0IHR5cGUgT3JpZ2luUHJvcHMgPSB7XG4gIG5vbmNlPzogc3RyaW5nXG4gIGNyb3NzT3JpZ2luPzogJ2Fub255bW91cycgfCAndXNlLWNyZWRlbnRpYWxzJyB8ICcnIHwgdW5kZWZpbmVkXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG59XG5cbnR5cGUgRG9jdW1lbnRGaWxlcyA9IHtcbiAgc2hhcmVkRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdXG4gIHBhZ2VGaWxlczogcmVhZG9ubHkgc3RyaW5nW11cbiAgYWxsRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdXG59XG5cbnR5cGUgSGVhZEhUTUxQcm9wcyA9IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFxuICBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSGVhZEVsZW1lbnQ+LFxuICBIVE1MSGVhZEVsZW1lbnRcbj5cblxudHlwZSBIZWFkUHJvcHMgPSBPcmlnaW5Qcm9wcyAmIEhlYWRIVE1MUHJvcHNcblxuLyoqIFNldCBvZiBwYWdlcyB0aGF0IGhhdmUgdHJpZ2dlcmVkIGEgbGFyZ2UgZGF0YSB3YXJuaW5nIG9uIHByb2R1Y3Rpb24gbW9kZS4gKi9cbmNvbnN0IGxhcmdlUGFnZURhdGFXYXJuaW5ncyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbmZ1bmN0aW9uIGdldERvY3VtZW50RmlsZXMoXG4gIGJ1aWxkTWFuaWZlc3Q6IEJ1aWxkTWFuaWZlc3QsXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIGluQW1wTW9kZTogYm9vbGVhblxuKTogRG9jdW1lbnRGaWxlcyB7XG4gIGNvbnN0IHNoYXJlZEZpbGVzOiByZWFkb25seSBzdHJpbmdbXSA9IGdldFBhZ2VGaWxlcyhidWlsZE1hbmlmZXN0LCAnL19hcHAnKVxuICBjb25zdCBwYWdlRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdID1cbiAgICBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09ICdlZGdlJyAmJiBpbkFtcE1vZGVcbiAgICAgID8gW11cbiAgICAgIDogZ2V0UGFnZUZpbGVzKGJ1aWxkTWFuaWZlc3QsIHBhdGhuYW1lKVxuXG4gIHJldHVybiB7XG4gICAgc2hhcmVkRmlsZXMsXG4gICAgcGFnZUZpbGVzLFxuICAgIGFsbEZpbGVzOiBbLi4ubmV3IFNldChbLi4uc2hhcmVkRmlsZXMsIC4uLnBhZ2VGaWxlc10pXSxcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb2x5ZmlsbFNjcmlwdHMoY29udGV4dDogSHRtbFByb3BzLCBwcm9wczogT3JpZ2luUHJvcHMpIHtcbiAgLy8gcG9seWZpbGxzLmpzIGhhcyB0byBiZSByZW5kZXJlZCBhcyBub21vZHVsZSB3aXRob3V0IGFzeW5jXG4gIC8vIEl0IGFsc28gaGFzIHRvIGJlIHRoZSBmaXJzdCBzY3JpcHQgdG8gbG9hZFxuICBjb25zdCB7XG4gICAgYXNzZXRQcmVmaXgsXG4gICAgYnVpbGRNYW5pZmVzdCxcbiAgICBhc3NldFF1ZXJ5U3RyaW5nLFxuICAgIGRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nLFxuICAgIGNyb3NzT3JpZ2luLFxuICB9ID0gY29udGV4dFxuXG4gIHJldHVybiBidWlsZE1hbmlmZXN0LnBvbHlmaWxsRmlsZXNcbiAgICAuZmlsdGVyKFxuICAgICAgKHBvbHlmaWxsKSA9PiBwb2x5ZmlsbC5lbmRzV2l0aCgnLmpzJykgJiYgIXBvbHlmaWxsLmVuZHNXaXRoKCcubW9kdWxlLmpzJylcbiAgICApXG4gICAgLm1hcCgocG9seWZpbGwpID0+IChcbiAgICAgIDxzY3JpcHRcbiAgICAgICAga2V5PXtwb2x5ZmlsbH1cbiAgICAgICAgZGVmZXI9eyFkaXNhYmxlT3B0aW1pemVkTG9hZGluZ31cbiAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICBjcm9zc09yaWdpbj17cHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW59XG4gICAgICAgIG5vTW9kdWxlPXt0cnVlfVxuICAgICAgICBzcmM9e2Ake2Fzc2V0UHJlZml4fS9fbmV4dC8ke2VuY29kZVVSSVBhdGgoXG4gICAgICAgICAgcG9seWZpbGxcbiAgICAgICAgKX0ke2Fzc2V0UXVlcnlTdHJpbmd9YH1cbiAgICAgIC8+XG4gICAgKSlcbn1cblxuZnVuY3Rpb24gaGFzQ29tcG9uZW50UHJvcHMoY2hpbGQ6IGFueSk6IGNoaWxkIGlzIFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+IHtcbiAgcmV0dXJuICEhY2hpbGQgJiYgISFjaGlsZC5wcm9wc1xufVxuXG5mdW5jdGlvbiBBbXBTdHlsZXMoe1xuICBzdHlsZXMsXG59OiB7XG4gIHN0eWxlcz86IFJlYWN0LlJlYWN0RWxlbWVudFtdIHwgSXRlcmFibGU8UmVhY3QuUmVhY3ROb2RlPlxufSkge1xuICBpZiAoIXN0eWxlcykgcmV0dXJuIG51bGxcblxuICAvLyB0cnkgdG8gcGFyc2Ugc3R5bGVzIGZyb20gZnJhZ21lbnQgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAgY29uc3QgY3VyU3R5bGVzOiBSZWFjdC5SZWFjdEVsZW1lbnQ8YW55PltdID0gQXJyYXkuaXNBcnJheShzdHlsZXMpXG4gICAgPyAoc3R5bGVzIGFzIFJlYWN0LlJlYWN0RWxlbWVudFtdKVxuICAgIDogW11cbiAgaWYgKFxuICAgIC8vIEB0cy1pZ25vcmUgUHJvcGVydHkgJ3Byb3BzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlIFJlYWN0RWxlbWVudFxuICAgIHN0eWxlcy5wcm9wcyAmJlxuICAgIC8vIEB0cy1pZ25vcmUgUHJvcGVydHkgJ3Byb3BzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlIFJlYWN0RWxlbWVudFxuICAgIEFycmF5LmlzQXJyYXkoc3R5bGVzLnByb3BzLmNoaWxkcmVuKVxuICApIHtcbiAgICBjb25zdCBoYXNTdHlsZXMgPSAoZWw6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+KSA9PlxuICAgICAgZWw/LnByb3BzPy5kYW5nZXJvdXNseVNldElubmVySFRNTD8uX19odG1sXG4gICAgLy8gQHRzLWlnbm9yZSBQcm9wZXJ0eSAncHJvcHMnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgUmVhY3RFbGVtZW50XG4gICAgc3R5bGVzLnByb3BzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBSZWFjdC5SZWFjdEVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICBjaGlsZC5mb3JFYWNoKChlbCkgPT4gaGFzU3R5bGVzKGVsKSAmJiBjdXJTdHlsZXMucHVzaChlbCkpXG4gICAgICB9IGVsc2UgaWYgKGhhc1N0eWxlcyhjaGlsZCkpIHtcbiAgICAgICAgY3VyU3R5bGVzLnB1c2goY2hpbGQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qIEFkZCBjdXN0b20gc3R5bGVzIGJlZm9yZSBBTVAgc3R5bGVzIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBvdmVycmlkZXMgKi9cbiAgcmV0dXJuIChcbiAgICA8c3R5bGVcbiAgICAgIGFtcC1jdXN0b209XCJcIlxuICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgX19odG1sOiBjdXJTdHlsZXNcbiAgICAgICAgICAubWFwKChzdHlsZSkgPT4gc3R5bGUucHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgIC5yZXBsYWNlKC9cXC9cXCojIHNvdXJjZU1hcHBpbmdVUkw9LipcXCpcXC8vZywgJycpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcL1xcKkAgc291cmNlVVJMPS4qP1xcKlxcLy9nLCAnJyksXG4gICAgICB9fVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0RHluYW1pY0NodW5rcyhcbiAgY29udGV4dDogSHRtbFByb3BzLFxuICBwcm9wczogT3JpZ2luUHJvcHMsXG4gIGZpbGVzOiBEb2N1bWVudEZpbGVzXG4pIHtcbiAgY29uc3Qge1xuICAgIGR5bmFtaWNJbXBvcnRzLFxuICAgIGFzc2V0UHJlZml4LFxuICAgIGlzRGV2ZWxvcG1lbnQsXG4gICAgYXNzZXRRdWVyeVN0cmluZyxcbiAgICBkaXNhYmxlT3B0aW1pemVkTG9hZGluZyxcbiAgICBjcm9zc09yaWdpbixcbiAgfSA9IGNvbnRleHRcblxuICByZXR1cm4gZHluYW1pY0ltcG9ydHMubWFwKChmaWxlKSA9PiB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKCcuanMnKSB8fCBmaWxlcy5hbGxGaWxlcy5pbmNsdWRlcyhmaWxlKSkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiAoXG4gICAgICA8c2NyaXB0XG4gICAgICAgIGFzeW5jPXshaXNEZXZlbG9wbWVudCAmJiBkaXNhYmxlT3B0aW1pemVkTG9hZGluZ31cbiAgICAgICAgZGVmZXI9eyFkaXNhYmxlT3B0aW1pemVkTG9hZGluZ31cbiAgICAgICAga2V5PXtmaWxlfVxuICAgICAgICBzcmM9e2Ake2Fzc2V0UHJlZml4fS9fbmV4dC8ke2VuY29kZVVSSVBhdGgoZmlsZSl9JHthc3NldFF1ZXJ5U3RyaW5nfWB9XG4gICAgICAgIG5vbmNlPXtwcm9wcy5ub25jZX1cbiAgICAgICAgY3Jvc3NPcmlnaW49e3Byb3BzLmNyb3NzT3JpZ2luIHx8IGNyb3NzT3JpZ2lufVxuICAgICAgLz5cbiAgICApXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldFNjcmlwdHMoXG4gIGNvbnRleHQ6IEh0bWxQcm9wcyxcbiAgcHJvcHM6IE9yaWdpblByb3BzLFxuICBmaWxlczogRG9jdW1lbnRGaWxlc1xuKSB7XG4gIGNvbnN0IHtcbiAgICBhc3NldFByZWZpeCxcbiAgICBidWlsZE1hbmlmZXN0LFxuICAgIGlzRGV2ZWxvcG1lbnQsXG4gICAgYXNzZXRRdWVyeVN0cmluZyxcbiAgICBkaXNhYmxlT3B0aW1pemVkTG9hZGluZyxcbiAgICBjcm9zc09yaWdpbixcbiAgfSA9IGNvbnRleHRcblxuICBjb25zdCBub3JtYWxTY3JpcHRzID0gZmlsZXMuYWxsRmlsZXMuZmlsdGVyKChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKCcuanMnKSlcbiAgY29uc3QgbG93UHJpb3JpdHlTY3JpcHRzID0gYnVpbGRNYW5pZmVzdC5sb3dQcmlvcml0eUZpbGVzPy5maWx0ZXIoKGZpbGUpID0+XG4gICAgZmlsZS5lbmRzV2l0aCgnLmpzJylcbiAgKVxuXG4gIHJldHVybiBbLi4ubm9ybWFsU2NyaXB0cywgLi4ubG93UHJpb3JpdHlTY3JpcHRzXS5tYXAoKGZpbGUpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNjcmlwdFxuICAgICAgICBrZXk9e2ZpbGV9XG4gICAgICAgIHNyYz17YCR7YXNzZXRQcmVmaXh9L19uZXh0LyR7ZW5jb2RlVVJJUGF0aChmaWxlKX0ke2Fzc2V0UXVlcnlTdHJpbmd9YH1cbiAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICBhc3luYz17IWlzRGV2ZWxvcG1lbnQgJiYgZGlzYWJsZU9wdGltaXplZExvYWRpbmd9XG4gICAgICAgIGRlZmVyPXshZGlzYWJsZU9wdGltaXplZExvYWRpbmd9XG4gICAgICAgIGNyb3NzT3JpZ2luPXtwcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbn1cbiAgICAgIC8+XG4gICAgKVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRQcmVOZXh0V29ya2VyU2NyaXB0cyhjb250ZXh0OiBIdG1sUHJvcHMsIHByb3BzOiBPcmlnaW5Qcm9wcykge1xuICBjb25zdCB7IGFzc2V0UHJlZml4LCBzY3JpcHRMb2FkZXIsIGNyb3NzT3JpZ2luLCBuZXh0U2NyaXB0V29ya2VycyB9ID0gY29udGV4dFxuXG4gIC8vIGRpc2FibGUgYG5leHRTY3JpcHRXb3JrZXJzYCBpbiBlZGdlIHJ1bnRpbWVcbiAgaWYgKCFuZXh0U2NyaXB0V29ya2VycyB8fCBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09ICdlZGdlJykgcmV0dXJuIG51bGxcblxuICB0cnkge1xuICAgIGxldCB7XG4gICAgICBwYXJ0eXRvd25TbmlwcGV0LFxuICAgICAgLy8gQHRzLWlnbm9yZTogUHJldmVudCB3ZWJwYWNrIGZyb20gcHJvY2Vzc2luZyB0aGlzIHJlcXVpcmVcbiAgICB9ID0gX19ub25fd2VicGFja19yZXF1aXJlX18oJ0BidWlsZGVyLmlvL3BhcnR5dG93bi9pbnRlZ3JhdGlvbichKVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KHByb3BzLmNoaWxkcmVuKVxuICAgICAgPyBwcm9wcy5jaGlsZHJlblxuICAgICAgOiBbcHJvcHMuY2hpbGRyZW5dXG5cbiAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgaGFzIGRlZmluZWQgdGhlaXIgb3duIFBhcnR5dG93biBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgdXNlckRlZmluZWRDb25maWcgPSBjaGlsZHJlbi5maW5kKFxuICAgICAgKGNoaWxkKSA9PlxuICAgICAgICBoYXNDb21wb25lbnRQcm9wcyhjaGlsZCkgJiZcbiAgICAgICAgY2hpbGQ/LnByb3BzPy5kYW5nZXJvdXNseVNldElubmVySFRNTD8uX19odG1sLmxlbmd0aCAmJlxuICAgICAgICAnZGF0YS1wYXJ0eXRvd24tY29uZmlnJyBpbiBjaGlsZC5wcm9wc1xuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7IXVzZXJEZWZpbmVkQ29uZmlnICYmIChcbiAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICBkYXRhLXBhcnR5dG93bi1jb25maWc9XCJcIlxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgX19odG1sOiBgXG4gICAgICAgICAgICBwYXJ0eXRvd24gPSB7XG4gICAgICAgICAgICAgIGxpYjogXCIke2Fzc2V0UHJlZml4fS9fbmV4dC9zdGF0aWMvfnBhcnR5dG93bi9cIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICBgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgZGF0YS1wYXJ0eXRvd249XCJcIlxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IHBhcnR5dG93blNuaXBwZXQoKSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICB7KHNjcmlwdExvYWRlci53b3JrZXIgfHwgW10pLm1hcCgoZmlsZTogU2NyaXB0UHJvcHMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBzY3JpcHRDaGlsZHJlbixcbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLFxuICAgICAgICAgICAgLi4uc2NyaXB0UHJvcHNcbiAgICAgICAgICB9ID0gZmlsZVxuXG4gICAgICAgICAgbGV0IHNyY1Byb3BzOiB7XG4gICAgICAgICAgICBzcmM/OiBzdHJpbmdcbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPzogU2NyaXB0UHJvcHNbJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJ11cbiAgICAgICAgICB9ID0ge31cblxuICAgICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICAgIC8vIFVzZSBleHRlcm5hbCBzcmMgaWYgcHJvdmlkZWRcbiAgICAgICAgICAgIHNyY1Byb3BzLnNyYyA9IHNyY1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBFbWJlZCBpbmxpbmUgc2NyaXB0IGlmIHByb3ZpZGVkIHdpdGggZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcbiAgICAgICAgICAgIHNyY1Byb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0ge1xuICAgICAgICAgICAgICBfX2h0bWw6IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdENoaWxkcmVuKSB7XG4gICAgICAgICAgICAvLyBFbWJlZCBpbmxpbmUgc2NyaXB0IGlmIHByb3ZpZGVkIHdpdGggY2hpbGRyZW5cbiAgICAgICAgICAgIHNyY1Byb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0ge1xuICAgICAgICAgICAgICBfX2h0bWw6XG4gICAgICAgICAgICAgICAgdHlwZW9mIHNjcmlwdENoaWxkcmVuID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgPyBzY3JpcHRDaGlsZHJlblxuICAgICAgICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KHNjcmlwdENoaWxkcmVuKVxuICAgICAgICAgICAgICAgICAgICA/IHNjcmlwdENoaWxkcmVuLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFsaWQgdXNhZ2Ugb2YgbmV4dC9zY3JpcHQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgYSBzcmMgYXR0cmlidXRlIG9yIGFuIGlubGluZSBzY3JpcHQ/IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2ludmFsaWQtc2NyaXB0J1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgIHsuLi5zcmNQcm9wc31cbiAgICAgICAgICAgICAgey4uLnNjcmlwdFByb3BzfVxuICAgICAgICAgICAgICB0eXBlPVwidGV4dC9wYXJ0eXRvd25cIlxuICAgICAgICAgICAgICBrZXk9e3NyYyB8fCBpbmRleH1cbiAgICAgICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgICAgICBkYXRhLW5zY3JpcHQ9XCJ3b3JrZXJcIlxuICAgICAgICAgICAgICBjcm9zc09yaWdpbj17cHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChpc0Vycm9yKGVycikgJiYgZXJyLmNvZGUgIT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xuICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiAke2Vyci5tZXNzYWdlfWApXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UHJlTmV4dFNjcmlwdHMoY29udGV4dDogSHRtbFByb3BzLCBwcm9wczogT3JpZ2luUHJvcHMpIHtcbiAgY29uc3QgeyBzY3JpcHRMb2FkZXIsIGRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nLCBjcm9zc09yaWdpbiB9ID0gY29udGV4dFxuXG4gIGNvbnN0IHdlYldvcmtlclNjcmlwdHMgPSBnZXRQcmVOZXh0V29ya2VyU2NyaXB0cyhjb250ZXh0LCBwcm9wcylcblxuICBjb25zdCBiZWZvcmVJbnRlcmFjdGl2ZVNjcmlwdHMgPSAoc2NyaXB0TG9hZGVyLmJlZm9yZUludGVyYWN0aXZlIHx8IFtdKVxuICAgIC5maWx0ZXIoKHNjcmlwdCkgPT4gc2NyaXB0LnNyYylcbiAgICAubWFwKChmaWxlOiBTY3JpcHRQcm9wcywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgeyBzdHJhdGVneSwgLi4uc2NyaXB0UHJvcHMgfSA9IGZpbGVcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzY3JpcHRcbiAgICAgICAgICB7Li4uc2NyaXB0UHJvcHN9XG4gICAgICAgICAga2V5PXtzY3JpcHRQcm9wcy5zcmMgfHwgaW5kZXh9XG4gICAgICAgICAgZGVmZXI9e3NjcmlwdFByb3BzLmRlZmVyID8/ICFkaXNhYmxlT3B0aW1pemVkTG9hZGluZ31cbiAgICAgICAgICBub25jZT17cHJvcHMubm9uY2V9XG4gICAgICAgICAgZGF0YS1uc2NyaXB0PVwiYmVmb3JlSW50ZXJhY3RpdmVcIlxuICAgICAgICAgIGNyb3NzT3JpZ2luPXtwcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbn1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9KVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt3ZWJXb3JrZXJTY3JpcHRzfVxuICAgICAge2JlZm9yZUludGVyYWN0aXZlU2NyaXB0c31cbiAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRIZWFkSFRNTFByb3BzKHByb3BzOiBIZWFkUHJvcHMpIHtcbiAgY29uc3QgeyBjcm9zc09yaWdpbiwgbm9uY2UsIC4uLnJlc3RQcm9wcyB9ID0gcHJvcHNcblxuICAvLyBUaGlzIGFzc2lnbm1lbnQgaXMgbmVjZXNzYXJ5IGZvciBhZGRpdGlvbmFsIHR5cGUgY2hlY2tpbmcgdG8gYXZvaWQgdW5zdXBwb3J0ZWQgYXR0cmlidXRlcyBpbiA8aGVhZD5cbiAgY29uc3QgaGVhZFByb3BzOiBIZWFkSFRNTFByb3BzICYge1xuICAgIFtQIGluIEV4Y2x1ZGU8a2V5b2YgSGVhZFByb3BzLCBrZXlvZiBIZWFkSFRNTFByb3BzPl0/OiBuZXZlclxuICB9ID0gcmVzdFByb3BzXG5cbiAgcmV0dXJuIGhlYWRQcm9wc1xufVxuXG5mdW5jdGlvbiBnZXRBbXBQYXRoKGFtcFBhdGg6IHN0cmluZywgYXNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYW1wUGF0aCB8fCBgJHthc1BhdGh9JHthc1BhdGguaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J31hbXA9MWBcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEZvbnRMaW5rVGFncyhcbiAgbmV4dEZvbnRNYW5pZmVzdDogRGVlcFJlYWRvbmx5PE5leHRGb250TWFuaWZlc3Q+IHwgdW5kZWZpbmVkLFxuICBkYW5nZXJvdXNBc1BhdGg6IHN0cmluZyxcbiAgYXNzZXRQcmVmaXg6IHN0cmluZyA9ICcnXG4pIHtcbiAgaWYgKCFuZXh0Rm9udE1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZWNvbm5lY3Q6IG51bGwsXG4gICAgICBwcmVsb2FkOiBudWxsLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFwcEZvbnRzRW50cnkgPSBuZXh0Rm9udE1hbmlmZXN0LnBhZ2VzWycvX2FwcCddXG4gIGNvbnN0IHBhZ2VGb250c0VudHJ5ID0gbmV4dEZvbnRNYW5pZmVzdC5wYWdlc1tkYW5nZXJvdXNBc1BhdGhdXG5cbiAgY29uc3QgcHJlbG9hZGVkRm9udEZpbGVzID0gQXJyYXkuZnJvbShcbiAgICBuZXcgU2V0KFsuLi4oYXBwRm9udHNFbnRyeSA/PyBbXSksIC4uLihwYWdlRm9udHNFbnRyeSA/PyBbXSldKVxuICApXG5cbiAgLy8gSWYgbm8gZm9udCBmaWxlcyBzaG91bGQgcHJlbG9hZCBidXQgdGhlcmUncyBhbiBlbnRyeSBmb3IgdGhlIHBhdGgsIGFkZCBhIHByZWNvbm5lY3QgdGFnLlxuICBjb25zdCBwcmVjb25uZWN0VG9TZWxmID0gISEoXG4gICAgcHJlbG9hZGVkRm9udEZpbGVzLmxlbmd0aCA9PT0gMCAmJlxuICAgIChhcHBGb250c0VudHJ5IHx8IHBhZ2VGb250c0VudHJ5KVxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBwcmVjb25uZWN0OiBwcmVjb25uZWN0VG9TZWxmID8gKFxuICAgICAgPGxpbmtcbiAgICAgICAgZGF0YS1uZXh0LWZvbnQ9e1xuICAgICAgICAgIG5leHRGb250TWFuaWZlc3QucGFnZXNVc2luZ1NpemVBZGp1c3QgPyAnc2l6ZS1hZGp1c3QnIDogJydcbiAgICAgICAgfVxuICAgICAgICByZWw9XCJwcmVjb25uZWN0XCJcbiAgICAgICAgaHJlZj1cIi9cIlxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAvPlxuICAgICkgOiBudWxsLFxuICAgIHByZWxvYWQ6IHByZWxvYWRlZEZvbnRGaWxlc1xuICAgICAgPyBwcmVsb2FkZWRGb250RmlsZXMubWFwKChmb250RmlsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4dCA9IC9cXC4od29mZnx3b2ZmMnxlb3R8dHRmfG90ZikkLy5leGVjKGZvbnRGaWxlKSFbMV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGxpbmtcbiAgICAgICAgICAgICAga2V5PXtmb250RmlsZX1cbiAgICAgICAgICAgICAgcmVsPVwicHJlbG9hZFwiXG4gICAgICAgICAgICAgIGhyZWY9e2Ake2Fzc2V0UHJlZml4fS9fbmV4dC8ke2VuY29kZVVSSVBhdGgoZm9udEZpbGUpfWB9XG4gICAgICAgICAgICAgIGFzPVwiZm9udFwiXG4gICAgICAgICAgICAgIHR5cGU9e2Bmb250LyR7ZXh0fWB9XG4gICAgICAgICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgICAgICAgZGF0YS1uZXh0LWZvbnQ9e2ZvbnRGaWxlLmluY2x1ZGVzKCctcycpID8gJ3NpemUtYWRqdXN0JyA6ICcnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICA6IG51bGwsXG4gIH1cbn1cblxuLy8gVXNlIGBSZWFjdC5Db21wb25lbnRgIHRvIGF2b2lkIGVycm9ycyBmcm9tIHRoZSBSU0MgY2hlY2tzIGJlY2F1c2Vcbi8vIGl0IGNhbid0IGJlIGltcG9ydGVkIGRpcmVjdGx5IGluIFNlcnZlciBDb21wb25lbnRzOlxuLy9cbi8vICAgaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG4vL1xuLy8gTW9yZSBpbmZvOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvcHVsbC80MDY4NlxuZXhwb3J0IGNsYXNzIEhlYWQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SGVhZFByb3BzPiB7XG4gIHN0YXRpYyBjb250ZXh0VHlwZSA9IEh0bWxDb250ZXh0XG5cbiAgY29udGV4dCE6IEh0bWxQcm9wc1xuXG4gIGdldENzc0xpbmtzKGZpbGVzOiBEb2N1bWVudEZpbGVzKTogSlNYLkVsZW1lbnRbXSB8IG51bGwge1xuICAgIGNvbnN0IHtcbiAgICAgIGFzc2V0UHJlZml4LFxuICAgICAgYXNzZXRRdWVyeVN0cmluZyxcbiAgICAgIGR5bmFtaWNJbXBvcnRzLFxuICAgICAgY3Jvc3NPcmlnaW4sXG4gICAgICBvcHRpbWl6ZUNzcyxcbiAgICB9ID0gdGhpcy5jb250ZXh0XG4gICAgY29uc3QgY3NzRmlsZXMgPSBmaWxlcy5hbGxGaWxlcy5maWx0ZXIoKGYpID0+IGYuZW5kc1dpdGgoJy5jc3MnKSlcbiAgICBjb25zdCBzaGFyZWRGaWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KGZpbGVzLnNoYXJlZEZpbGVzKVxuXG4gICAgLy8gVW5tYW5hZ2VkIGZpbGVzIGFyZSBDU1MgZmlsZXMgdGhhdCB3aWxsIGJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlXG4gICAgLy8gd2VicGFjayBydW50aW1lIChgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5gKS5cbiAgICBsZXQgdW5tYW5hZ2VkRmlsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXSlcbiAgICBsZXQgZHluYW1pY0Nzc0ZpbGVzID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoZHluYW1pY0ltcG9ydHMuZmlsdGVyKChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKCcuY3NzJykpKVxuICAgIClcbiAgICBpZiAoZHluYW1pY0Nzc0ZpbGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBuZXcgU2V0KGNzc0ZpbGVzKVxuICAgICAgZHluYW1pY0Nzc0ZpbGVzID0gZHluYW1pY0Nzc0ZpbGVzLmZpbHRlcihcbiAgICAgICAgKGYpID0+ICEoZXhpc3RpbmcuaGFzKGYpIHx8IHNoYXJlZEZpbGVzLmhhcyhmKSlcbiAgICAgIClcbiAgICAgIHVubWFuYWdlZEZpbGVzID0gbmV3IFNldChkeW5hbWljQ3NzRmlsZXMpXG4gICAgICBjc3NGaWxlcy5wdXNoKC4uLmR5bmFtaWNDc3NGaWxlcylcbiAgICB9XG5cbiAgICBsZXQgY3NzTGlua0VsZW1lbnRzOiBKU1guRWxlbWVudFtdID0gW11cbiAgICBjc3NGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBpc1NoYXJlZEZpbGUgPSBzaGFyZWRGaWxlcy5oYXMoZmlsZSlcblxuICAgICAgaWYgKCFvcHRpbWl6ZUNzcykge1xuICAgICAgICBjc3NMaW5rRWxlbWVudHMucHVzaChcbiAgICAgICAgICA8bGlua1xuICAgICAgICAgICAga2V5PXtgJHtmaWxlfS1wcmVsb2FkYH1cbiAgICAgICAgICAgIG5vbmNlPXt0aGlzLnByb3BzLm5vbmNlfVxuICAgICAgICAgICAgcmVsPVwicHJlbG9hZFwiXG4gICAgICAgICAgICBocmVmPXtgJHthc3NldFByZWZpeH0vX25leHQvJHtlbmNvZGVVUklQYXRoKFxuICAgICAgICAgICAgICBmaWxlXG4gICAgICAgICAgICApfSR7YXNzZXRRdWVyeVN0cmluZ31gfVxuICAgICAgICAgICAgYXM9XCJzdHlsZVwiXG4gICAgICAgICAgICBjcm9zc09yaWdpbj17dGhpcy5wcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVW5tYW5hZ2VkRmlsZSA9IHVubWFuYWdlZEZpbGVzLmhhcyhmaWxlKVxuICAgICAgY3NzTGlua0VsZW1lbnRzLnB1c2goXG4gICAgICAgIDxsaW5rXG4gICAgICAgICAga2V5PXtmaWxlfVxuICAgICAgICAgIG5vbmNlPXt0aGlzLnByb3BzLm5vbmNlfVxuICAgICAgICAgIHJlbD1cInN0eWxlc2hlZXRcIlxuICAgICAgICAgIGhyZWY9e2Ake2Fzc2V0UHJlZml4fS9fbmV4dC8ke2VuY29kZVVSSVBhdGgoXG4gICAgICAgICAgICBmaWxlXG4gICAgICAgICAgKX0ke2Fzc2V0UXVlcnlTdHJpbmd9YH1cbiAgICAgICAgICBjcm9zc09yaWdpbj17dGhpcy5wcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbn1cbiAgICAgICAgICBkYXRhLW4tZz17aXNVbm1hbmFnZWRGaWxlID8gdW5kZWZpbmVkIDogaXNTaGFyZWRGaWxlID8gJycgOiB1bmRlZmluZWR9XG4gICAgICAgICAgZGF0YS1uLXA9e2lzVW5tYW5hZ2VkRmlsZSA/IHVuZGVmaW5lZCA6IGlzU2hhcmVkRmlsZSA/IHVuZGVmaW5lZCA6ICcnfVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH0pXG5cbiAgICByZXR1cm4gY3NzTGlua0VsZW1lbnRzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBjc3NMaW5rRWxlbWVudHNcbiAgfVxuXG4gIGdldFByZWxvYWREeW5hbWljQ2h1bmtzKCkge1xuICAgIGNvbnN0IHsgZHluYW1pY0ltcG9ydHMsIGFzc2V0UHJlZml4LCBhc3NldFF1ZXJ5U3RyaW5nLCBjcm9zc09yaWdpbiB9ID1cbiAgICAgIHRoaXMuY29udGV4dFxuXG4gICAgcmV0dXJuIChcbiAgICAgIGR5bmFtaWNJbXBvcnRzXG4gICAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICBpZiAoIWZpbGUuZW5kc1dpdGgoJy5qcycpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8bGlua1xuICAgICAgICAgICAgICByZWw9XCJwcmVsb2FkXCJcbiAgICAgICAgICAgICAga2V5PXtmaWxlfVxuICAgICAgICAgICAgICBocmVmPXtgJHthc3NldFByZWZpeH0vX25leHQvJHtlbmNvZGVVUklQYXRoKFxuICAgICAgICAgICAgICAgIGZpbGVcbiAgICAgICAgICAgICAgKX0ke2Fzc2V0UXVlcnlTdHJpbmd9YH1cbiAgICAgICAgICAgICAgYXM9XCJzY3JpcHRcIlxuICAgICAgICAgICAgICBub25jZT17dGhpcy5wcm9wcy5ub25jZX1cbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW49e3RoaXMucHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgICAgLy8gRmlsdGVyIG91dCBudWxsZWQgc2NyaXB0c1xuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgKVxuICB9XG5cbiAgZ2V0UHJlbG9hZE1haW5MaW5rcyhmaWxlczogRG9jdW1lbnRGaWxlcyk6IEpTWC5FbGVtZW50W10gfCBudWxsIHtcbiAgICBjb25zdCB7IGFzc2V0UHJlZml4LCBhc3NldFF1ZXJ5U3RyaW5nLCBzY3JpcHRMb2FkZXIsIGNyb3NzT3JpZ2luIH0gPVxuICAgICAgdGhpcy5jb250ZXh0XG4gICAgY29uc3QgcHJlbG9hZEZpbGVzID0gZmlsZXMuYWxsRmlsZXMuZmlsdGVyKChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBmaWxlLmVuZHNXaXRoKCcuanMnKVxuICAgIH0pXG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHNjcmlwdExvYWRlci5iZWZvcmVJbnRlcmFjdGl2ZSB8fCBbXSkubWFwKChmaWxlKSA9PiAoXG4gICAgICAgIDxsaW5rXG4gICAgICAgICAga2V5PXtmaWxlLnNyY31cbiAgICAgICAgICBub25jZT17dGhpcy5wcm9wcy5ub25jZX1cbiAgICAgICAgICByZWw9XCJwcmVsb2FkXCJcbiAgICAgICAgICBocmVmPXtmaWxlLnNyY31cbiAgICAgICAgICBhcz1cInNjcmlwdFwiXG4gICAgICAgICAgY3Jvc3NPcmlnaW49e3RoaXMucHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW59XG4gICAgICAgIC8+XG4gICAgICApKSxcbiAgICAgIC4uLnByZWxvYWRGaWxlcy5tYXAoKGZpbGU6IHN0cmluZykgPT4gKFxuICAgICAgICA8bGlua1xuICAgICAgICAgIGtleT17ZmlsZX1cbiAgICAgICAgICBub25jZT17dGhpcy5wcm9wcy5ub25jZX1cbiAgICAgICAgICByZWw9XCJwcmVsb2FkXCJcbiAgICAgICAgICBocmVmPXtgJHthc3NldFByZWZpeH0vX25leHQvJHtlbmNvZGVVUklQYXRoKFxuICAgICAgICAgICAgZmlsZVxuICAgICAgICAgICl9JHthc3NldFF1ZXJ5U3RyaW5nfWB9XG4gICAgICAgICAgYXM9XCJzY3JpcHRcIlxuICAgICAgICAgIGNyb3NzT3JpZ2luPXt0aGlzLnByb3BzLmNyb3NzT3JpZ2luIHx8IGNyb3NzT3JpZ2lufVxuICAgICAgICAvPlxuICAgICAgKSksXG4gICAgXVxuICB9XG5cbiAgZ2V0QmVmb3JlSW50ZXJhY3RpdmVJbmxpbmVTY3JpcHRzKCkge1xuICAgIGNvbnN0IHsgc2NyaXB0TG9hZGVyIH0gPSB0aGlzLmNvbnRleHRcbiAgICBjb25zdCB7IG5vbmNlLCBjcm9zc09yaWdpbiB9ID0gdGhpcy5wcm9wc1xuXG4gICAgcmV0dXJuIChzY3JpcHRMb2FkZXIuYmVmb3JlSW50ZXJhY3RpdmUgfHwgW10pXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc2NyaXB0KSA9PlxuICAgICAgICAgICFzY3JpcHQuc3JjICYmIChzY3JpcHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgfHwgc2NyaXB0LmNoaWxkcmVuKVxuICAgICAgKVxuICAgICAgLm1hcCgoZmlsZTogU2NyaXB0UHJvcHMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHN0cmF0ZWd5LFxuICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLFxuICAgICAgICAgIHNyYyxcbiAgICAgICAgICAuLi5zY3JpcHRQcm9wc1xuICAgICAgICB9ID0gZmlsZVxuICAgICAgICBsZXQgaHRtbDogTm9uTnVsbGFibGU8XG4gICAgICAgICAgU2NyaXB0UHJvcHNbJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJ11cbiAgICAgICAgPlsnX19odG1sJ10gPSAnJ1xuXG4gICAgICAgIGlmIChkYW5nZXJvdXNseVNldElubmVySFRNTCAmJiBkYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwpIHtcbiAgICAgICAgICBodG1sID0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sXG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICBodG1sID1cbiAgICAgICAgICAgIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgPyBjaGlsZHJlblxuICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgPyBjaGlsZHJlbi5qb2luKCcnKVxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHNjcmlwdFxuICAgICAgICAgICAgey4uLnNjcmlwdFByb3BzfVxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBodG1sIH19XG4gICAgICAgICAgICBrZXk9e3NjcmlwdFByb3BzLmlkIHx8IGluZGV4fVxuICAgICAgICAgICAgbm9uY2U9e25vbmNlfVxuICAgICAgICAgICAgZGF0YS1uc2NyaXB0PVwiYmVmb3JlSW50ZXJhY3RpdmVcIlxuICAgICAgICAgICAgY3Jvc3NPcmlnaW49e1xuICAgICAgICAgICAgICBjcm9zc09yaWdpbiB8fFxuICAgICAgICAgICAgICAocHJvY2Vzcy5lbnYuX19ORVhUX0NST1NTX09SSUdJTiBhcyB0eXBlb2YgY3Jvc3NPcmlnaW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSlcbiAgfVxuXG4gIGdldER5bmFtaWNDaHVua3MoZmlsZXM6IERvY3VtZW50RmlsZXMpIHtcbiAgICByZXR1cm4gZ2V0RHluYW1pY0NodW5rcyh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMsIGZpbGVzKVxuICB9XG5cbiAgZ2V0UHJlTmV4dFNjcmlwdHMoKSB7XG4gICAgcmV0dXJuIGdldFByZU5leHRTY3JpcHRzKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcylcbiAgfVxuXG4gIGdldFNjcmlwdHMoZmlsZXM6IERvY3VtZW50RmlsZXMpIHtcbiAgICByZXR1cm4gZ2V0U2NyaXB0cyh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMsIGZpbGVzKVxuICB9XG5cbiAgZ2V0UG9seWZpbGxTY3JpcHRzKCkge1xuICAgIHJldHVybiBnZXRQb2x5ZmlsbFNjcmlwdHModGhpcy5jb250ZXh0LCB0aGlzLnByb3BzKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0eWxlcyxcbiAgICAgIGFtcFBhdGgsXG4gICAgICBpbkFtcE1vZGUsXG4gICAgICBoeWJyaWRBbXAsXG4gICAgICBjYW5vbmljYWxCYXNlLFxuICAgICAgX19ORVhUX0RBVEFfXyxcbiAgICAgIGRhbmdlcm91c0FzUGF0aCxcbiAgICAgIGhlYWRUYWdzLFxuICAgICAgdW5zdGFibGVfcnVudGltZUpTLFxuICAgICAgdW5zdGFibGVfSnNQcmVsb2FkLFxuICAgICAgZGlzYWJsZU9wdGltaXplZExvYWRpbmcsXG4gICAgICBvcHRpbWl6ZUNzcyxcbiAgICAgIGFzc2V0UHJlZml4LFxuICAgICAgbmV4dEZvbnRNYW5pZmVzdCxcbiAgICB9ID0gdGhpcy5jb250ZXh0XG5cbiAgICBjb25zdCBkaXNhYmxlUnVudGltZUpTID0gdW5zdGFibGVfcnVudGltZUpTID09PSBmYWxzZVxuICAgIGNvbnN0IGRpc2FibGVKc1ByZWxvYWQgPVxuICAgICAgdW5zdGFibGVfSnNQcmVsb2FkID09PSBmYWxzZSB8fCAhZGlzYWJsZU9wdGltaXplZExvYWRpbmdcblxuICAgIHRoaXMuY29udGV4dC5kb2NDb21wb25lbnRzUmVuZGVyZWQuSGVhZCA9IHRydWVcblxuICAgIGxldCB7IGhlYWQgfSA9IHRoaXMuY29udGV4dFxuICAgIGxldCBjc3NQcmVsb2FkczogQXJyYXk8SlNYLkVsZW1lbnQ+ID0gW11cbiAgICBsZXQgb3RoZXJIZWFkRWxlbWVudHM6IEFycmF5PEpTWC5FbGVtZW50PiA9IFtdXG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIGhlYWQuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkICYmXG4gICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ2xpbmsnICYmXG4gICAgICAgICAgY2hpbGQucHJvcHNbJ3JlbCddID09PSAncHJlbG9hZCcgJiZcbiAgICAgICAgICBjaGlsZC5wcm9wc1snYXMnXSA9PT0gJ3N0eWxlJ1xuICAgICAgICApIHtcbiAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdE5leHRIZWFkKSB7XG4gICAgICAgICAgICBjc3NQcmVsb2Fkcy5wdXNoKFxuICAgICAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHsgJ2RhdGEtbmV4dC1oZWFkJzogJycgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3NzUHJlbG9hZHMucHVzaChjaGlsZClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdE5leHRIZWFkKSB7XG4gICAgICAgICAgICAgIG90aGVySGVhZEVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7ICdkYXRhLW5leHQtaGVhZCc6ICcnIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG90aGVySGVhZEVsZW1lbnRzLnB1c2goY2hpbGQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaGVhZCA9IGNzc1ByZWxvYWRzLmNvbmNhdChvdGhlckhlYWRFbGVtZW50cylcbiAgICB9XG4gICAgbGV0IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoXG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgKS5maWx0ZXIoQm9vbGVhbilcbiAgICAvLyBzaG93IGEgd2FybmluZyBpZiBIZWFkIGNvbnRhaW5zIDx0aXRsZT4gKG9ubHkgaW4gZGV2ZWxvcG1lbnQpXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpc1JlYWN0SGVsbWV0ID0gY2hpbGQ/LnByb3BzPy5bJ2RhdGEtcmVhY3QtaGVsbWV0J11cbiAgICAgICAgaWYgKCFpc1JlYWN0SGVsbWV0KSB7XG4gICAgICAgICAgaWYgKGNoaWxkPy50eXBlID09PSAndGl0bGUnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIFwiV2FybmluZzogPHRpdGxlPiBzaG91bGQgbm90IGJlIHVzZWQgaW4gX2RvY3VtZW50LmpzJ3MgPEhlYWQ+LiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uby1kb2N1bWVudC10aXRsZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNoaWxkPy50eXBlID09PSAnbWV0YScgJiZcbiAgICAgICAgICAgIGNoaWxkPy5wcm9wcz8ubmFtZSA9PT0gJ3ZpZXdwb3J0J1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBcIldhcm5pbmc6IHZpZXdwb3J0IG1ldGEgdGFncyBzaG91bGQgbm90IGJlIHVzZWQgaW4gX2RvY3VtZW50LmpzJ3MgPEhlYWQ+LiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uby1kb2N1bWVudC12aWV3cG9ydC1tZXRhXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICAgIC8vIEB0eXBlcy9yZWFjdCBidWcuIFJldHVybmVkIHZhbHVlIGZyb20gLm1hcCB3aWxsIG5vdCBiZSBgbnVsbGAgaWYgeW91IHBhc3MgaW4gYFtudWxsXWBcbiAgICAgIH0pIVxuICAgICAgaWYgKHRoaXMucHJvcHMuY3Jvc3NPcmlnaW4pXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnV2FybmluZzogYEhlYWRgIGF0dHJpYnV0ZSBgY3Jvc3NPcmlnaW5gIGlzIGRlcHJlY2F0ZWQuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2RvYy1jcm9zc29yaWdpbi1kZXByZWNhdGVkJ1xuICAgICAgICApXG4gICAgfVxuXG4gICAgbGV0IGhhc0FtcGh0bWxSZWwgPSBmYWxzZVxuICAgIGxldCBoYXNDYW5vbmljYWxSZWwgPSBmYWxzZVxuXG4gICAgLy8gc2hvdyB3YXJuaW5nIGFuZCByZW1vdmUgY29uZmxpY3RpbmcgYW1wIGhlYWQgdGFnc1xuICAgIGhlYWQgPSBSZWFjdC5DaGlsZHJlbi5tYXAoaGVhZCB8fCBbXSwgKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoIWNoaWxkKSByZXR1cm4gY2hpbGRcbiAgICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMgfSA9IGNoaWxkXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZScgJiYgaW5BbXBNb2RlKSB7XG4gICAgICAgIGxldCBiYWRQcm9wOiBzdHJpbmcgPSAnJ1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnbWV0YScgJiYgcHJvcHMubmFtZSA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgICAgICAgIGJhZFByb3AgPSAnbmFtZT1cInZpZXdwb3J0XCInXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xpbmsnICYmIHByb3BzLnJlbCA9PT0gJ2Nhbm9uaWNhbCcpIHtcbiAgICAgICAgICBoYXNDYW5vbmljYWxSZWwgPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgICAvLyBvbmx5IGJsb2NrIGlmXG4gICAgICAgICAgLy8gMS4gaXQgaGFzIGEgc3JjIGFuZCBpc24ndCBwb2ludGluZyB0byBhbXBwcm9qZWN0J3MgQ0ROXG4gICAgICAgICAgLy8gMi4gaXQgaXMgdXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgd2l0aG91dCBhIHR5cGUgb3JcbiAgICAgICAgICAvLyBhIHR5cGUgb2YgdGV4dC9qYXZhc2NyaXB0XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHByb3BzLnNyYyAmJiBwcm9wcy5zcmMuaW5kZXhPZignYW1wcHJvamVjdCcpIDwgLTEpIHx8XG4gICAgICAgICAgICAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgJiZcbiAgICAgICAgICAgICAgKCFwcm9wcy50eXBlIHx8IHByb3BzLnR5cGUgPT09ICd0ZXh0L2phdmFzY3JpcHQnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGJhZFByb3AgPSAnPHNjcmlwdCdcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICAgIGJhZFByb3AgKz0gYCAke3Byb3B9PVwiJHtwcm9wc1twcm9wXX1cImBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBiYWRQcm9wICs9ICcvPidcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFkUHJvcCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBGb3VuZCBjb25mbGljdGluZyBhbXAgdGFnIFwiJHtjaGlsZC50eXBlfVwiIHdpdGggY29uZmxpY3RpbmcgcHJvcCAke2JhZFByb3B9IGluICR7X19ORVhUX0RBVEFfXy5wYWdlfS4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvY29uZmxpY3RpbmctYW1wLXRhZ2BcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWFtcCBtb2RlXG4gICAgICAgIGlmICh0eXBlID09PSAnbGluaycgJiYgcHJvcHMucmVsID09PSAnYW1waHRtbCcpIHtcbiAgICAgICAgICBoYXNBbXBodG1sUmVsID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hpbGRcbiAgICAgIC8vIEB0eXBlcy9yZWFjdCBidWcuIFJldHVybmVkIHZhbHVlIGZyb20gLm1hcCB3aWxsIG5vdCBiZSBgbnVsbGAgaWYgeW91IHBhc3MgaW4gYFtudWxsXWBcbiAgICB9KSFcblxuICAgIGNvbnN0IGZpbGVzOiBEb2N1bWVudEZpbGVzID0gZ2V0RG9jdW1lbnRGaWxlcyhcbiAgICAgIHRoaXMuY29udGV4dC5idWlsZE1hbmlmZXN0LFxuICAgICAgdGhpcy5jb250ZXh0Ll9fTkVYVF9EQVRBX18ucGFnZSxcbiAgICAgIHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gJ2VkZ2UnICYmIGluQW1wTW9kZVxuICAgIClcblxuICAgIGNvbnN0IG5leHRGb250TGlua1RhZ3MgPSBnZXROZXh0Rm9udExpbmtUYWdzKFxuICAgICAgbmV4dEZvbnRNYW5pZmVzdCxcbiAgICAgIGRhbmdlcm91c0FzUGF0aCxcbiAgICAgIGFzc2V0UHJlZml4XG4gICAgKVxuXG4gICAgY29uc3QgdHJhY2luZ01ldGFkYXRhID0gZ2V0VHJhY2VkTWV0YWRhdGEoXG4gICAgICBnZXRUcmFjZXIoKS5nZXRUcmFjZVByb3BhZ2F0aW9uRGF0YSgpLFxuICAgICAgdGhpcy5jb250ZXh0LmV4cGVyaW1lbnRhbENsaWVudFRyYWNlTWV0YWRhdGFcbiAgICApXG5cbiAgICBjb25zdCB0cmFjZU1ldGFUYWdzID0gKHRyYWNpbmdNZXRhZGF0YSB8fCBbXSkubWFwKFxuICAgICAgKHsga2V5LCB2YWx1ZSB9LCBpbmRleCkgPT4gKFxuICAgICAgICA8bWV0YSBrZXk9e2BuZXh0LXRyYWNlLWRhdGEtJHtpbmRleH1gfSBuYW1lPXtrZXl9IGNvbnRlbnQ9e3ZhbHVlfSAvPlxuICAgICAgKVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8aGVhZCB7Li4uZ2V0SGVhZEhUTUxQcm9wcyh0aGlzLnByb3BzKX0+XG4gICAgICAgIHt0aGlzLmNvbnRleHQuaXNEZXZlbG9wbWVudCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxzdHlsZVxuICAgICAgICAgICAgICBkYXRhLW5leHQtaGlkZS1mb3VjXG4gICAgICAgICAgICAgIGRhdGEtYW1wZGV2bW9kZT17XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZScgJiYgaW5BbXBNb2RlXG4gICAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogYGJvZHl7ZGlzcGxheTpub25lfWAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5vc2NyaXB0XG4gICAgICAgICAgICAgIGRhdGEtbmV4dC1oaWRlLWZvdWNcbiAgICAgICAgICAgICAgZGF0YS1hbXBkZXZtb2RlPXtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09ICdlZGdlJyAmJiBpbkFtcE1vZGVcbiAgICAgICAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdHlsZVxuICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgICBfX2h0bWw6IGBib2R5e2Rpc3BsYXk6YmxvY2t9YCxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9ub3NjcmlwdD5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge2hlYWR9XG4gICAgICAgIHt0aGlzLmNvbnRleHQuc3RyaWN0TmV4dEhlYWQgPyBudWxsIDogKFxuICAgICAgICAgIDxtZXRhXG4gICAgICAgICAgICBuYW1lPVwibmV4dC1oZWFkLWNvdW50XCJcbiAgICAgICAgICAgIGNvbnRlbnQ9e1JlYWN0LkNoaWxkcmVuLmNvdW50KGhlYWQgfHwgW10pLnRvU3RyaW5nKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7Y2hpbGRyZW59XG5cbiAgICAgICAge25leHRGb250TGlua1RhZ3MucHJlY29ubmVjdH1cbiAgICAgICAge25leHRGb250TGlua1RhZ3MucHJlbG9hZH1cblxuICAgICAgICB7cHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZScgJiYgaW5BbXBNb2RlICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPG1ldGFcbiAgICAgICAgICAgICAgbmFtZT1cInZpZXdwb3J0XCJcbiAgICAgICAgICAgICAgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCxtaW5pbXVtLXNjYWxlPTEsaW5pdGlhbC1zY2FsZT0xXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IWhhc0Nhbm9uaWNhbFJlbCAmJiAoXG4gICAgICAgICAgICAgIDxsaW5rXG4gICAgICAgICAgICAgICAgcmVsPVwiY2Fub25pY2FsXCJcbiAgICAgICAgICAgICAgICBocmVmPXtcbiAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbEJhc2UgK1xuICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi4vc2VydmVyL3V0aWxzJykuY2xlYW5BbXBQYXRoKGRhbmdlcm91c0FzUGF0aClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgey8qIGh0dHBzOi8vd3d3LmFtcHByb2plY3Qub3JnL2RvY3MvZnVuZGFtZW50YWxzL29wdGltaXplX2FtcCNvcHRpbWl6ZS10aGUtYW1wLXJ1bnRpbWUtbG9hZGluZyAqL31cbiAgICAgICAgICAgIDxsaW5rXG4gICAgICAgICAgICAgIHJlbD1cInByZWxvYWRcIlxuICAgICAgICAgICAgICBhcz1cInNjcmlwdFwiXG4gICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2Nkbi5hbXBwcm9qZWN0Lm9yZy92MC5qc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEFtcFN0eWxlcyBzdHlsZXM9e3N0eWxlc30gLz5cbiAgICAgICAgICAgIDxzdHlsZVxuICAgICAgICAgICAgICBhbXAtYm9pbGVycGxhdGU9XCJcIlxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogYGJvZHl7LXdlYmtpdC1hbmltYXRpb246LWFtcC1zdGFydCA4cyBzdGVwcygxLGVuZCkgMHMgMSBub3JtYWwgYm90aDstbW96LWFuaW1hdGlvbjotYW1wLXN0YXJ0IDhzIHN0ZXBzKDEsZW5kKSAwcyAxIG5vcm1hbCBib3RoOy1tcy1hbmltYXRpb246LWFtcC1zdGFydCA4cyBzdGVwcygxLGVuZCkgMHMgMSBub3JtYWwgYm90aDthbmltYXRpb246LWFtcC1zdGFydCA4cyBzdGVwcygxLGVuZCkgMHMgMSBub3JtYWwgYm90aH1ALXdlYmtpdC1rZXlmcmFtZXMgLWFtcC1zdGFydHtmcm9te3Zpc2liaWxpdHk6aGlkZGVufXRve3Zpc2liaWxpdHk6dmlzaWJsZX19QC1tb3ota2V5ZnJhbWVzIC1hbXAtc3RhcnR7ZnJvbXt2aXNpYmlsaXR5OmhpZGRlbn10b3t2aXNpYmlsaXR5OnZpc2libGV9fUAtbXMta2V5ZnJhbWVzIC1hbXAtc3RhcnR7ZnJvbXt2aXNpYmlsaXR5OmhpZGRlbn10b3t2aXNpYmlsaXR5OnZpc2libGV9fUAtby1rZXlmcmFtZXMgLWFtcC1zdGFydHtmcm9te3Zpc2liaWxpdHk6aGlkZGVufXRve3Zpc2liaWxpdHk6dmlzaWJsZX19QGtleWZyYW1lcyAtYW1wLXN0YXJ0e2Zyb217dmlzaWJpbGl0eTpoaWRkZW59dG97dmlzaWJpbGl0eTp2aXNpYmxlfX1gLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxub3NjcmlwdD5cbiAgICAgICAgICAgICAgPHN0eWxlXG4gICAgICAgICAgICAgICAgYW1wLWJvaWxlcnBsYXRlPVwiXCJcbiAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgICAgX19odG1sOiBgYm9keXstd2Via2l0LWFuaW1hdGlvbjpub25lOy1tb3otYW5pbWF0aW9uOm5vbmU7LW1zLWFuaW1hdGlvbjpub25lO2FuaW1hdGlvbjpub25lfWAsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbm9zY3JpcHQ+XG4gICAgICAgICAgICA8c2NyaXB0IGFzeW5jIHNyYz1cImh0dHBzOi8vY2RuLmFtcHByb2plY3Qub3JnL3YwLmpzXCIgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAgeyEocHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZScgJiYgaW5BbXBNb2RlKSAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHshaGFzQW1waHRtbFJlbCAmJiBoeWJyaWRBbXAgJiYgKFxuICAgICAgICAgICAgICA8bGlua1xuICAgICAgICAgICAgICAgIHJlbD1cImFtcGh0bWxcIlxuICAgICAgICAgICAgICAgIGhyZWY9e2Nhbm9uaWNhbEJhc2UgKyBnZXRBbXBQYXRoKGFtcFBhdGgsIGRhbmdlcm91c0FzUGF0aCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3RoaXMuZ2V0QmVmb3JlSW50ZXJhY3RpdmVJbmxpbmVTY3JpcHRzKCl9XG4gICAgICAgICAgICB7IW9wdGltaXplQ3NzICYmIHRoaXMuZ2V0Q3NzTGlua3MoZmlsZXMpfVxuICAgICAgICAgICAgeyFvcHRpbWl6ZUNzcyAmJiA8bm9zY3JpcHQgZGF0YS1uLWNzcz17dGhpcy5wcm9wcy5ub25jZSA/PyAnJ30gLz59XG5cbiAgICAgICAgICAgIHshZGlzYWJsZVJ1bnRpbWVKUyAmJlxuICAgICAgICAgICAgICAhZGlzYWJsZUpzUHJlbG9hZCAmJlxuICAgICAgICAgICAgICB0aGlzLmdldFByZWxvYWREeW5hbWljQ2h1bmtzKCl9XG4gICAgICAgICAgICB7IWRpc2FibGVSdW50aW1lSlMgJiZcbiAgICAgICAgICAgICAgIWRpc2FibGVKc1ByZWxvYWQgJiZcbiAgICAgICAgICAgICAgdGhpcy5nZXRQcmVsb2FkTWFpbkxpbmtzKGZpbGVzKX1cblxuICAgICAgICAgICAgeyFkaXNhYmxlT3B0aW1pemVkTG9hZGluZyAmJlxuICAgICAgICAgICAgICAhZGlzYWJsZVJ1bnRpbWVKUyAmJlxuICAgICAgICAgICAgICB0aGlzLmdldFBvbHlmaWxsU2NyaXB0cygpfVxuXG4gICAgICAgICAgICB7IWRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nICYmXG4gICAgICAgICAgICAgICFkaXNhYmxlUnVudGltZUpTICYmXG4gICAgICAgICAgICAgIHRoaXMuZ2V0UHJlTmV4dFNjcmlwdHMoKX1cbiAgICAgICAgICAgIHshZGlzYWJsZU9wdGltaXplZExvYWRpbmcgJiZcbiAgICAgICAgICAgICAgIWRpc2FibGVSdW50aW1lSlMgJiZcbiAgICAgICAgICAgICAgdGhpcy5nZXREeW5hbWljQ2h1bmtzKGZpbGVzKX1cbiAgICAgICAgICAgIHshZGlzYWJsZU9wdGltaXplZExvYWRpbmcgJiZcbiAgICAgICAgICAgICAgIWRpc2FibGVSdW50aW1lSlMgJiZcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY3JpcHRzKGZpbGVzKX1cblxuICAgICAgICAgICAge29wdGltaXplQ3NzICYmIHRoaXMuZ2V0Q3NzTGlua3MoZmlsZXMpfVxuICAgICAgICAgICAge29wdGltaXplQ3NzICYmIDxub3NjcmlwdCBkYXRhLW4tY3NzPXt0aGlzLnByb3BzLm5vbmNlID8/ICcnfSAvPn1cbiAgICAgICAgICAgIHt0aGlzLmNvbnRleHQuaXNEZXZlbG9wbWVudCAmJiAoXG4gICAgICAgICAgICAgIC8vIHRoaXMgZWxlbWVudCBpcyB1c2VkIHRvIG1vdW50IGRldmVsb3BtZW50IHN0eWxlcyBzbyB0aGVcbiAgICAgICAgICAgICAgLy8gb3JkZXJpbmcgbWF0Y2hlcyBwcm9kdWN0aW9uXG4gICAgICAgICAgICAgIC8vIChieSBkZWZhdWx0LCBzdHlsZS1sb2FkZXIgaW5qZWN0cyBhdCB0aGUgYm90dG9tIG9mIDxoZWFkIC8+KVxuICAgICAgICAgICAgICA8bm9zY3JpcHQgaWQ9XCJfX25leHRfY3NzX19ET19OT1RfVVNFX19cIiAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHt0cmFjZU1ldGFUYWdzfVxuICAgICAgICAgICAge3N0eWxlcyB8fCBudWxsfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwge30sIC4uLihoZWFkVGFncyB8fCBbXSkpfVxuICAgICAgPC9oZWFkPlxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVEb2N1bWVudFNjcmlwdExvYWRlckl0ZW1zKFxuICBzY3JpcHRMb2FkZXI6IHsgYmVmb3JlSW50ZXJhY3RpdmU/OiBhbnlbXSB9LFxuICBfX05FWFRfREFUQV9fOiBORVhUX0RBVEEsXG4gIHByb3BzOiBhbnlcbik6IHZvaWQge1xuICBpZiAoIXByb3BzLmNoaWxkcmVuKSByZXR1cm5cblxuICBjb25zdCBzY3JpcHRMb2FkZXJJdGVtczogU2NyaXB0UHJvcHNbXSA9IFtdXG5cbiAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KHByb3BzLmNoaWxkcmVuKVxuICAgID8gcHJvcHMuY2hpbGRyZW5cbiAgICA6IFtwcm9wcy5jaGlsZHJlbl1cblxuICBjb25zdCBoZWFkQ2hpbGRyZW4gPSBjaGlsZHJlbi5maW5kKFxuICAgIChjaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50KSA9PiBjaGlsZC50eXBlID09PSBIZWFkXG4gICk/LnByb3BzPy5jaGlsZHJlblxuICBjb25zdCBib2R5Q2hpbGRyZW4gPSBjaGlsZHJlbi5maW5kKFxuICAgIChjaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50KSA9PiBjaGlsZC50eXBlID09PSAnYm9keSdcbiAgKT8ucHJvcHM/LmNoaWxkcmVuXG5cbiAgLy8gU2NyaXB0cyB3aXRoIGJlZm9yZUludGVyYWN0aXZlIGNhbiBiZSBwbGFjZWQgaW5zaWRlIEhlYWQgb3IgPGJvZHk+IHNvIGNoaWxkcmVuIG9mIGJvdGggbmVlZHMgdG8gYmUgdHJhdmVyc2VkXG4gIGNvbnN0IGNvbWJpbmVkQ2hpbGRyZW4gPSBbXG4gICAgLi4uKEFycmF5LmlzQXJyYXkoaGVhZENoaWxkcmVuKSA/IGhlYWRDaGlsZHJlbiA6IFtoZWFkQ2hpbGRyZW5dKSxcbiAgICAuLi4oQXJyYXkuaXNBcnJheShib2R5Q2hpbGRyZW4pID8gYm9keUNoaWxkcmVuIDogW2JvZHlDaGlsZHJlbl0pLFxuICBdXG5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjb21iaW5lZENoaWxkcmVuLCAoY2hpbGQ6IGFueSkgPT4ge1xuICAgIGlmICghY2hpbGQpIHJldHVyblxuXG4gICAgLy8gV2hlbiB1c2luZyB0aGUgYG5leHQvc2NyaXB0YCBjb21wb25lbnQsIHJlZ2lzdGVyIGl0IGluIHNjcmlwdCBsb2FkZXIuXG4gICAgaWYgKGNoaWxkLnR5cGU/Ll9fbmV4dFNjcmlwdCkge1xuICAgICAgaWYgKGNoaWxkLnByb3BzLnN0cmF0ZWd5ID09PSAnYmVmb3JlSW50ZXJhY3RpdmUnKSB7XG4gICAgICAgIHNjcmlwdExvYWRlci5iZWZvcmVJbnRlcmFjdGl2ZSA9IChcbiAgICAgICAgICBzY3JpcHRMb2FkZXIuYmVmb3JlSW50ZXJhY3RpdmUgfHwgW11cbiAgICAgICAgKS5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmNoaWxkLnByb3BzLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pXG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgWydsYXp5T25sb2FkJywgJ2FmdGVySW50ZXJhY3RpdmUnLCAnd29ya2VyJ10uaW5jbHVkZXMoXG4gICAgICAgICAgY2hpbGQucHJvcHMuc3RyYXRlZ3lcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHNjcmlwdExvYWRlckl0ZW1zLnB1c2goY2hpbGQucHJvcHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY2hpbGQucHJvcHMuc3RyYXRlZ3kgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNjcmlwdExvYWRlckl0ZW1zLnB1c2goeyAuLi5jaGlsZC5wcm9wcywgc3RyYXRlZ3k6ICdhZnRlckludGVyYWN0aXZlJyB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgX19ORVhUX0RBVEFfXy5zY3JpcHRMb2FkZXIgPSBzY3JpcHRMb2FkZXJJdGVtc1xufVxuXG5leHBvcnQgY2xhc3MgTmV4dFNjcmlwdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxPcmlnaW5Qcm9wcz4ge1xuICBzdGF0aWMgY29udGV4dFR5cGUgPSBIdG1sQ29udGV4dFxuXG4gIGNvbnRleHQhOiBIdG1sUHJvcHNcblxuICBnZXREeW5hbWljQ2h1bmtzKGZpbGVzOiBEb2N1bWVudEZpbGVzKSB7XG4gICAgcmV0dXJuIGdldER5bmFtaWNDaHVua3ModGhpcy5jb250ZXh0LCB0aGlzLnByb3BzLCBmaWxlcylcbiAgfVxuXG4gIGdldFByZU5leHRTY3JpcHRzKCkge1xuICAgIHJldHVybiBnZXRQcmVOZXh0U2NyaXB0cyh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMpXG4gIH1cblxuICBnZXRTY3JpcHRzKGZpbGVzOiBEb2N1bWVudEZpbGVzKSB7XG4gICAgcmV0dXJuIGdldFNjcmlwdHModGhpcy5jb250ZXh0LCB0aGlzLnByb3BzLCBmaWxlcylcbiAgfVxuXG4gIGdldFBvbHlmaWxsU2NyaXB0cygpIHtcbiAgICByZXR1cm4gZ2V0UG9seWZpbGxTY3JpcHRzKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcylcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbmxpbmVTY3JpcHRTb3VyY2UoY29udGV4dDogUmVhZG9ubHk8SHRtbFByb3BzPik6IHN0cmluZyB7XG4gICAgY29uc3QgeyBfX05FWFRfREFUQV9fLCBsYXJnZVBhZ2VEYXRhQnl0ZXMgfSA9IGNvbnRleHRcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KF9fTkVYVF9EQVRBX18pXG5cbiAgICAgIGlmIChsYXJnZVBhZ2VEYXRhV2FybmluZ3MuaGFzKF9fTkVYVF9EQVRBX18ucGFnZSkpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxFc2NhcGVKc29uU3RyaW5nKGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ5dGVzID1cbiAgICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSAnZWRnZSdcbiAgICAgICAgICA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKS5idWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIDogQnVmZmVyLmZyb20oZGF0YSkuYnl0ZUxlbmd0aFxuICAgICAgY29uc3QgcHJldHR5Qnl0ZXMgPSByZXF1aXJlKCcuLi9saWIvcHJldHR5LWJ5dGVzJykuZGVmYXVsdFxuXG4gICAgICBpZiAobGFyZ2VQYWdlRGF0YUJ5dGVzICYmIGJ5dGVzID4gbGFyZ2VQYWdlRGF0YUJ5dGVzKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgbGFyZ2VQYWdlRGF0YVdhcm5pbmdzLmFkZChfX05FWFRfREFUQV9fLnBhZ2UpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFdhcm5pbmc6IGRhdGEgZm9yIHBhZ2UgXCIke19fTkVYVF9EQVRBX18ucGFnZX1cIiR7XG4gICAgICAgICAgICBfX05FWFRfREFUQV9fLnBhZ2UgPT09IGNvbnRleHQuZGFuZ2Vyb3VzQXNQYXRoXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiBgIChwYXRoIFwiJHtjb250ZXh0LmRhbmdlcm91c0FzUGF0aH1cIilgXG4gICAgICAgICAgfSBpcyAke3ByZXR0eUJ5dGVzKFxuICAgICAgICAgICAgYnl0ZXNcbiAgICAgICAgICApfSB3aGljaCBleGNlZWRzIHRoZSB0aHJlc2hvbGQgb2YgJHtwcmV0dHlCeXRlcyhcbiAgICAgICAgICAgIGxhcmdlUGFnZURhdGFCeXRlc1xuICAgICAgICAgICl9LCB0aGlzIGFtb3VudCBvZiBkYXRhIGNhbiByZWR1Y2UgcGVyZm9ybWFuY2UuXFxuU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9sYXJnZS1wYWdlLWRhdGFgXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGh0bWxFc2NhcGVKc29uU3RyaW5nKGRhdGEpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmIGVyci5tZXNzYWdlLmluZGV4T2YoJ2NpcmN1bGFyIHN0cnVjdHVyZScpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENpcmN1bGFyIHN0cnVjdHVyZSBpbiBcImdldEluaXRpYWxQcm9wc1wiIHJlc3VsdCBvZiBwYWdlIFwiJHtfX05FWFRfREFUQV9fLnBhZ2V9XCIuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2NpcmN1bGFyLXN0cnVjdHVyZWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFzc2V0UHJlZml4LFxuICAgICAgaW5BbXBNb2RlLFxuICAgICAgYnVpbGRNYW5pZmVzdCxcbiAgICAgIHVuc3RhYmxlX3J1bnRpbWVKUyxcbiAgICAgIGRvY0NvbXBvbmVudHNSZW5kZXJlZCxcbiAgICAgIGFzc2V0UXVlcnlTdHJpbmcsXG4gICAgICBkaXNhYmxlT3B0aW1pemVkTG9hZGluZyxcbiAgICAgIGNyb3NzT3JpZ2luLFxuICAgIH0gPSB0aGlzLmNvbnRleHRcbiAgICBjb25zdCBkaXNhYmxlUnVudGltZUpTID0gdW5zdGFibGVfcnVudGltZUpTID09PSBmYWxzZVxuXG4gICAgZG9jQ29tcG9uZW50c1JlbmRlcmVkLk5leHRTY3JpcHQgPSB0cnVlXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZScgJiYgaW5BbXBNb2RlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgY29uc3QgYW1wRGV2RmlsZXMgPSBbXG4gICAgICAgIC4uLmJ1aWxkTWFuaWZlc3QuZGV2RmlsZXMsXG4gICAgICAgIC4uLmJ1aWxkTWFuaWZlc3QucG9seWZpbGxGaWxlcyxcbiAgICAgICAgLi4uYnVpbGRNYW5pZmVzdC5hbXBEZXZGaWxlcyxcbiAgICAgIF1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7ZGlzYWJsZVJ1bnRpbWVKUyA/IG51bGwgOiAoXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgIGlkPVwiX19ORVhUX0RBVEFfX1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgICAgbm9uY2U9e3RoaXMucHJvcHMubm9uY2V9XG4gICAgICAgICAgICAgIGNyb3NzT3JpZ2luPXt0aGlzLnByb3BzLmNyb3NzT3JpZ2luIHx8IGNyb3NzT3JpZ2lufVxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogTmV4dFNjcmlwdC5nZXRJbmxpbmVTY3JpcHRTb3VyY2UodGhpcy5jb250ZXh0KSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZGF0YS1hbXBkZXZtb2RlXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2FtcERldkZpbGVzLm1hcCgoZmlsZSkgPT4gKFxuICAgICAgICAgICAgPHNjcmlwdFxuICAgICAgICAgICAgICBrZXk9e2ZpbGV9XG4gICAgICAgICAgICAgIHNyYz17YCR7YXNzZXRQcmVmaXh9L19uZXh0LyR7ZW5jb2RlVVJJUGF0aChcbiAgICAgICAgICAgICAgICBmaWxlXG4gICAgICAgICAgICAgICl9JHthc3NldFF1ZXJ5U3RyaW5nfWB9XG4gICAgICAgICAgICAgIG5vbmNlPXt0aGlzLnByb3BzLm5vbmNlfVxuICAgICAgICAgICAgICBjcm9zc09yaWdpbj17dGhpcy5wcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbn1cbiAgICAgICAgICAgICAgZGF0YS1hbXBkZXZtb2RlXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8Lz5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHRoaXMucHJvcHMuY3Jvc3NPcmlnaW4pXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnV2FybmluZzogYE5leHRTY3JpcHRgIGF0dHJpYnV0ZSBgY3Jvc3NPcmlnaW5gIGlzIGRlcHJlY2F0ZWQuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2RvYy1jcm9zc29yaWdpbi1kZXByZWNhdGVkJ1xuICAgICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXM6IERvY3VtZW50RmlsZXMgPSBnZXREb2N1bWVudEZpbGVzKFxuICAgICAgdGhpcy5jb250ZXh0LmJ1aWxkTWFuaWZlc3QsXG4gICAgICB0aGlzLmNvbnRleHQuX19ORVhUX0RBVEFfXy5wYWdlLFxuICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZScgJiYgaW5BbXBNb2RlXG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHshZGlzYWJsZVJ1bnRpbWVKUyAmJiBidWlsZE1hbmlmZXN0LmRldkZpbGVzXG4gICAgICAgICAgPyBidWlsZE1hbmlmZXN0LmRldkZpbGVzLm1hcCgoZmlsZTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgICAgICBrZXk9e2ZpbGV9XG4gICAgICAgICAgICAgICAgc3JjPXtgJHthc3NldFByZWZpeH0vX25leHQvJHtlbmNvZGVVUklQYXRoKFxuICAgICAgICAgICAgICAgICAgZmlsZVxuICAgICAgICAgICAgICAgICl9JHthc3NldFF1ZXJ5U3RyaW5nfWB9XG4gICAgICAgICAgICAgICAgbm9uY2U9e3RoaXMucHJvcHMubm9uY2V9XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW49e3RoaXMucHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW59XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogbnVsbH1cbiAgICAgICAge2Rpc2FibGVSdW50aW1lSlMgPyBudWxsIDogKFxuICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgIGlkPVwiX19ORVhUX0RBVEFfX1wiXG4gICAgICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICBub25jZT17dGhpcy5wcm9wcy5ub25jZX1cbiAgICAgICAgICAgIGNyb3NzT3JpZ2luPXt0aGlzLnByb3BzLmNyb3NzT3JpZ2luIHx8IGNyb3NzT3JpZ2lufVxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgX19odG1sOiBOZXh0U2NyaXB0LmdldElubGluZVNjcmlwdFNvdXJjZSh0aGlzLmNvbnRleHQpLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ZGlzYWJsZU9wdGltaXplZExvYWRpbmcgJiZcbiAgICAgICAgICAhZGlzYWJsZVJ1bnRpbWVKUyAmJlxuICAgICAgICAgIHRoaXMuZ2V0UG9seWZpbGxTY3JpcHRzKCl9XG4gICAgICAgIHtkaXNhYmxlT3B0aW1pemVkTG9hZGluZyAmJlxuICAgICAgICAgICFkaXNhYmxlUnVudGltZUpTICYmXG4gICAgICAgICAgdGhpcy5nZXRQcmVOZXh0U2NyaXB0cygpfVxuICAgICAgICB7ZGlzYWJsZU9wdGltaXplZExvYWRpbmcgJiZcbiAgICAgICAgICAhZGlzYWJsZVJ1bnRpbWVKUyAmJlxuICAgICAgICAgIHRoaXMuZ2V0RHluYW1pY0NodW5rcyhmaWxlcyl9XG4gICAgICAgIHtkaXNhYmxlT3B0aW1pemVkTG9hZGluZyAmJiAhZGlzYWJsZVJ1bnRpbWVKUyAmJiB0aGlzLmdldFNjcmlwdHMoZmlsZXMpfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIdG1sKFxuICBwcm9wczogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8XG4gICAgUmVhY3QuSHRtbEhUTUxBdHRyaWJ1dGVzPEhUTUxIdG1sRWxlbWVudD4sXG4gICAgSFRNTEh0bWxFbGVtZW50XG4gID5cbikge1xuICBjb25zdCB7XG4gICAgaW5BbXBNb2RlLFxuICAgIGRvY0NvbXBvbmVudHNSZW5kZXJlZCxcbiAgICBsb2NhbGUsXG4gICAgc2NyaXB0TG9hZGVyLFxuICAgIF9fTkVYVF9EQVRBX18sXG4gIH0gPSB1c2VIdG1sQ29udGV4dCgpXG5cbiAgZG9jQ29tcG9uZW50c1JlbmRlcmVkLkh0bWwgPSB0cnVlXG4gIGhhbmRsZURvY3VtZW50U2NyaXB0TG9hZGVySXRlbXMoc2NyaXB0TG9hZGVyLCBfX05FWFRfREFUQV9fLCBwcm9wcylcblxuICByZXR1cm4gKFxuICAgIDxodG1sXG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBsYW5nPXtwcm9wcy5sYW5nIHx8IGxvY2FsZSB8fCB1bmRlZmluZWR9XG4gICAgICBhbXA9e3Byb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gJ2VkZ2UnICYmIGluQW1wTW9kZSA/ICcnIDogdW5kZWZpbmVkfVxuICAgICAgZGF0YS1hbXBkZXZtb2RlPXtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZScgJiZcbiAgICAgICAgaW5BbXBNb2RlICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNYWluKCkge1xuICBjb25zdCB7IGRvY0NvbXBvbmVudHNSZW5kZXJlZCB9ID0gdXNlSHRtbENvbnRleHQoKVxuICBkb2NDb21wb25lbnRzUmVuZGVyZWQuTWFpbiA9IHRydWVcbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gPG5leHQtanMtaW50ZXJuYWwtYm9keS1yZW5kZXItdGFyZ2V0IC8+XG59XG5cbi8qKlxuICogYERvY3VtZW50YCBjb21wb25lbnQgaGFuZGxlcyB0aGUgaW5pdGlhbCBgZG9jdW1lbnRgIG1hcmt1cCBhbmQgcmVuZGVycyBvbmx5IG9uIHRoZSBzZXJ2ZXIgc2lkZS5cbiAqIENvbW1vbmx5IHVzZWQgZm9yIGltcGxlbWVudGluZyBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcgZm9yIGBjc3MtaW4tanNgIGxpYnJhcmllcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnQ8UCA9IHt9PiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgRG9jdW1lbnRQcm9wcyAmIFBcbj4ge1xuICAvKipcbiAgICogYGdldEluaXRpYWxQcm9wc2AgaG9vayByZXR1cm5zIHRoZSBjb250ZXh0IG9iamVjdCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBgcmVuZGVyUGFnZWAuXG4gICAqIGByZW5kZXJQYWdlYCBjYWxsYmFjayBleGVjdXRlcyBgUmVhY3RgIHJlbmRlcmluZyBsb2dpYyBzeW5jaHJvbm91c2x5IHRvIHN1cHBvcnQgc2VydmVyLXJlbmRlcmluZyB3cmFwcGVyc1xuICAgKi9cbiAgc3RhdGljIGdldEluaXRpYWxQcm9wcyhjdHg6IERvY3VtZW50Q29udGV4dCk6IFByb21pc2U8RG9jdW1lbnRJbml0aWFsUHJvcHM+IHtcbiAgICByZXR1cm4gY3R4LmRlZmF1bHRHZXRJbml0aWFsUHJvcHMoY3R4KVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8SHRtbD5cbiAgICAgICAgPEhlYWQgLz5cbiAgICAgICAgPGJvZHk+XG4gICAgICAgICAgPE1haW4gLz5cbiAgICAgICAgICA8TmV4dFNjcmlwdCAvPlxuICAgICAgICA8L2JvZHk+XG4gICAgICA8L0h0bWw+XG4gICAgKVxuICB9XG59XG5cbi8vIEFkZCBhIHNwZWNpYWwgcHJvcGVydHkgdG8gdGhlIGJ1aWx0LWluIGBEb2N1bWVudGAgY29tcG9uZW50IHNvIGxhdGVyIHdlIGNhblxuLy8gaWRlbnRpZnkgaWYgYSB1c2VyIGN1c3RvbWl6ZWQgYERvY3VtZW50YCBpcyB1c2VkIG9yIG5vdC5cbmNvbnN0IEludGVybmFsRnVuY3Rpb25Eb2N1bWVudDogRG9jdW1lbnRUeXBlID1cbiAgZnVuY3Rpb24gSW50ZXJuYWxGdW5jdGlvbkRvY3VtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8SHRtbD5cbiAgICAgICAgPEhlYWQgLz5cbiAgICAgICAgPGJvZHk+XG4gICAgICAgICAgPE1haW4gLz5cbiAgICAgICAgICA8TmV4dFNjcmlwdCAvPlxuICAgICAgICA8L2JvZHk+XG4gICAgICA8L0h0bWw+XG4gICAgKVxuICB9XG47KERvY3VtZW50IGFzIGFueSlbTkVYVF9CVUlMVElOX0RPQ1VNRU5UXSA9IEludGVybmFsRnVuY3Rpb25Eb2N1bWVudFxuIl0sIm5hbWVzIjpbIkhlYWQiLCJIdG1sIiwiTWFpbiIsIk5leHRTY3JpcHQiLCJEb2N1bWVudCIsImxhcmdlUGFnZURhdGFXYXJuaW5ncyIsIlNldCIsImdldERvY3VtZW50RmlsZXMiLCJidWlsZE1hbmlmZXN0IiwicGF0aG5hbWUiLCJpbkFtcE1vZGUiLCJzaGFyZWRGaWxlcyIsImdldFBhZ2VGaWxlcyIsInBhZ2VGaWxlcyIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJhbGxGaWxlcyIsImdldFBvbHlmaWxsU2NyaXB0cyIsImNvbnRleHQiLCJwcm9wcyIsImFzc2V0UHJlZml4IiwiYXNzZXRRdWVyeVN0cmluZyIsImRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nIiwiY3Jvc3NPcmlnaW4iLCJwb2x5ZmlsbEZpbGVzIiwiZmlsdGVyIiwicG9seWZpbGwiLCJlbmRzV2l0aCIsIm1hcCIsInNjcmlwdCIsImRlZmVyIiwibm9uY2UiLCJub01vZHVsZSIsInNyYyIsImVuY29kZVVSSVBhdGgiLCJoYXNDb21wb25lbnRQcm9wcyIsImNoaWxkIiwiQW1wU3R5bGVzIiwic3R5bGVzIiwiY3VyU3R5bGVzIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGRyZW4iLCJoYXNTdHlsZXMiLCJlbCIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiZm9yRWFjaCIsInB1c2giLCJzdHlsZSIsImFtcC1jdXN0b20iLCJqb2luIiwicmVwbGFjZSIsImdldER5bmFtaWNDaHVua3MiLCJmaWxlcyIsImR5bmFtaWNJbXBvcnRzIiwiaXNEZXZlbG9wbWVudCIsImZpbGUiLCJpbmNsdWRlcyIsImFzeW5jIiwiZ2V0U2NyaXB0cyIsIm5vcm1hbFNjcmlwdHMiLCJsb3dQcmlvcml0eVNjcmlwdHMiLCJsb3dQcmlvcml0eUZpbGVzIiwiZ2V0UHJlTmV4dFdvcmtlclNjcmlwdHMiLCJzY3JpcHRMb2FkZXIiLCJuZXh0U2NyaXB0V29ya2VycyIsInBhcnR5dG93blNuaXBwZXQiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInVzZXJEZWZpbmVkQ29uZmlnIiwiZmluZCIsImxlbmd0aCIsImRhdGEtcGFydHl0b3duLWNvbmZpZyIsImRhdGEtcGFydHl0b3duIiwid29ya2VyIiwiaW5kZXgiLCJzdHJhdGVneSIsInNjcmlwdENoaWxkcmVuIiwic2NyaXB0UHJvcHMiLCJzcmNQcm9wcyIsIkVycm9yIiwidHlwZSIsImtleSIsImRhdGEtbnNjcmlwdCIsImVyciIsImlzRXJyb3IiLCJjb2RlIiwiY29uc29sZSIsIndhcm4iLCJtZXNzYWdlIiwiZ2V0UHJlTmV4dFNjcmlwdHMiLCJ3ZWJXb3JrZXJTY3JpcHRzIiwiYmVmb3JlSW50ZXJhY3RpdmVTY3JpcHRzIiwiYmVmb3JlSW50ZXJhY3RpdmUiLCJnZXRIZWFkSFRNTFByb3BzIiwicmVzdFByb3BzIiwiaGVhZFByb3BzIiwiZ2V0QW1wUGF0aCIsImFtcFBhdGgiLCJhc1BhdGgiLCJnZXROZXh0Rm9udExpbmtUYWdzIiwibmV4dEZvbnRNYW5pZmVzdCIsImRhbmdlcm91c0FzUGF0aCIsInByZWNvbm5lY3QiLCJwcmVsb2FkIiwiYXBwRm9udHNFbnRyeSIsInBhZ2VzIiwicGFnZUZvbnRzRW50cnkiLCJwcmVsb2FkZWRGb250RmlsZXMiLCJmcm9tIiwicHJlY29ubmVjdFRvU2VsZiIsImxpbmsiLCJkYXRhLW5leHQtZm9udCIsInBhZ2VzVXNpbmdTaXplQWRqdXN0IiwicmVsIiwiaHJlZiIsImZvbnRGaWxlIiwiZXh0IiwiZXhlYyIsImFzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb250ZXh0VHlwZSIsIkh0bWxDb250ZXh0IiwiZ2V0Q3NzTGlua3MiLCJvcHRpbWl6ZUNzcyIsImNzc0ZpbGVzIiwiZiIsInVubWFuYWdlZEZpbGVzIiwiZHluYW1pY0Nzc0ZpbGVzIiwiZXhpc3RpbmciLCJoYXMiLCJjc3NMaW5rRWxlbWVudHMiLCJpc1NoYXJlZEZpbGUiLCJpc1VubWFuYWdlZEZpbGUiLCJkYXRhLW4tZyIsInVuZGVmaW5lZCIsImRhdGEtbi1wIiwiZ2V0UHJlbG9hZER5bmFtaWNDaHVua3MiLCJCb29sZWFuIiwiZ2V0UHJlbG9hZE1haW5MaW5rcyIsInByZWxvYWRGaWxlcyIsImdldEJlZm9yZUludGVyYWN0aXZlSW5saW5lU2NyaXB0cyIsImh0bWwiLCJpZCIsIl9fTkVYVF9DUk9TU19PUklHSU4iLCJyZW5kZXIiLCJoeWJyaWRBbXAiLCJjYW5vbmljYWxCYXNlIiwiX19ORVhUX0RBVEFfXyIsImhlYWRUYWdzIiwidW5zdGFibGVfcnVudGltZUpTIiwidW5zdGFibGVfSnNQcmVsb2FkIiwiZGlzYWJsZVJ1bnRpbWVKUyIsImRpc2FibGVKc1ByZWxvYWQiLCJkb2NDb21wb25lbnRzUmVuZGVyZWQiLCJoZWFkIiwiY3NzUHJlbG9hZHMiLCJvdGhlckhlYWRFbGVtZW50cyIsInN0cmljdE5leHRIZWFkIiwiY2xvbmVFbGVtZW50IiwiY29uY2F0IiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwiTk9ERV9FTlYiLCJpc1JlYWN0SGVsbWV0IiwibmFtZSIsImhhc0FtcGh0bWxSZWwiLCJoYXNDYW5vbmljYWxSZWwiLCJiYWRQcm9wIiwiaW5kZXhPZiIsIk9iamVjdCIsImtleXMiLCJwcm9wIiwicGFnZSIsIm5leHRGb250TGlua1RhZ3MiLCJ0cmFjaW5nTWV0YWRhdGEiLCJnZXRUcmFjZWRNZXRhZGF0YSIsImdldFRyYWNlciIsImdldFRyYWNlUHJvcGFnYXRpb25EYXRhIiwiZXhwZXJpbWVudGFsQ2xpZW50VHJhY2VNZXRhZGF0YSIsInRyYWNlTWV0YVRhZ3MiLCJ2YWx1ZSIsIm1ldGEiLCJjb250ZW50IiwiZGF0YS1uZXh0LWhpZGUtZm91YyIsImRhdGEtYW1wZGV2bW9kZSIsIm5vc2NyaXB0IiwiY291bnQiLCJ0b1N0cmluZyIsInJlcXVpcmUiLCJjbGVhbkFtcFBhdGgiLCJhbXAtYm9pbGVycGxhdGUiLCJkYXRhLW4tY3NzIiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiaGFuZGxlRG9jdW1lbnRTY3JpcHRMb2FkZXJJdGVtcyIsInNjcmlwdExvYWRlckl0ZW1zIiwiaGVhZENoaWxkcmVuIiwiYm9keUNoaWxkcmVuIiwiY29tYmluZWRDaGlsZHJlbiIsIl9fbmV4dFNjcmlwdCIsImdldElubGluZVNjcmlwdFNvdXJjZSIsImxhcmdlUGFnZURhdGFCeXRlcyIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwiaHRtbEVzY2FwZUpzb25TdHJpbmciLCJieXRlcyIsIlRleHRFbmNvZGVyIiwiZW5jb2RlIiwiYnVmZmVyIiwiYnl0ZUxlbmd0aCIsIkJ1ZmZlciIsInByZXR0eUJ5dGVzIiwiZGVmYXVsdCIsImFkZCIsImFtcERldkZpbGVzIiwiZGV2RmlsZXMiLCJsb2NhbGUiLCJ1c2VIdG1sQ29udGV4dCIsImxhbmciLCJhbXAiLCJuZXh0LWpzLWludGVybmFsLWJvZHktcmVuZGVyLXRhcmdldCIsImdldEluaXRpYWxQcm9wcyIsImN0eCIsImRlZmF1bHRHZXRJbml0aWFsUHJvcHMiLCJib2R5IiwiSW50ZXJuYWxGdW5jdGlvbkRvY3VtZW50IiwiTkVYVF9CVUlMVElOX0RPQ1VNRU5UIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_document.js\n");
|
43
|
-
|
44
|
-
/***/ }),
|
45
|
-
|
46
|
-
/***/ "./node_modules/next/dist/pages/_error.js":
|
47
|
-
/*!************************************************!*\
|
48
|
-
!*** ./node_modules/next/dist/pages/_error.js ***!
|
49
|
-
\************************************************/
|
50
|
-
/***/ ((module, exports, __webpack_require__) => {
|
51
|
-
|
52
|
-
"use strict";
|
53
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return Error;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"react\"));\nconst _head = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/head */ \"./node_modules/next/dist/shared/lib/head.js\"));\nconst statusCodes = {\n 400: 'Bad Request',\n 404: 'This page could not be found',\n 405: 'Method Not Allowed',\n 500: 'Internal Server Error'\n};\nfunction _getInitialProps(param) {\n let { res, err } = param;\n const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;\n return {\n statusCode\n };\n}\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n desc: {\n lineHeight: '48px'\n },\n h1: {\n display: 'inline-block',\n margin: '0 20px 0 0',\n paddingRight: 23,\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: 'top'\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '28px'\n },\n wrap: {\n display: 'inline-block'\n }\n};\nclass Error extends _react.default.Component {\n render() {\n const { statusCode, withDarkMode = true } = this.props;\n const title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.error,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: statusCode ? statusCode + \": \" + title : 'Application error: a client-side exception has occurred'\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.desc,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* CSS minified from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n ${\n withDarkMode\n ? `@media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }`\n : ''\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\" + (withDarkMode ? '@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}' : '')\n }\n }),\n statusCode ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: statusCode\n }) : null,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.wrap,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"h2\", {\n style: styles.h2,\n children: [\n this.props.title || statusCode ? title : /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: \"Application error: a client-side exception has occurred (see the browser console for more information)\"\n }),\n \".\"\n ]\n })\n })\n ]\n })\n ]\n });\n }\n}\nError.displayName = 'ErrorPage';\nError.getInitialProps = _getInitialProps;\nError.origGetInitialProps = _getInitialProps;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O2VBOERxQkE7Ozs7OzRFQTlESDsyRUFDRDtBQUdqQixNQUFNQyxjQUEwQztJQUM5QyxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBQ1A7QUFRQSxTQUFTQyxpQkFBaUIsS0FHUjtJQUhRLE1BQ3hCQyxHQUFHLEVBQ0hDLEdBQUcsRUFDYSxHQUhRO0lBSXhCLE1BQU1DLGFBQ0pGLE9BQU9BLElBQUlFLFVBQVUsR0FBR0YsSUFBSUUsVUFBVSxHQUFHRCxNQUFNQSxJQUFJQyxVQUFVLEdBQUk7SUFDbkUsT0FBTztRQUFFQTtJQUFXO0FBQ3RCO0FBRUEsTUFBTUMsU0FBOEM7SUFDbERDLE9BQU87UUFDTCwwRkFBMEY7UUFDMUZDLFlBQ0U7UUFDRkMsUUFBUTtRQUNSQyxXQUFXO1FBQ1hDLFNBQVM7UUFDVEMsZUFBZTtRQUNmQyxZQUFZO1FBQ1pDLGdCQUFnQjtJQUNsQjtJQUNBQyxNQUFNO1FBQ0pDLFlBQVk7SUFDZDtJQUNBQyxJQUFJO1FBQ0ZOLFNBQVM7UUFDVE8sUUFBUTtRQUNSQyxjQUFjO1FBQ2RDLFVBQVU7UUFDVkMsWUFBWTtRQUNaQyxlQUFlO0lBQ2pCO0lBQ0FDLElBQUk7UUFDRkgsVUFBVTtRQUNWQyxZQUFZO1FBQ1pMLFlBQVk7SUFDZDtJQUNBUSxNQUFNO1FBQ0piLFNBQVM7SUFDWDtBQUNGO0FBS2UsTUFBTVgsY0FBc0J5QixPQUFBQSxPQUFLLENBQUNDLFNBQVM7SUFNeERDLFNBQVM7UUFDUCxNQUFNLEVBQUV0QixVQUFVLEVBQUV1QixlQUFlLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQ0MsS0FBSztRQUN0RCxNQUFNQyxRQUNKLElBQUksQ0FBQ0QsS0FBSyxDQUFDQyxLQUFLLElBQ2hCN0IsV0FBVyxDQUFDSSxXQUFXLElBQ3ZCO1FBRUYscUJBQ0Usc0JBQUMwQixPQUFBQTtZQUFJQyxPQUFPMUIsT0FBT0MsS0FBSzs7OEJBQ3RCLHFCQUFDMEIsTUFBQUEsT0FBSTs4QkFDSCxtQ0FBQ0gsU0FBQUE7a0NBQ0V6QixhQUNNQSxhQUFXLE9BQUl5QixRQUNsQjs7OzhCQUdSLHNCQUFDQyxPQUFBQTtvQkFBSUMsT0FBTzFCLE9BQU9TLElBQUk7O3NDQUNyQixxQkFBQ2lCLFNBQUFBOzRCQUNDRSx5QkFBeUI7Z0NBQ3ZCOzs7Ozs7Ozs7Ozs7Ozs7O2VBZ0JDLEdBQ0RDLFFBQVMsbUdBQ1BQLENBQUFBLGVBQ0ksb0lBQ0EsR0FBQzs0QkFFVDs7d0JBR0R2QixhQUFBQSxXQUFBQSxHQUNDLHFCQUFDWSxNQUFBQTs0QkFBR21CLFdBQVU7NEJBQWdCSixPQUFPMUIsT0FBT1csRUFBRTtzQ0FDM0NaOzZCQUVEO3NDQUNKLHFCQUFDMEIsT0FBQUE7NEJBQUlDLE9BQU8xQixPQUFPa0IsSUFBSTtzQ0FDckIsb0NBQUNELE1BQUFBO2dDQUFHUyxPQUFPMUIsT0FBT2lCLEVBQUU7O29DQUNqQixJQUFJLENBQUNNLEtBQUssQ0FBQ0MsS0FBSyxJQUFJekIsYUFDbkJ5QixRQUFBQSxXQUFBQSxHQUVBO2tEQUFFOztvQ0FJRjs7Ozs7Ozs7SUFPZDtBQUNGO0FBeEVxQjlCLE1BQ1pxQyxXQUFBQSxHQUFjO0FBREZyQyxNQUdac0MsZUFBQUEsR0FBa0JwQztBQUhORixNQUladUMsbUJBQUFBLEdBQXNCckMiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXERlc2t0b3BcXHNyY1xccGFnZXNcXF9lcnJvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IEhlYWQgZnJvbSAnLi4vc2hhcmVkL2xpYi9oZWFkJ1xuaW1wb3J0IHR5cGUgeyBOZXh0UGFnZUNvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvbGliL3V0aWxzJ1xuXG5jb25zdCBzdGF0dXNDb2RlczogeyBbY29kZTogbnVtYmVyXTogc3RyaW5nIH0gPSB7XG4gIDQwMDogJ0JhZCBSZXF1ZXN0JyxcbiAgNDA0OiAnVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZCcsXG4gIDQwNTogJ01ldGhvZCBOb3QgQWxsb3dlZCcsXG4gIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yUHJvcHMgPSB7XG4gIHN0YXR1c0NvZGU6IG51bWJlclxuICB0aXRsZT86IHN0cmluZ1xuICB3aXRoRGFya01vZGU/OiBib29sZWFuXG59XG5cbmZ1bmN0aW9uIF9nZXRJbml0aWFsUHJvcHMoe1xuICByZXMsXG4gIGVycixcbn06IE5leHRQYWdlQ29udGV4dCk6IFByb21pc2U8RXJyb3JQcm9wcz4gfCBFcnJvclByb3BzIHtcbiAgY29uc3Qgc3RhdHVzQ29kZSA9XG4gICAgcmVzICYmIHJlcy5zdGF0dXNDb2RlID8gcmVzLnN0YXR1c0NvZGUgOiBlcnIgPyBlcnIuc3RhdHVzQ29kZSEgOiA0MDRcbiAgcmV0dXJuIHsgc3RhdHVzQ29kZSB9XG59XG5cbmNvbnN0IHN0eWxlczogUmVjb3JkPHN0cmluZywgUmVhY3QuQ1NTUHJvcGVydGllcz4gPSB7XG4gIGVycm9yOiB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9tb2Rlcm4tbm9ybWFsaXplL2Jsb2IvbWFpbi9tb2Rlcm4tbm9ybWFsaXplLmNzcyNMMzgtTDUyXG4gICAgZm9udEZhbWlseTpcbiAgICAgICdzeXN0ZW0tdWksXCJTZWdvZSBVSVwiLFJvYm90byxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZixcIkFwcGxlIENvbG9yIEVtb2ppXCIsXCJTZWdvZSBVSSBFbW9qaVwiJyxcbiAgICBoZWlnaHQ6ICcxMDB2aCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICBkZXNjOiB7XG4gICAgbGluZUhlaWdodDogJzQ4cHgnLFxuICB9LFxuICBoMToge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIG1hcmdpbjogJzAgMjBweCAwIDAnLFxuICAgIHBhZGRpbmdSaWdodDogMjMsXG4gICAgZm9udFNpemU6IDI0LFxuICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJyxcbiAgfSxcbiAgaDI6IHtcbiAgICBmb250U2l6ZTogMTQsXG4gICAgZm9udFdlaWdodDogNDAwLFxuICAgIGxpbmVIZWlnaHQ6ICcyOHB4JyxcbiAgfSxcbiAgd3JhcDoge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICB9LFxufVxuXG4vKipcbiAqIGBFcnJvcmAgY29tcG9uZW50IHVzZWQgZm9yIGhhbmRsaW5nIGVycm9ycy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3I8UCA9IHt9PiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQICYgRXJyb3JQcm9wcz4ge1xuICBzdGF0aWMgZGlzcGxheU5hbWUgPSAnRXJyb3JQYWdlJ1xuXG4gIHN0YXRpYyBnZXRJbml0aWFsUHJvcHMgPSBfZ2V0SW5pdGlhbFByb3BzXG4gIHN0YXRpYyBvcmlnR2V0SW5pdGlhbFByb3BzID0gX2dldEluaXRpYWxQcm9wc1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIHdpdGhEYXJrTW9kZSA9IHRydWUgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB0aXRsZSA9XG4gICAgICB0aGlzLnByb3BzLnRpdGxlIHx8XG4gICAgICBzdGF0dXNDb2Rlc1tzdGF0dXNDb2RlXSB8fFxuICAgICAgJ0FuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3N0eWxlcy5lcnJvcn0+XG4gICAgICAgIDxIZWFkPlxuICAgICAgICAgIDx0aXRsZT5cbiAgICAgICAgICAgIHtzdGF0dXNDb2RlXG4gICAgICAgICAgICAgID8gYCR7c3RhdHVzQ29kZX06ICR7dGl0bGV9YFxuICAgICAgICAgICAgICA6ICdBcHBsaWNhdGlvbiBlcnJvcjogYSBjbGllbnQtc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkJ31cbiAgICAgICAgICA8L3RpdGxlPlxuICAgICAgICA8L0hlYWQ+XG4gICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlcy5kZXNjfT5cbiAgICAgICAgICA8c3R5bGVcbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgIC8qIENTUyBtaW5pZmllZCBmcm9tXG4gICAgICAgICAgICAgICAgYm9keSB7IG1hcmdpbjogMDsgY29sb3I6ICMwMDA7IGJhY2tncm91bmQ6ICNmZmY7IH1cbiAgICAgICAgICAgICAgICAubmV4dC1lcnJvci1oMSB7XG4gICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIC4zKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgd2l0aERhcmtNb2RlXG4gICAgICAgICAgICAgICAgICAgID8gYEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICAgICAgIGJvZHkgeyBjb2xvcjogI2ZmZjsgYmFja2dyb3VuZDogIzAwMDsgfVxuICAgICAgICAgICAgICAgICAgLm5leHQtZXJyb3ItaDEge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4zKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgX19odG1sOiBgYm9keXtjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfSR7XG4gICAgICAgICAgICAgICAgd2l0aERhcmtNb2RlXG4gICAgICAgICAgICAgICAgICA/ICdAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe2JvZHl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiMwMDB9Lm5leHQtZXJyb3ItaDF7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4zKX19J1xuICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIHtzdGF0dXNDb2RlID8gKFxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm5leHQtZXJyb3ItaDFcIiBzdHlsZT17c3R5bGVzLmgxfT5cbiAgICAgICAgICAgICAge3N0YXR1c0NvZGV9XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlcy53cmFwfT5cbiAgICAgICAgICAgIDxoMiBzdHlsZT17c3R5bGVzLmgyfT5cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGUgfHwgc3RhdHVzQ29kZSA/IChcbiAgICAgICAgICAgICAgICB0aXRsZVxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBlcnJvcjogYSBjbGllbnQtc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkIChzZWVcbiAgICAgICAgICAgICAgICAgIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24pXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIC5cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59XG4iXSwibmFtZXMiOlsiRXJyb3IiLCJzdGF0dXNDb2RlcyIsIl9nZXRJbml0aWFsUHJvcHMiLCJyZXMiLCJlcnIiLCJzdGF0dXNDb2RlIiwic3R5bGVzIiwiZXJyb3IiLCJmb250RmFtaWx5IiwiaGVpZ2h0IiwidGV4dEFsaWduIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJkZXNjIiwibGluZUhlaWdodCIsImgxIiwibWFyZ2luIiwicGFkZGluZ1JpZ2h0IiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwidmVydGljYWxBbGlnbiIsImgyIiwid3JhcCIsIlJlYWN0IiwiQ29tcG9uZW50IiwicmVuZGVyIiwid2l0aERhcmtNb2RlIiwicHJvcHMiLCJ0aXRsZSIsImRpdiIsInN0eWxlIiwiSGVhZCIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiY2xhc3NOYW1lIiwiZGlzcGxheU5hbWUiLCJnZXRJbml0aWFsUHJvcHMiLCJvcmlnR2V0SW5pdGlhbFByb3BzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_error.js\n");
|
54
|
-
|
55
|
-
/***/ }),
|
56
|
-
|
57
|
-
/***/ "./node_modules/next/dist/shared/lib/amp-mode.js":
|
58
|
-
/*!*******************************************************!*\
|
59
|
-
!*** ./node_modules/next/dist/shared/lib/amp-mode.js ***!
|
60
|
-
\*******************************************************/
|
61
|
-
/***/ ((__unused_webpack_module, exports) => {
|
62
|
-
|
63
|
-
"use strict";
|
64
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isInAmpMode\", ({\n enumerable: true,\n get: function() {\n return isInAmpMode;\n }\n}));\nfunction isInAmpMode(param) {\n let { ampFirst = false, hybrid = false, hasQuery = false } = param === void 0 ? {} : param;\n return ampFirst || hybrid && hasQuery;\n} //# sourceMappingURL=amp-mode.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYW1wLW1vZGUuanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLFlBQVk7SUFBQSxNQUMxQkMsV0FBVyxLQUFLLEVBQ2hCQyxTQUFTLEtBQUssRUFDZEMsV0FBVyxLQUFLLEVBQ2pCLEdBSjJCLG1CQUl4QixDQUFDLElBSnVCO0lBSzFCLE9BQU9GLFlBQWFDLFVBQVVDO0FBQ2hDIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxzcmNcXHNoYXJlZFxcbGliXFxhbXAtbW9kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaXNJbkFtcE1vZGUoe1xuICBhbXBGaXJzdCA9IGZhbHNlLFxuICBoeWJyaWQgPSBmYWxzZSxcbiAgaGFzUXVlcnkgPSBmYWxzZSxcbn0gPSB7fSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYW1wRmlyc3QgfHwgKGh5YnJpZCAmJiBoYXNRdWVyeSlcbn1cbiJdLCJuYW1lcyI6WyJpc0luQW1wTW9kZSIsImFtcEZpcnN0IiwiaHlicmlkIiwiaGFzUXVlcnkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/amp-mode.js\n");
|
65
|
-
|
66
|
-
/***/ }),
|
67
|
-
|
68
|
-
/***/ "./node_modules/next/dist/shared/lib/constants.js":
|
69
|
-
/*!********************************************************!*\
|
70
|
-
!*** ./node_modules/next/dist/shared/lib/constants.js ***!
|
71
|
-
\********************************************************/
|
72
|
-
/***/ ((module, exports, __webpack_require__) => {
|
73
|
-
|
74
|
-
"use strict";
|
75
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n APP_BUILD_MANIFEST: function() {\n return APP_BUILD_MANIFEST;\n },\n APP_CLIENT_INTERNALS: function() {\n return APP_CLIENT_INTERNALS;\n },\n APP_PATHS_MANIFEST: function() {\n return APP_PATHS_MANIFEST;\n },\n APP_PATH_ROUTES_MANIFEST: function() {\n return APP_PATH_ROUTES_MANIFEST;\n },\n BARREL_OPTIMIZATION_PREFIX: function() {\n return BARREL_OPTIMIZATION_PREFIX;\n },\n BLOCKED_PAGES: function() {\n return BLOCKED_PAGES;\n },\n BUILD_ID_FILE: function() {\n return BUILD_ID_FILE;\n },\n BUILD_MANIFEST: function() {\n return BUILD_MANIFEST;\n },\n CLIENT_PUBLIC_FILES_PATH: function() {\n return CLIENT_PUBLIC_FILES_PATH;\n },\n CLIENT_REFERENCE_MANIFEST: function() {\n return CLIENT_REFERENCE_MANIFEST;\n },\n CLIENT_STATIC_FILES_PATH: function() {\n return CLIENT_STATIC_FILES_PATH;\n },\n CLIENT_STATIC_FILES_RUNTIME_AMP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_AMP;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\n },\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() {\n return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH;\n },\n CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() {\n return CLIENT_STATIC_FILES_RUNTIME_WEBPACK;\n },\n COMPILER_INDEXES: function() {\n return COMPILER_INDEXES;\n },\n COMPILER_NAMES: function() {\n return COMPILER_NAMES;\n },\n CONFIG_FILES: function() {\n return CONFIG_FILES;\n },\n DEFAULT_RUNTIME_WEBPACK: function() {\n return DEFAULT_RUNTIME_WEBPACK;\n },\n DEFAULT_SANS_SERIF_FONT: function() {\n return DEFAULT_SANS_SERIF_FONT;\n },\n DEFAULT_SERIF_FONT: function() {\n return DEFAULT_SERIF_FONT;\n },\n DEV_CLIENT_MIDDLEWARE_MANIFEST: function() {\n return DEV_CLIENT_MIDDLEWARE_MANIFEST;\n },\n DEV_CLIENT_PAGES_MANIFEST: function() {\n return DEV_CLIENT_PAGES_MANIFEST;\n },\n EDGE_RUNTIME_WEBPACK: function() {\n return EDGE_RUNTIME_WEBPACK;\n },\n EDGE_UNSUPPORTED_NODE_APIS: function() {\n return EDGE_UNSUPPORTED_NODE_APIS;\n },\n EXPORT_DETAIL: function() {\n return EXPORT_DETAIL;\n },\n EXPORT_MARKER: function() {\n return EXPORT_MARKER;\n },\n FUNCTIONS_CONFIG_MANIFEST: function() {\n return FUNCTIONS_CONFIG_MANIFEST;\n },\n IMAGES_MANIFEST: function() {\n return IMAGES_MANIFEST;\n },\n INTERCEPTION_ROUTE_REWRITE_MANIFEST: function() {\n return INTERCEPTION_ROUTE_REWRITE_MANIFEST;\n },\n MIDDLEWARE_BUILD_MANIFEST: function() {\n return MIDDLEWARE_BUILD_MANIFEST;\n },\n MIDDLEWARE_MANIFEST: function() {\n return MIDDLEWARE_MANIFEST;\n },\n MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() {\n return MIDDLEWARE_REACT_LOADABLE_MANIFEST;\n },\n MODERN_BROWSERSLIST_TARGET: function() {\n return _modernbrowserslisttarget.default;\n },\n NEXT_BUILTIN_DOCUMENT: function() {\n return NEXT_BUILTIN_DOCUMENT;\n },\n NEXT_FONT_MANIFEST: function() {\n return NEXT_FONT_MANIFEST;\n },\n PAGES_MANIFEST: function() {\n return PAGES_MANIFEST;\n },\n PHASE_DEVELOPMENT_SERVER: function() {\n return PHASE_DEVELOPMENT_SERVER;\n },\n PHASE_EXPORT: function() {\n return PHASE_EXPORT;\n },\n PHASE_INFO: function() {\n return PHASE_INFO;\n },\n PHASE_PRODUCTION_BUILD: function() {\n return PHASE_PRODUCTION_BUILD;\n },\n PHASE_PRODUCTION_SERVER: function() {\n return PHASE_PRODUCTION_SERVER;\n },\n PHASE_TEST: function() {\n return PHASE_TEST;\n },\n PRERENDER_MANIFEST: function() {\n return PRERENDER_MANIFEST;\n },\n REACT_LOADABLE_MANIFEST: function() {\n return REACT_LOADABLE_MANIFEST;\n },\n ROUTES_MANIFEST: function() {\n return ROUTES_MANIFEST;\n },\n RSC_MODULE_TYPES: function() {\n return RSC_MODULE_TYPES;\n },\n SERVER_DIRECTORY: function() {\n return SERVER_DIRECTORY;\n },\n SERVER_FILES_MANIFEST: function() {\n return SERVER_FILES_MANIFEST;\n },\n SERVER_PROPS_ID: function() {\n return SERVER_PROPS_ID;\n },\n SERVER_REFERENCE_MANIFEST: function() {\n return SERVER_REFERENCE_MANIFEST;\n },\n STATIC_PROPS_ID: function() {\n return STATIC_PROPS_ID;\n },\n STATIC_STATUS_PAGES: function() {\n return STATIC_STATUS_PAGES;\n },\n STRING_LITERAL_DROP_BUNDLE: function() {\n return STRING_LITERAL_DROP_BUNDLE;\n },\n SUBRESOURCE_INTEGRITY_MANIFEST: function() {\n return SUBRESOURCE_INTEGRITY_MANIFEST;\n },\n SYSTEM_ENTRYPOINTS: function() {\n return SYSTEM_ENTRYPOINTS;\n },\n TRACE_OUTPUT_VERSION: function() {\n return TRACE_OUTPUT_VERSION;\n },\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST: function() {\n return TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST;\n },\n TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() {\n return TURBO_TRACE_DEFAULT_MEMORY_LIMIT;\n },\n UNDERSCORE_NOT_FOUND_ROUTE: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE;\n },\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE_ENTRY;\n },\n WEBPACK_STATS: function() {\n return WEBPACK_STATS;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./modern-browserslist-target */ \"./node_modules/next/dist/shared/lib/modern-browserslist-target.js\"));\nconst COMPILER_NAMES = {\n client: 'client',\n server: 'server',\n edgeServer: 'edge-server'\n};\nconst COMPILER_INDEXES = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2\n};\nconst UNDERSCORE_NOT_FOUND_ROUTE = '/_not-found';\nconst UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = \"\" + UNDERSCORE_NOT_FOUND_ROUTE + \"/page\";\nconst PHASE_EXPORT = 'phase-export';\nconst PHASE_PRODUCTION_BUILD = 'phase-production-build';\nconst PHASE_PRODUCTION_SERVER = 'phase-production-server';\nconst PHASE_DEVELOPMENT_SERVER = 'phase-development-server';\nconst PHASE_TEST = 'phase-test';\nconst PHASE_INFO = 'phase-info';\nconst PAGES_MANIFEST = 'pages-manifest.json';\nconst WEBPACK_STATS = 'webpack-stats.json';\nconst APP_PATHS_MANIFEST = 'app-paths-manifest.json';\nconst APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json';\nconst BUILD_MANIFEST = 'build-manifest.json';\nconst APP_BUILD_MANIFEST = 'app-build-manifest.json';\nconst FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json';\nconst SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest';\nconst NEXT_FONT_MANIFEST = 'next-font-manifest';\nconst EXPORT_MARKER = 'export-marker.json';\nconst EXPORT_DETAIL = 'export-detail.json';\nconst PRERENDER_MANIFEST = 'prerender-manifest.json';\nconst ROUTES_MANIFEST = 'routes-manifest.json';\nconst IMAGES_MANIFEST = 'images-manifest.json';\nconst SERVER_FILES_MANIFEST = 'required-server-files.json';\nconst DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json';\nconst MIDDLEWARE_MANIFEST = 'middleware-manifest.json';\nconst TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST = '_clientMiddlewareManifest.json';\nconst DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json';\nconst REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json';\nconst SERVER_DIRECTORY = 'server';\nconst CONFIG_FILES = [\n 'next.config.js',\n 'next.config.mjs',\n 'next.config.ts'\n];\nconst BUILD_ID_FILE = 'BUILD_ID';\nconst BLOCKED_PAGES = [\n '/_document',\n '/_app',\n '/_error'\n];\nconst CLIENT_PUBLIC_FILES_PATH = 'public';\nconst CLIENT_STATIC_FILES_PATH = 'static';\nconst STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__';\nconst NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__';\nconst BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__';\nconst CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest';\nconst SERVER_REFERENCE_MANIFEST = 'server-reference-manifest';\nconst MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest';\nconst MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest';\nconst INTERCEPTION_ROUTE_REWRITE_MANIFEST = 'interception-route-rewrite-manifest';\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN = \"main\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = \"\" + CLIENT_STATIC_FILES_RUNTIME_MAIN + \"-app\";\nconst APP_CLIENT_INTERNALS = 'app-pages-internals';\nconst CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = \"react-refresh\";\nconst CLIENT_STATIC_FILES_RUNTIME_AMP = \"amp\";\nconst CLIENT_STATIC_FILES_RUNTIME_WEBPACK = \"webpack\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills';\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS);\nconst DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime';\nconst EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack';\nconst STATIC_PROPS_ID = '__N_SSG';\nconst SERVER_PROPS_ID = '__N_SSP';\nconst DEFAULT_SERIF_FONT = {\n name: 'Times New Roman',\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048\n};\nconst DEFAULT_SANS_SERIF_FONT = {\n name: 'Arial',\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048\n};\nconst STATIC_STATUS_PAGES = [\n '/500'\n];\nconst TRACE_OUTPUT_VERSION = 1;\nconst TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000;\nconst RSC_MODULE_TYPES = {\n client: 'client',\n server: 'server'\n};\nconst EDGE_UNSUPPORTED_NODE_APIS = [\n 'clearImmediate',\n 'setImmediate',\n 'BroadcastChannel',\n 'ByteLengthQueuingStrategy',\n 'CompressionStream',\n 'CountQueuingStrategy',\n 'DecompressionStream',\n 'DomException',\n 'MessageChannel',\n 'MessageEvent',\n 'MessagePort',\n 'ReadableByteStreamController',\n 'ReadableStreamBYOBRequest',\n 'ReadableStreamDefaultController',\n 'TransformStreamDefaultController',\n 'WritableStreamDefaultController'\n];\nconst SYSTEM_ENTRYPOINTS = new Set([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP\n]);\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQW1DYUEsa0JBQWtCO2VBQWxCQTs7SUErQ0FDLG9CQUFvQjtlQUFwQkE7O0lBbERBQyxrQkFBa0I7ZUFBbEJBOztJQUNBQyx3QkFBd0I7ZUFBeEJBOztJQThCQUMsMEJBQTBCO2VBQTFCQTs7SUFMQUMsYUFBYTtlQUFiQTs7SUFEQUMsYUFBYTtlQUFiQTs7SUF2QkFDLGNBQWM7ZUFBZEE7O0lBeUJBQyx3QkFBd0I7ZUFBeEJBOztJQU9BQyx5QkFBeUI7ZUFBekJBOztJQU5BQyx3QkFBd0I7ZUFBeEJBOztJQTBCQUMsK0JBQStCO2VBQS9CQTs7SUFQQUMsZ0NBQWdDO2VBQWhDQTs7SUFDQUMsb0NBQW9DO2VBQXBDQTs7SUFVQUMscUNBQXFDO2VBQXJDQTs7SUFDQUMsNENBQTRDO2VBQTVDQTs7SUFQQUMseUNBQXlDO2VBQXpDQTs7SUFJQUMsbUNBQW1DO2VBQW5DQTs7SUExRUFDLGdCQUFnQjtlQUFoQkE7O0lBUkFDLGNBQWM7ZUFBZEE7O0lBOENBQyxZQUFZO2VBQVpBOztJQTBDQUMsdUJBQXVCO2VBQXZCQTs7SUFVQUMsdUJBQXVCO2VBQXZCQTs7SUFOQUMsa0JBQWtCO2VBQWxCQTs7SUFqREFDLDhCQUE4QjtlQUE5QkE7O0lBSkFDLHlCQUF5QjtlQUF6QkE7O0lBa0RBQyxvQkFBb0I7ZUFBcEJBOztJQTZCQUMsMEJBQTBCO2VBQTFCQTs7SUFwRkFDLGFBQWE7ZUFBYkE7O0lBREFDLGFBQWE7ZUFBYkE7O0lBSEFDLHlCQUF5QjtlQUF6QkE7O0lBT0FDLGVBQWU7ZUFBZkE7O0lBZ0NBQyxtQ0FBbUM7ZUFBbkNBOztJQUxBQyx5QkFBeUI7ZUFBekJBOztJQXhCQUMsbUJBQW1CO2VBQW5CQTs7SUEwQkFDLGtDQUFrQztlQUFsQ0E7O0lBdEVKQywwQkFBMEI7ZUFBMUJBLDBCQUFBQSxPQUEwQjs7SUE0RHRCQyxxQkFBcUI7ZUFBckJBOztJQXhCQUMsa0JBQWtCO2VBQWxCQTs7SUFSQUMsY0FBYztlQUFkQTs7SUFIQUMsd0JBQXdCO2VBQXhCQTs7SUFIQUMsWUFBWTtlQUFaQTs7SUFLQUMsVUFBVTtlQUFWQTs7SUFKQUMsc0JBQXNCO2VBQXRCQTs7SUFDQUMsdUJBQXVCO2VBQXZCQTs7SUFFQUMsVUFBVTtlQUFWQTs7SUFhQUMsa0JBQWtCO2VBQWxCQTs7SUFTQUMsdUJBQXVCO2VBQXZCQTs7SUFSQUMsZUFBZTtlQUFmQTs7SUF5RUFDLGdCQUFnQjtlQUFoQkE7O0lBaEVBQyxnQkFBZ0I7ZUFBaEJBOztJQVBBQyxxQkFBcUI7ZUFBckJBOztJQXFEQUMsZUFBZTtlQUFmQTs7SUE3QkFDLHlCQUF5QjtlQUF6QkE7O0lBNEJBQyxlQUFlO2VBQWZBOztJQWNBQyxtQkFBbUI7ZUFBbkJBOztJQWpEQUMsMEJBQTBCO2VBQTFCQTs7SUF4QkFDLDhCQUE4QjtlQUE5QkE7O0lBMEdBQyxrQkFBa0I7ZUFBbEJBOztJQWhDQUMsb0JBQW9CO2VBQXBCQTs7SUFoRUFDLG9DQUFvQztlQUFwQ0E7O0lBa0VBQyxnQ0FBZ0M7ZUFBaENBOztJQTNGQUMsMEJBQTBCO2VBQTFCQTs7SUFDQUMsZ0NBQWdDO2VBQWhDQTs7SUFRQUMsYUFBYTtlQUFiQTs7OzsrRkEvQjBCO0FBTWhDLE1BQU03QyxpQkFBaUI7SUFDNUI4QyxRQUFRO0lBQ1JDLFFBQVE7SUFDUkMsWUFBWTtBQUNkO0FBSU8sTUFBTWpELG1CQUVUO0lBQ0YsQ0FBQ0MsZUFBZThDLE1BQU0sQ0FBQyxFQUFFO0lBQ3pCLENBQUM5QyxlQUFlK0MsTUFBTSxDQUFDLEVBQUU7SUFDekIsQ0FBQy9DLGVBQWVnRCxVQUFVLENBQUMsRUFBRTtBQUMvQjtBQUVPLE1BQU1MLDZCQUE2QjtBQUNuQyxNQUFNQyxtQ0FBb0MsS0FBRUQsNkJBQTJCO0FBQ3ZFLE1BQU1yQixlQUFlO0FBQ3JCLE1BQU1FLHlCQUF5QjtBQUMvQixNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUosMkJBQTJCO0FBQ2pDLE1BQU1LLGFBQWE7QUFDbkIsTUFBTUgsYUFBYTtBQUNuQixNQUFNSCxpQkFBaUI7QUFDdkIsTUFBTXlCLGdCQUFnQjtBQUN0QixNQUFNOUQscUJBQXFCO0FBQzNCLE1BQU1DLDJCQUEyQjtBQUNqQyxNQUFNSSxpQkFBaUI7QUFDdkIsTUFBTVAscUJBQXFCO0FBQzNCLE1BQU04Qiw0QkFBNEI7QUFDbEMsTUFBTTJCLGlDQUFpQztBQUN2QyxNQUFNbkIscUJBQXFCO0FBQzNCLE1BQU1ULGdCQUFnQjtBQUN0QixNQUFNRCxnQkFBZ0I7QUFDdEIsTUFBTWtCLHFCQUFxQjtBQUMzQixNQUFNRSxrQkFBa0I7QUFDeEIsTUFBTWpCLGtCQUFrQjtBQUN4QixNQUFNb0Isd0JBQXdCO0FBQzlCLE1BQU0xQiw0QkFBNEI7QUFDbEMsTUFBTVMsc0JBQXNCO0FBQzVCLE1BQU0wQix1Q0FDWDtBQUNLLE1BQU1wQyxpQ0FBaUM7QUFDdkMsTUFBTXVCLDBCQUEwQjtBQUNoQyxNQUFNRyxtQkFBbUI7QUFDekIsTUFBTTlCLGVBQWU7SUFDMUI7SUFDQTtJQUNBO0NBQ0Q7QUFDTSxNQUFNZCxnQkFBZ0I7QUFDdEIsTUFBTUQsZ0JBQWdCO0lBQUM7SUFBYztJQUFTO0NBQVU7QUFDeEQsTUFBTUcsMkJBQTJCO0FBQ2pDLE1BQU1FLDJCQUEyQjtBQUNqQyxNQUFNOEMsNkJBQTZCO0FBQ25DLE1BQU1uQix3QkFBd0I7QUFDOUIsTUFBTWpDLDZCQUE2QjtBQUduQyxNQUFNSyw0QkFBNEI7QUFFbEMsTUFBTTRDLDRCQUE0QjtBQUVsQyxNQUFNcEIsNEJBQTRCO0FBRWxDLE1BQU1FLHFDQUNYO0FBRUssTUFBTUgsc0NBQ1g7QUFHSyxNQUFNcEIsbUNBQW9DO0FBQzFDLE1BQU1DLHVDQUF3QyxLQUFFRCxtQ0FBaUM7QUFFakYsTUFBTVgsdUJBQXVCO0FBRTdCLE1BQU1lLDRDQUE2QztBQUVuRCxNQUFNTCxrQ0FBbUM7QUFFekMsTUFBTU0sc0NBQXVDO0FBRTdDLE1BQU1ILHdDQUF3QztBQUM5QyxNQUFNQywrQ0FBK0NxRCxPQUMxRHREO0FBRUssTUFBTU8sMEJBQTBCO0FBQ2hDLE1BQU1LLHVCQUF1QjtBQUM3QixNQUFNNEIsa0JBQWtCO0FBQ3hCLE1BQU1GLGtCQUFrQjtBQUN4QixNQUFNN0IscUJBQXFCO0lBQ2hDOEMsTUFBTTtJQUNOQyxlQUFlO0lBQ2ZDLFlBQVk7SUFDWkMsWUFBWTtBQUNkO0FBQ08sTUFBTWxELDBCQUEwQjtJQUNyQytDLE1BQU07SUFDTkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLFlBQVk7QUFDZDtBQUNPLE1BQU1qQixzQkFBc0I7SUFBQztDQUFPO0FBQ3BDLE1BQU1JLHVCQUF1QjtBQUU3QixNQUFNRSxtQ0FBbUM7QUFFekMsTUFBTVosbUJBQW1CO0lBQzlCZ0IsUUFBUTtJQUNSQyxRQUFRO0FBQ1Y7QUFNTyxNQUFNdkMsNkJBQTZCO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFTSxNQUFNK0IscUJBQXFCLElBQUllLElBQVk7SUFDaEQ3RDtJQUNBSTtJQUNBTDtJQUNBRTtDQUNEIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxzcmNcXHNoYXJlZFxcbGliXFxjb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUIGZyb20gJy4vbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQnXG5cbmV4cG9ydCB7IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUIH1cblxuZXhwb3J0IHR5cGUgVmFsdWVPZjxUPiA9IFJlcXVpcmVkPFQ+W2tleW9mIFRdXG5cbmV4cG9ydCBjb25zdCBDT01QSUxFUl9OQU1FUyA9IHtcbiAgY2xpZW50OiAnY2xpZW50JyxcbiAgc2VydmVyOiAnc2VydmVyJyxcbiAgZWRnZVNlcnZlcjogJ2VkZ2Utc2VydmVyJyxcbn0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgQ29tcGlsZXJOYW1lVmFsdWVzID0gVmFsdWVPZjx0eXBlb2YgQ09NUElMRVJfTkFNRVM+XG5cbmV4cG9ydCBjb25zdCBDT01QSUxFUl9JTkRFWEVTOiB7XG4gIFtjb21waWxlcktleSBpbiBDb21waWxlck5hbWVWYWx1ZXNdOiBudW1iZXJcbn0gPSB7XG4gIFtDT01QSUxFUl9OQU1FUy5jbGllbnRdOiAwLFxuICBbQ09NUElMRVJfTkFNRVMuc2VydmVyXTogMSxcbiAgW0NPTVBJTEVSX05BTUVTLmVkZ2VTZXJ2ZXJdOiAyLFxufSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEUgPSAnL19ub3QtZm91bmQnXG5leHBvcnQgY29uc3QgVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEVfRU5UUlkgPSBgJHtVTkRFUlNDT1JFX05PVF9GT1VORF9ST1VURX0vcGFnZWBcbmV4cG9ydCBjb25zdCBQSEFTRV9FWFBPUlQgPSAncGhhc2UtZXhwb3J0J1xuZXhwb3J0IGNvbnN0IFBIQVNFX1BST0RVQ1RJT05fQlVJTEQgPSAncGhhc2UtcHJvZHVjdGlvbi1idWlsZCdcbmV4cG9ydCBjb25zdCBQSEFTRV9QUk9EVUNUSU9OX1NFUlZFUiA9ICdwaGFzZS1wcm9kdWN0aW9uLXNlcnZlcidcbmV4cG9ydCBjb25zdCBQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVIgPSAncGhhc2UtZGV2ZWxvcG1lbnQtc2VydmVyJ1xuZXhwb3J0IGNvbnN0IFBIQVNFX1RFU1QgPSAncGhhc2UtdGVzdCdcbmV4cG9ydCBjb25zdCBQSEFTRV9JTkZPID0gJ3BoYXNlLWluZm8nXG5leHBvcnQgY29uc3QgUEFHRVNfTUFOSUZFU1QgPSAncGFnZXMtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBXRUJQQUNLX1NUQVRTID0gJ3dlYnBhY2stc3RhdHMuanNvbidcbmV4cG9ydCBjb25zdCBBUFBfUEFUSFNfTUFOSUZFU1QgPSAnYXBwLXBhdGhzLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgQVBQX1BBVEhfUk9VVEVTX01BTklGRVNUID0gJ2FwcC1wYXRoLXJvdXRlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IEJVSUxEX01BTklGRVNUID0gJ2J1aWxkLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgQVBQX0JVSUxEX01BTklGRVNUID0gJ2FwcC1idWlsZC1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1QgPSAnZnVuY3Rpb25zLWNvbmZpZy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFNVQlJFU09VUkNFX0lOVEVHUklUWV9NQU5JRkVTVCA9ICdzdWJyZXNvdXJjZS1pbnRlZ3JpdHktbWFuaWZlc3QnXG5leHBvcnQgY29uc3QgTkVYVF9GT05UX01BTklGRVNUID0gJ25leHQtZm9udC1tYW5pZmVzdCdcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFSS0VSID0gJ2V4cG9ydC1tYXJrZXIuanNvbidcbmV4cG9ydCBjb25zdCBFWFBPUlRfREVUQUlMID0gJ2V4cG9ydC1kZXRhaWwuanNvbidcbmV4cG9ydCBjb25zdCBQUkVSRU5ERVJfTUFOSUZFU1QgPSAncHJlcmVuZGVyLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgUk9VVEVTX01BTklGRVNUID0gJ3JvdXRlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IElNQUdFU19NQU5JRkVTVCA9ICdpbWFnZXMtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBTRVJWRVJfRklMRVNfTUFOSUZFU1QgPSAncmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb24nXG5leHBvcnQgY29uc3QgREVWX0NMSUVOVF9QQUdFU19NQU5JRkVTVCA9ICdfZGV2UGFnZXNNYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IE1JRERMRVdBUkVfTUFOSUZFU1QgPSAnbWlkZGxld2FyZS1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFRVUkJPUEFDS19DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCA9XG4gICdfY2xpZW50TWlkZGxld2FyZU1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgREVWX0NMSUVOVF9NSURETEVXQVJFX01BTklGRVNUID0gJ19kZXZNaWRkbGV3YXJlTWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBSRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCA9ICdyZWFjdC1sb2FkYWJsZS1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9ESVJFQ1RPUlkgPSAnc2VydmVyJ1xuZXhwb3J0IGNvbnN0IENPTkZJR19GSUxFUyA9IFtcbiAgJ25leHQuY29uZmlnLmpzJyxcbiAgJ25leHQuY29uZmlnLm1qcycsXG4gICduZXh0LmNvbmZpZy50cycsXG5dXG5leHBvcnQgY29uc3QgQlVJTERfSURfRklMRSA9ICdCVUlMRF9JRCdcbmV4cG9ydCBjb25zdCBCTE9DS0VEX1BBR0VTID0gWycvX2RvY3VtZW50JywgJy9fYXBwJywgJy9fZXJyb3InXVxuZXhwb3J0IGNvbnN0IENMSUVOVF9QVUJMSUNfRklMRVNfUEFUSCA9ICdwdWJsaWMnXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19QQVRIID0gJ3N0YXRpYydcbmV4cG9ydCBjb25zdCBTVFJJTkdfTElURVJBTF9EUk9QX0JVTkRMRSA9ICdfX05FWFRfRFJPUF9DTElFTlRfRklMRV9fJ1xuZXhwb3J0IGNvbnN0IE5FWFRfQlVJTFRJTl9ET0NVTUVOVCA9ICdfX05FWFRfQlVJTFRJTl9ET0NVTUVOVF9fJ1xuZXhwb3J0IGNvbnN0IEJBUlJFTF9PUFRJTUlaQVRJT05fUFJFRklYID0gJ19fYmFycmVsX29wdGltaXplX18nXG5cbi8vIHNlcnZlci9bZW50cnldL3BhZ2VfY2xpZW50LXJlZmVyZW5jZS1tYW5pZmVzdC5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9SRUZFUkVOQ0VfTUFOSUZFU1QgPSAnY2xpZW50LXJlZmVyZW5jZS1tYW5pZmVzdCdcbi8vIHNlcnZlci9zZXJ2ZXItcmVmZXJlbmNlLW1hbmlmZXN0XG5leHBvcnQgY29uc3QgU0VSVkVSX1JFRkVSRU5DRV9NQU5JRkVTVCA9ICdzZXJ2ZXItcmVmZXJlbmNlLW1hbmlmZXN0J1xuLy8gc2VydmVyL21pZGRsZXdhcmUtYnVpbGQtbWFuaWZlc3QuanNcbmV4cG9ydCBjb25zdCBNSURETEVXQVJFX0JVSUxEX01BTklGRVNUID0gJ21pZGRsZXdhcmUtYnVpbGQtbWFuaWZlc3QnXG4vLyBzZXJ2ZXIvbWlkZGxld2FyZS1yZWFjdC1sb2FkYWJsZS1tYW5pZmVzdC5qc1xuZXhwb3J0IGNvbnN0IE1JRERMRVdBUkVfUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1QgPVxuICAnbWlkZGxld2FyZS1yZWFjdC1sb2FkYWJsZS1tYW5pZmVzdCdcbi8vIHNlcnZlci9pbnRlcmNlcHRpb24tcm91dGUtcmV3cml0ZS1tYW5pZmVzdC5qc1xuZXhwb3J0IGNvbnN0IElOVEVSQ0VQVElPTl9ST1VURV9SRVdSSVRFX01BTklGRVNUID1cbiAgJ2ludGVyY2VwdGlvbi1yb3V0ZS1yZXdyaXRlLW1hbmlmZXN0J1xuXG4vLyBzdGF0aWMvcnVudGltZS9tYWluLmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4gPSBgbWFpbmBcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFAgPSBgJHtDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTn0tYXBwYFxuLy8gbmV4dCBpbnRlcm5hbCBjbGllbnQgY29tcG9uZW50cyBjaHVuayBmb3IgbGF5b3V0c1xuZXhwb3J0IGNvbnN0IEFQUF9DTElFTlRfSU5URVJOQUxTID0gJ2FwcC1wYWdlcy1pbnRlcm5hbHMnXG4vLyBzdGF0aWMvcnVudGltZS9yZWFjdC1yZWZyZXNoLmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1JFQUNUX1JFRlJFU0ggPSBgcmVhY3QtcmVmcmVzaGBcbi8vIHN0YXRpYy9ydW50aW1lL2FtcC5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9BTVAgPSBgYW1wYFxuLy8gc3RhdGljL3J1bnRpbWUvd2VicGFjay5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9XRUJQQUNLID0gYHdlYnBhY2tgXG4vLyBzdGF0aWMvcnVudGltZS9wb2x5ZmlsbHMuanNcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTID0gJ3BvbHlmaWxscydcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTX1NZTUJPTCA9IFN5bWJvbChcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU1xuKVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUlVOVElNRV9XRUJQQUNLID0gJ3dlYnBhY2stcnVudGltZSdcbmV4cG9ydCBjb25zdCBFREdFX1JVTlRJTUVfV0VCUEFDSyA9ICdlZGdlLXJ1bnRpbWUtd2VicGFjaydcbmV4cG9ydCBjb25zdCBTVEFUSUNfUFJPUFNfSUQgPSAnX19OX1NTRydcbmV4cG9ydCBjb25zdCBTRVJWRVJfUFJPUFNfSUQgPSAnX19OX1NTUCdcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFUklGX0ZPTlQgPSB7XG4gIG5hbWU6ICdUaW1lcyBOZXcgUm9tYW4nLFxuICB4QXZnQ2hhcldpZHRoOiA4MjEsXG4gIGF6QXZnV2lkdGg6IDg1NC4zOTUzNDg4MzcyMDkzLFxuICB1bml0c1BlckVtOiAyMDQ4LFxufVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0FOU19TRVJJRl9GT05UID0ge1xuICBuYW1lOiAnQXJpYWwnLFxuICB4QXZnQ2hhcldpZHRoOiA5MDQsXG4gIGF6QXZnV2lkdGg6IDkzNC41MTE2Mjc5MDY5NzY3LFxuICB1bml0c1BlckVtOiAyMDQ4LFxufVxuZXhwb3J0IGNvbnN0IFNUQVRJQ19TVEFUVVNfUEFHRVMgPSBbJy81MDAnXVxuZXhwb3J0IGNvbnN0IFRSQUNFX09VVFBVVF9WRVJTSU9OID0gMVxuLy8gaW4gYE1CYFxuZXhwb3J0IGNvbnN0IFRVUkJPX1RSQUNFX0RFRkFVTFRfTUVNT1JZX0xJTUlUID0gNjAwMFxuXG5leHBvcnQgY29uc3QgUlNDX01PRFVMRV9UWVBFUyA9IHtcbiAgY2xpZW50OiAnY2xpZW50JyxcbiAgc2VydmVyOiAnc2VydmVyJyxcbn0gYXMgY29uc3RcblxuLy8gY29tcGFyaW5nXG4vLyBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL2VkZ2UtcnVudGltZVxuLy8gd2l0aFxuLy8gaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9nbG9iYWxzLmh0bWxcbmV4cG9ydCBjb25zdCBFREdFX1VOU1VQUE9SVEVEX05PREVfQVBJUyA9IFtcbiAgJ2NsZWFySW1tZWRpYXRlJyxcbiAgJ3NldEltbWVkaWF0ZScsXG4gICdCcm9hZGNhc3RDaGFubmVsJyxcbiAgJ0J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3knLFxuICAnQ29tcHJlc3Npb25TdHJlYW0nLFxuICAnQ291bnRRdWV1aW5nU3RyYXRlZ3knLFxuICAnRGVjb21wcmVzc2lvblN0cmVhbScsXG4gICdEb21FeGNlcHRpb24nLFxuICAnTWVzc2FnZUNoYW5uZWwnLFxuICAnTWVzc2FnZUV2ZW50JyxcbiAgJ01lc3NhZ2VQb3J0JyxcbiAgJ1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXInLFxuICAnUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCcsXG4gICdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyJyxcbiAgJ1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyJyxcbiAgJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInLFxuXVxuXG5leHBvcnQgY29uc3QgU1lTVEVNX0VOVFJZUE9JTlRTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4sXG4gIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNILFxuICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QLFxuICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFAsXG5dKVxuIl0sIm5hbWVzIjpbIkFQUF9CVUlMRF9NQU5JRkVTVCIsIkFQUF9DTElFTlRfSU5URVJOQUxTIiwiQVBQX1BBVEhTX01BTklGRVNUIiwiQVBQX1BBVEhfUk9VVEVTX01BTklGRVNUIiwiQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVgiLCJCTE9DS0VEX1BBR0VTIiwiQlVJTERfSURfRklMRSIsIkJVSUxEX01BTklGRVNUIiwiQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIIiwiQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUEFUSCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9BTVAiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTiIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFMiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTX1NZTUJPTCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1dFQlBBQ0siLCJDT01QSUxFUl9JTkRFWEVTIiwiQ09NUElMRVJfTkFNRVMiLCJDT05GSUdfRklMRVMiLCJERUZBVUxUX1JVTlRJTUVfV0VCUEFDSyIsIkRFRkFVTFRfU0FOU19TRVJJRl9GT05UIiwiREVGQVVMVF9TRVJJRl9GT05UIiwiREVWX0NMSUVOVF9NSURETEVXQVJFX01BTklGRVNUIiwiREVWX0NMSUVOVF9QQUdFU19NQU5JRkVTVCIsIkVER0VfUlVOVElNRV9XRUJQQUNLIiwiRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMiLCJFWFBPUlRfREVUQUlMIiwiRVhQT1JUX01BUktFUiIsIkZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1QiLCJJTUFHRVNfTUFOSUZFU1QiLCJJTlRFUkNFUFRJT05fUk9VVEVfUkVXUklURV9NQU5JRkVTVCIsIk1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1QiLCJNSURETEVXQVJFX01BTklGRVNUIiwiTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCIsIk1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUIiwiTkVYVF9CVUlMVElOX0RPQ1VNRU5UIiwiTkVYVF9GT05UX01BTklGRVNUIiwiUEFHRVNfTUFOSUZFU1QiLCJQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVIiLCJQSEFTRV9FWFBPUlQiLCJQSEFTRV9JTkZPIiwiUEhBU0VfUFJPRFVDVElPTl9CVUlMRCIsIlBIQVNFX1BST0RVQ1RJT05fU0VSVkVSIiwiUEhBU0VfVEVTVCIsIlBSRVJFTkRFUl9NQU5JRkVTVCIsIlJFQUNUX0xPQURBQkxFX01BTklGRVNUIiwiUk9VVEVTX01BTklGRVNUIiwiUlNDX01PRFVMRV9UWVBFUyIsIlNFUlZFUl9ESVJFQ1RPUlkiLCJTRVJWRVJfRklMRVNfTUFOSUZFU1QiLCJTRVJWRVJfUFJPUFNfSUQiLCJTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUIiwiU1RBVElDX1BST1BTX0lEIiwiU1RBVElDX1NUQVRVU19QQUdFUyIsIlNUUklOR19MSVRFUkFMX0RST1BfQlVORExFIiwiU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUIiwiU1lTVEVNX0VOVFJZUE9JTlRTIiwiVFJBQ0VfT1VUUFVUX1ZFUlNJT04iLCJUVVJCT1BBQ0tfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1QiLCJUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCIsIlVOREVSU0NPUkVfTk9UX0ZPVU5EX1JPVVRFIiwiVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEVfRU5UUlkiLCJXRUJQQUNLX1NUQVRTIiwiY2xpZW50Iiwic2VydmVyIiwiZWRnZVNlcnZlciIsIlN5bWJvbCIsIm5hbWUiLCJ4QXZnQ2hhcldpZHRoIiwiYXpBdmdXaWR0aCIsInVuaXRzUGVyRW0iLCJTZXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/constants.js\n");
|
76
|
-
|
77
|
-
/***/ }),
|
78
|
-
|
79
|
-
/***/ "./node_modules/next/dist/shared/lib/encode-uri-path.js":
|
80
|
-
/*!**************************************************************!*\
|
81
|
-
!*** ./node_modules/next/dist/shared/lib/encode-uri-path.js ***!
|
82
|
-
\**************************************************************/
|
83
|
-
/***/ ((__unused_webpack_module, exports) => {
|
84
|
-
|
85
|
-
"use strict";
|
86
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"encodeURIPath\", ({\n enumerable: true,\n get: function() {\n return encodeURIPath;\n }\n}));\nfunction encodeURIPath(file) {\n return file.split('/').map((p)=>encodeURIComponent(p)).join('/');\n} //# sourceMappingURL=encode-uri-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvZW5jb2RlLXVyaS1wYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBQWdCQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxjQUFjQyxJQUFZO0lBQ3hDLE9BQU9BLEtBQ0pDLEtBQUssQ0FBQyxLQUNOQyxHQUFHLENBQUMsQ0FBQ0MsSUFBTUMsbUJBQW1CRCxJQUM5QkUsSUFBSSxDQUFDO0FBQ1YiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXHNyY1xcc2hhcmVkXFxsaWJcXGVuY29kZS11cmktcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJUGF0aChmaWxlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGVcbiAgICAuc3BsaXQoJy8nKVxuICAgIC5tYXAoKHApID0+IGVuY29kZVVSSUNvbXBvbmVudChwKSlcbiAgICAuam9pbignLycpXG59XG4iXSwibmFtZXMiOlsiZW5jb2RlVVJJUGF0aCIsImZpbGUiLCJzcGxpdCIsIm1hcCIsInAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/encode-uri-path.js\n");
|
87
|
-
|
88
|
-
/***/ }),
|
89
|
-
|
90
|
-
/***/ "./node_modules/next/dist/shared/lib/head.js":
|
91
|
-
/*!***************************************************!*\
|
92
|
-
!*** ./node_modules/next/dist/shared/lib/head.js ***!
|
93
|
-
\***************************************************/
|
94
|
-
/***/ ((module, exports, __webpack_require__) => {
|
95
|
-
|
96
|
-
"use strict";
|
97
|
-
eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n defaultHead: function() {\n return defaultHead;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"react\"));\nconst _sideeffect = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./side-effect */ \"./node_modules/next/dist/shared/lib/side-effect.js\"));\nconst _ampcontextsharedruntime = __webpack_require__(/*! ./amp-context.shared-runtime */ \"./node_modules/next/dist/server/route-modules/pages/vendored/contexts/amp-context.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ./head-manager-context.shared-runtime */ \"./node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js\");\nconst _ampmode = __webpack_require__(/*! ./amp-mode */ \"./node_modules/next/dist/shared/lib/amp-mode.js\");\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction defaultHead(inAmpMode) {\n if (inAmpMode === void 0) inAmpMode = false;\n const head = [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n charSet: \"utf-8\"\n }, \"charset\")\n ];\n if (!inAmpMode) {\n head.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }, \"viewport\"));\n }\n return head;\n}\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list;\n }\n // Adds support for React.Fragment\n if (child.type === _react.default.Fragment) {\n return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{\n if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {\n return fragmentList;\n }\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n return list.concat(child);\n}\nconst METATYPES = [\n 'name',\n 'httpEquiv',\n 'charSet',\n 'itemProp'\n];\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/ function unique() {\n const keys = new Set();\n const tags = new Set();\n const metaTypes = new Set();\n const metaCategories = {};\n return (h)=>{\n let isUnique = true;\n let hasKey = false;\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true;\n const key = h.key.slice(h.key.indexOf('$') + 1);\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n }\n // eslint-disable-next-line default-case\n switch(h.type){\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n break;\n case 'meta':\n for(let i = 0, len = METATYPES.length; i < len; i++){\n const metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n const category = h.props[metatype];\n const categories = metaCategories[metatype] || new Set();\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n break;\n }\n return isUnique;\n };\n}\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */ function reduceComponents(headChildrenElements, props) {\n const { inAmpMode } = props;\n return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{\n const key = c.key || i;\n if (false) {}\n if (true) {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {\n const srcMessage = c.props['src'] ? '<script> tag with src=\"' + c.props['src'] + '\"' : \"inline <script>\";\n (0, _warnonce.warnOnce)(\"Do not add <script> tags using next/head (see \" + srcMessage + \"). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component\");\n } else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {\n (0, _warnonce.warnOnce)('Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"' + c.props['href'] + '\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component');\n }\n }\n return /*#__PURE__*/ _react.default.cloneElement(c, {\n key\n });\n });\n}\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */ function Head(param) {\n let { children } = param;\n const ampState = (0, _react.useContext)(_ampcontextsharedruntime.AmpStateContext);\n const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _ampmode.isInAmpMode)(ampState),\n children: children\n });\n}\nconst _default = Head;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGVhZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXVNQSxPQUFtQjtlQUFuQjs7SUExTGdCQTtlQUFBQSxFQUFBQTs7Ozs7OztpR0FWRzt5Q0FDYTsrS0FDRzt5QkFDUDt3R0FDSDtBQU1sQixTQUFTQSxTQUFBQSxtQkFBWUMsQ0FBQUEsaUZBQWlCO0lBQWpCQSxJQUFBQSxDQUFBQSxZQUFBQSxTQUFBQTtJQUMxQixNQUFNQyxPQUFPOztZQUFPRSxPQUFBQSxFQUFRO1lBQVk7UUFBYTtLQUNyRDtRQUNFRixDQUFBQSxJQUFLRyxJQUFJO1lBQ0RDLENBQUFBLElBQUFBLENBQUs7WUFBV0MsTUFBQUEsR0FBUTtZQUF5QjtRQUUzRDtJQUNBO0lBQ0Y7QUFFQTtJQUlFO0lBQ0EsSUFBSSxPQUFPRyxVQUFVLFlBQVksT0FBT0EsVUFBVSxVQUFVO1FBQzFELE9BQU9ELFVBQUFBLFlBQUFBLE9BQUFBLFVBQUFBLFVBQUFBO1FBQ1Q7SUFDQTtJQUNBLElBQUlDLE1BQU1DLElBQUksS0FBS0MsY0FBSyxDQUFDQztRQUN2QixPQUFPSixHQUFBQSxFQUFLSyxHQUFBQSxHQUFNLENBQ2hCO1FBQ0FGLE9BQUFBLEtBQUFBLEVBQUssQ0FBQ0csR0FBQUEsQ0FFSixDQUNFSyxHQUhVLENBQUNKLEVBR1hJLEtBSGtCLENBQUNWLENBR25CVSxDQUNBQyxJQUp5QkosSUFJekJJLENBQUFBLENBSitCSCxNQUkvQkcsQ0FBQUEsQ0FKdUMsRUFBRUYsR0FJekNFLEdBSitDLENBQ2pELENBR0VBLENBQUFBLFFBQUFBLEVBQUFBLE1BQUFBLEtBRUEsSUFDRSxPQUFPQTtnQkFHUCxPQUFPRCxrQkFBQUEsWUFBQUEsT0FBQUEsa0JBQUFBLFVBQUFBO2dCQUNUO1lBQ0E7WUFFRixDQUFFO1FBR1I7SUFDQTtJQUNGO0FBRUE7SUFBbUI7SUFBUTtJQUFhO0lBQVc7SUFBVztDQUU5RDs7Ozs7SUFNRSxNQUFNSSxFQUFBQSxLQUFP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QSxPQUFBQSxPQUFBQSxDQUFBQSxZQUFBQSxDQUFBQSxHQUFBQTtZQUFJO1FBQ3JDO0lBQ0o7QUFFQTs7OztJQUljLE1BQUVkLEdBQUFBLEtBQVEsRUFBaUMsR0FBM0M7SUFDWixNQUFNNkMsUUFBQUEsRUFBQUEsQ0FBV0MsRUFBQUEsRUFBQUE7SUFDakIsTUFBTUUsV0FBQUEsQ0FBQUEsQ0FBY0YsRUFBQUEsR0FBQUEsSUFBQUEsVUFBQUEsRUFBQUEsQ0FBVSxFQUFDRyxzQkFBQUEsZUFBQUE7SUFDL0IscUJBQ0UscUJBQUNDLENBQUFBLGtCQUFNO1FBQ0xDLEdBQUFBLFdBQUFBLEdBQUFBLENBQUFBLEdBQUFBLElBQXlCekIsUUFBQUEsR0FBQUEsRUFBQUEsWUFBQUEsT0FBQUEsRUFBQUE7UUFDekJzQixhQUFhQSxZQUFBQTtRQUNiakUsV0FBV3FFLEVBQUFBLEVBQUFBO2tCQUVWcEQsQ0FBQUEsQ0FBQUEsR0FBQUEsU0FBQUEsV0FBQUEsRUFBQUE7O0lBR1AiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXHNyY1xcc2hhcmVkXFxsaWJcXGhlYWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCBFZmZlY3QgZnJvbSAnLi9zaWRlLWVmZmVjdCdcbmltcG9ydCB7IEFtcFN0YXRlQ29udGV4dCB9IGZyb20gJy4vYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBIZWFkTWFuYWdlckNvbnRleHQgfSBmcm9tICcuL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgaXNJbkFtcE1vZGUgfSBmcm9tICcuL2FtcC1tb2RlJ1xuaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICcuL3V0aWxzL3dhcm4tb25jZSdcblxudHlwZSBXaXRoSW5BbXBNb2RlID0ge1xuICBpbkFtcE1vZGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0SGVhZChpbkFtcE1vZGUgPSBmYWxzZSk6IEpTWC5FbGVtZW50W10ge1xuICBjb25zdCBoZWFkID0gWzxtZXRhIGNoYXJTZXQ9XCJ1dGYtOFwiIGtleT1cImNoYXJzZXRcIiAvPl1cbiAgaWYgKCFpbkFtcE1vZGUpIHtcbiAgICBoZWFkLnB1c2goXG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoXCIga2V5PVwidmlld3BvcnRcIiAvPlxuICAgIClcbiAgfVxuICByZXR1cm4gaGVhZFxufVxuXG5mdW5jdGlvbiBvbmx5UmVhY3RFbGVtZW50KFxuICBsaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gIGNoaWxkOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudW1iZXIgfCBzdHJpbmdcbik6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiB7XG4gIC8vIFJlYWN0IGNoaWxkcmVuIGNhbiBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCIgaW4gdGhpcyBjYXNlIHdlIGlnbm9yZSB0aGVtIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGlzdFxuICB9XG4gIC8vIEFkZHMgc3VwcG9ydCBmb3IgUmVhY3QuRnJhZ21lbnRcbiAgaWYgKGNoaWxkLnR5cGUgPT09IFJlYWN0LkZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBAdHlwZXMvcmVhY3QgZG9lcyBub3QgcmVtb3ZlIGZyYWdtZW50cyBidXQgdGhpcyBjb3VsZCBhbHNvIHJldHVybiBSZWFjdFBvcnRhbFtdXG4gICAgICBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkLnByb3BzLmNoaWxkcmVuKS5yZWR1Y2UoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQHR5cGVzL3JlYWN0IGRvZXMgbm90IHJlbW92ZSBmcmFnbWVudHMgYnV0IHRoaXMgY291bGQgYWxzbyByZXR1cm4gUmVhY3RQb3J0YWxbXVxuICAgICAgICAoXG4gICAgICAgICAgZnJhZ21lbnRMaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgICAgICAgZnJhZ21lbnRDaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVtYmVyIHwgc3RyaW5nXG4gICAgICAgICk6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZyYWdtZW50Q2hpbGQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZnJhZ21lbnRDaGlsZCA9PT0gJ251bWJlcidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmcmFnbWVudExpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZyYWdtZW50TGlzdC5jb25jYXQoZnJhZ21lbnRDaGlsZClcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KGNoaWxkKVxufVxuXG5jb25zdCBNRVRBVFlQRVMgPSBbJ25hbWUnLCAnaHR0cEVxdWl2JywgJ2NoYXJTZXQnLCAnaXRlbVByb3AnXVxuXG4vKlxuIHJldHVybnMgYSBmdW5jdGlvbiBmb3IgZmlsdGVyaW5nIGhlYWQgY2hpbGQgZWxlbWVudHNcbiB3aGljaCBzaG91bGRuJ3QgYmUgZHVwbGljYXRlZCwgbGlrZSA8dGl0bGUvPlxuIEFsc28gYWRkcyBzdXBwb3J0IGZvciBkZWR1cGxpY2F0ZWQgYGtleWAgcHJvcGVydGllc1xuKi9cbmZ1bmN0aW9uIHVuaXF1ZSgpIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoKVxuICBjb25zdCB0YWdzID0gbmV3IFNldCgpXG4gIGNvbnN0IG1ldGFUeXBlcyA9IG5ldyBTZXQoKVxuICBjb25zdCBtZXRhQ2F0ZWdvcmllczogeyBbbWV0YXR5cGU6IHN0cmluZ106IFNldDxzdHJpbmc+IH0gPSB7fVxuXG4gIHJldHVybiAoaDogUmVhY3QuUmVhY3RFbGVtZW50PGFueT4pID0+IHtcbiAgICBsZXQgaXNVbmlxdWUgPSB0cnVlXG4gICAgbGV0IGhhc0tleSA9IGZhbHNlXG5cbiAgICBpZiAoaC5rZXkgJiYgdHlwZW9mIGgua2V5ICE9PSAnbnVtYmVyJyAmJiBoLmtleS5pbmRleE9mKCckJykgPiAwKSB7XG4gICAgICBoYXNLZXkgPSB0cnVlXG4gICAgICBjb25zdCBrZXkgPSBoLmtleS5zbGljZShoLmtleS5pbmRleE9mKCckJykgKyAxKVxuICAgICAgaWYgKGtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgaXNVbmlxdWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5cy5hZGQoa2V5KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICBzd2l0Y2ggKGgudHlwZSkge1xuICAgICAgY2FzZSAndGl0bGUnOlxuICAgICAgY2FzZSAnYmFzZSc6XG4gICAgICAgIGlmICh0YWdzLmhhcyhoLnR5cGUpKSB7XG4gICAgICAgICAgaXNVbmlxdWUgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhZ3MuYWRkKGgudHlwZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbWV0YSc6XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNRVRBVFlQRVMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBtZXRhdHlwZSA9IE1FVEFUWVBFU1tpXVxuICAgICAgICAgIGlmICghaC5wcm9wcy5oYXNPd25Qcm9wZXJ0eShtZXRhdHlwZSkpIGNvbnRpbnVlXG5cbiAgICAgICAgICBpZiAobWV0YXR5cGUgPT09ICdjaGFyU2V0Jykge1xuICAgICAgICAgICAgaWYgKG1ldGFUeXBlcy5oYXMobWV0YXR5cGUpKSB7XG4gICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1ldGFUeXBlcy5hZGQobWV0YXR5cGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gaC5wcm9wc1ttZXRhdHlwZV1cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gfHwgbmV3IFNldCgpXG4gICAgICAgICAgICBpZiAoKG1ldGF0eXBlICE9PSAnbmFtZScgfHwgIWhhc0tleSkgJiYgY2F0ZWdvcmllcy5oYXMoY2F0ZWdvcnkpKSB7XG4gICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KVxuICAgICAgICAgICAgICBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gPSBjYXRlZ29yaWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVW5pcXVlXG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGhlYWRDaGlsZHJlbkVsZW1lbnRzIExpc3Qgb2YgY2hpbGRyZW4gb2YgPEhlYWQ+XG4gKi9cbmZ1bmN0aW9uIHJlZHVjZUNvbXBvbmVudHM8VCBleHRlbmRzIHt9ICYgV2l0aEluQW1wTW9kZT4oXG4gIGhlYWRDaGlsZHJlbkVsZW1lbnRzOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gIHByb3BzOiBUXG4pIHtcbiAgY29uc3QgeyBpbkFtcE1vZGUgfSA9IHByb3BzXG4gIHJldHVybiBoZWFkQ2hpbGRyZW5FbGVtZW50c1xuICAgIC5yZWR1Y2Uob25seVJlYWN0RWxlbWVudCwgW10pXG4gICAgLnJldmVyc2UoKVxuICAgIC5jb25jYXQoZGVmYXVsdEhlYWQoaW5BbXBNb2RlKS5yZXZlcnNlKCkpXG4gICAgLmZpbHRlcih1bmlxdWUoKSlcbiAgICAucmV2ZXJzZSgpXG4gICAgLm1hcCgoYzogUmVhY3QuUmVhY3RFbGVtZW50PGFueT4sIGk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYy5rZXkgfHwgaVxuICAgICAgaWYgKFxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ2RldmVsb3BtZW50JyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5fX05FWFRfT1BUSU1JWkVfRk9OVFMgJiZcbiAgICAgICAgIWluQW1wTW9kZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjLnR5cGUgPT09ICdsaW5rJyAmJlxuICAgICAgICAgIGMucHJvcHNbJ2hyZWYnXSAmJlxuICAgICAgICAgIC8vIFRPRE8ocHJhdGVla2JoQCk6IFJlcGxhY2UgdGhpcyB3aXRoIGNvbnN0IGZyb20gYGNvbnN0YW50c2Agd2hlbiB0aGUgdHJlZSBzaGFraW5nIHdvcmtzLlxuICAgICAgICAgIFsnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MnLCAnaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQvJ10uc29tZShcbiAgICAgICAgICAgICh1cmwpID0+IGMucHJvcHNbJ2hyZWYnXS5zdGFydHNXaXRoKHVybClcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG5ld1Byb3BzID0geyAuLi4oYy5wcm9wcyB8fCB7fSkgfVxuICAgICAgICAgIG5ld1Byb3BzWydkYXRhLWhyZWYnXSA9IG5ld1Byb3BzWydocmVmJ11cbiAgICAgICAgICBuZXdQcm9wc1snaHJlZiddID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICAvLyBBZGQgdGhpcyBhdHRyaWJ1dGUgdG8gbWFrZSBpdCBlYXN5IHRvIGlkZW50aWZ5IG9wdGltaXplZCB0YWdzXG4gICAgICAgICAgbmV3UHJvcHNbJ2RhdGEtb3B0aW1pemVkLWZvbnRzJ10gPSB0cnVlXG5cbiAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGMsIG5ld1Byb3BzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgLy8gb21pdCBKU09OLUxEIHN0cnVjdHVyZWQgZGF0YSBzbmlwcGV0cyBmcm9tIHRoZSB3YXJuaW5nXG4gICAgICAgIGlmIChjLnR5cGUgPT09ICdzY3JpcHQnICYmIGMucHJvcHNbJ3R5cGUnXSAhPT0gJ2FwcGxpY2F0aW9uL2xkK2pzb24nKSB7XG4gICAgICAgICAgY29uc3Qgc3JjTWVzc2FnZSA9IGMucHJvcHNbJ3NyYyddXG4gICAgICAgICAgICA/IGA8c2NyaXB0PiB0YWcgd2l0aCBzcmM9XCIke2MucHJvcHNbJ3NyYyddfVwiYFxuICAgICAgICAgICAgOiBgaW5saW5lIDxzY3JpcHQ+YFxuICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgYERvIG5vdCBhZGQgPHNjcmlwdD4gdGFncyB1c2luZyBuZXh0L2hlYWQgKHNlZSAke3NyY01lc3NhZ2V9KS4gVXNlIG5leHQvc2NyaXB0IGluc3RlYWQuIFxcblNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbm8tc2NyaXB0LXRhZ3MtaW4taGVhZC1jb21wb25lbnRgXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2UgaWYgKGMudHlwZSA9PT0gJ2xpbmsnICYmIGMucHJvcHNbJ3JlbCddID09PSAnc3R5bGVzaGVldCcpIHtcbiAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIGBEbyBub3QgYWRkIHN0eWxlc2hlZXRzIHVzaW5nIG5leHQvaGVhZCAoc2VlIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIj4gdGFnIHdpdGggaHJlZj1cIiR7Yy5wcm9wc1snaHJlZiddfVwiKS4gVXNlIERvY3VtZW50IGluc3RlYWQuIFxcblNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbm8tc3R5bGVzaGVldHMtaW4taGVhZC1jb21wb25lbnRgXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGMsIHsga2V5IH0pXG4gICAgfSlcbn1cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpbmplY3RzIGVsZW1lbnRzIHRvIGA8aGVhZD5gIG9mIHlvdXIgcGFnZS5cbiAqIFRvIGF2b2lkIGR1cGxpY2F0ZWQgYHRhZ3NgIGluIGA8aGVhZD5gIHlvdSBjYW4gdXNlIHRoZSBga2V5YCBwcm9wZXJ0eSwgd2hpY2ggd2lsbCBtYWtlIHN1cmUgZXZlcnkgdGFnIGlzIG9ubHkgcmVuZGVyZWQgb25jZS5cbiAqL1xuZnVuY3Rpb24gSGVhZCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IGFtcFN0YXRlID0gdXNlQ29udGV4dChBbXBTdGF0ZUNvbnRleHQpXG4gIGNvbnN0IGhlYWRNYW5hZ2VyID0gdXNlQ29udGV4dChIZWFkTWFuYWdlckNvbnRleHQpXG4gIHJldHVybiAoXG4gICAgPEVmZmVjdFxuICAgICAgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGU9e3JlZHVjZUNvbXBvbmVudHN9XG4gICAgICBoZWFkTWFuYWdlcj17aGVhZE1hbmFnZXJ9XG4gICAgICBpbkFtcE1vZGU9e2lzSW5BbXBNb2RlKGFtcFN0YXRlKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9FZmZlY3Q+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZFxuIl0sIm5hbWVzIjpbImRlZmF1bHRIZWFkIiwiaW5BbXBNb2RlIiwiaGVhZCIsIm1ldGEiLCJjaGFyU2V0IiwicHVzaCIsIm5hbWUiLCJjb250ZW50Iiwib25seVJlYWN0RWxlbWVudCIsImxpc3QiLCJjaGlsZCIsInR5cGUiLCJSZWFjdCIsIkZyYWdtZW50IiwiY29uY2F0IiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwicHJvcHMiLCJjaGlsZHJlbiIsInJlZHVjZSIsImZyYWdtZW50TGlzdCIsImZyYWdtZW50Q2hpbGQiLCJNRVRBVFlQRVMiLCJ1bmlxdWUiLCJrZXlzIiwiU2V0IiwidGFncyIsIm1ldGFUeXBlcyIsIm1ldGFDYXRlZ29yaWVzIiwiaCIsImlzVW5pcXVlIiwiaGFzS2V5Iiwia2V5IiwiaW5kZXhPZiIsInNsaWNlIiwiaGFzIiwiYWRkIiwiaSIsImxlbiIsImxlbmd0aCIsIm1ldGF0eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYXRlZ29yeSIsImNhdGVnb3JpZXMiLCJyZWR1Y2VDb21wb25lbnRzIiwiaGVhZENoaWxkcmVuRWxlbWVudHMiLCJyZXZlcnNlIiwiZmlsdGVyIiwibWFwIiwiYyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIl9fTkVYVF9PUFRJTUlaRV9GT05UUyIsInNvbWUiLCJ1cmwiLCJzdGFydHNXaXRoIiwibmV3UHJvcHMiLCJ1bmRlZmluZWQiLCJjbG9uZUVsZW1lbnQiLCJzcmNNZXNzYWdlIiwid2Fybk9uY2UiLCJIZWFkIiwiYW1wU3RhdGUiLCJ1c2VDb250ZXh0IiwiQW1wU3RhdGVDb250ZXh0IiwiaGVhZE1hbmFnZXIiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJFZmZlY3QiLCJyZWR1Y2VDb21wb25lbnRzVG9TdGF0ZSIsImlzSW5BbXBNb2RlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/head.js\n");
|
98
|
-
|
99
|
-
/***/ }),
|
100
|
-
|
101
|
-
/***/ "./node_modules/next/dist/shared/lib/is-plain-object.js":
|
102
|
-
/*!**************************************************************!*\
|
103
|
-
!*** ./node_modules/next/dist/shared/lib/is-plain-object.js ***!
|
104
|
-
\**************************************************************/
|
105
|
-
/***/ ((__unused_webpack_module, exports) => {
|
106
|
-
|
107
|
-
"use strict";
|
108
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getObjectClassLabel: function() {\n return getObjectClassLabel;\n },\n isPlainObject: function() {\n return isPlainObject;\n }\n});\nfunction getObjectClassLabel(value) {\n return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n if (getObjectClassLabel(value) !== '[object Object]') {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n /**\n * this used to be previously:\n *\n * `return prototype === null || prototype === Object.prototype`\n *\n * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n *\n * It was changed to the current implementation since it's resilient to serialization.\n */ return prototype === null || prototype.hasOwnProperty('isPrototypeOf');\n} //# sourceMappingURL=is-plain-object.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFnQkEsbUJBQW1CO2VBQW5CQTs7SUFJQUMsYUFBYTtlQUFiQTs7O0FBSlQsU0FBU0Qsb0JBQW9CRSxLQUFVO0lBQzVDLE9BQU9DLE9BQU9DLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUNKO0FBQ3hDO0FBRU8sU0FBU0QsY0FBY0MsS0FBVTtJQUN0QyxJQUFJRixvQkFBb0JFLFdBQVcsbUJBQW1CO1FBQ3BELE9BQU87SUFDVDtJQUVBLE1BQU1FLFlBQVlELE9BQU9JLGNBQWMsQ0FBQ0w7SUFFeEM7Ozs7Ozs7O0dBUUMsR0FDRCxPQUFPRSxjQUFjLFFBQVFBLFVBQVVJLGNBQWMsQ0FBQztBQUN4RCIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcc3JjXFxzaGFyZWRcXGxpYlxcaXMtcGxhaW4tb2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRPYmplY3RDbGFzc0xhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmIChnZXRPYmplY3RDbGFzc0xhYmVsKHZhbHVlKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSlcblxuICAvKipcbiAgICogdGhpcyB1c2VkIHRvIGJlIHByZXZpb3VzbHk6XG4gICAqXG4gICAqIGByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZWBcbiAgICpcbiAgICogYnV0IEVkZ2UgUnVudGltZSBleHBvc2UgT2JqZWN0IGZyb20gdm0sIGJlaW5nIHRoYXQga2luZCBvZiB0eXBlLWNoZWNraW5nIHdyb25nbHkgZmFpbC5cbiAgICpcbiAgICogSXQgd2FzIGNoYW5nZWQgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc2luY2UgaXQncyByZXNpbGllbnQgdG8gc2VyaWFsaXphdGlvbi5cbiAgICovXG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlLmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJylcbn1cbiJdLCJuYW1lcyI6WyJnZXRPYmplY3RDbGFzc0xhYmVsIiwiaXNQbGFpbk9iamVjdCIsInZhbHVlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNPd25Qcm9wZXJ0eSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/is-plain-object.js\n");
|
109
|
-
|
110
|
-
/***/ }),
|
111
|
-
|
112
|
-
/***/ "./node_modules/next/dist/shared/lib/is-thenable.js":
|
113
|
-
/*!**********************************************************!*\
|
114
|
-
!*** ./node_modules/next/dist/shared/lib/is-thenable.js ***!
|
115
|
-
\**********************************************************/
|
116
|
-
/***/ ((__unused_webpack_module, exports) => {
|
117
|
-
|
118
|
-
"use strict";
|
119
|
-
eval("/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isThenable\", ({\n enumerable: true,\n get: function() {\n return isThenable;\n }\n}));\nfunction isThenable(promise) {\n return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function';\n} //# sourceMappingURL=is-thenable.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaXMtdGhlbmFibGUuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0NBS0M7Ozs7OENBQ2VBOzs7ZUFBQUE7OztBQUFULFNBQVNBLFdBQ2RDLE9BQXVCO0lBRXZCLE9BQ0VBLFlBQVksUUFDWixPQUFPQSxZQUFZLFlBQ25CLFVBQVVBLFdBQ1YsT0FBT0EsUUFBUUMsSUFBSSxLQUFLO0FBRTVCIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxzcmNcXHNoYXJlZFxcbGliXFxpcy10aGVuYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrIHRvIHNlZSBpZiBhIHZhbHVlIGlzIFRoZW5hYmxlLlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIHRoZSBtYXliZS10aGVuYWJsZSB2YWx1ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlbmFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGhlbmFibGU8VCA9IHVua25vd24+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+IHwgVFxuKTogcHJvbWlzZSBpcyBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIChcbiAgICBwcm9taXNlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHByb21pc2UgPT09ICdvYmplY3QnICYmXG4gICAgJ3RoZW4nIGluIHByb21pc2UgJiZcbiAgICB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJpc1RoZW5hYmxlIiwicHJvbWlzZSIsInRoZW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/is-thenable.js\n");
|
120
|
-
|
121
|
-
/***/ }),
|
122
|
-
|
123
|
-
/***/ "./node_modules/next/dist/shared/lib/modern-browserslist-target.js":
|
124
|
-
/*!*************************************************************************!*\
|
125
|
-
!*** ./node_modules/next/dist/shared/lib/modern-browserslist-target.js ***!
|
126
|
-
\*************************************************************************/
|
127
|
-
/***/ ((module) => {
|
128
|
-
|
129
|
-
"use strict";
|
130
|
-
eval("// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */ \nconst MODERN_BROWSERSLIST_TARGET = [\n 'chrome 64',\n 'edge 79',\n 'firefox 67',\n 'opera 51',\n 'safari 12'\n];\nmodule.exports = MODERN_BROWSERSLIST_TARGET; //# sourceMappingURL=modern-browserslist-target.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanMiLCJtYXBwaW5ncyI6IkFBQUEsb0ZBQW9GO0FBQ3BGLGtFQUFrRTtBQUNsRTs7Ozs7Q0FLQztBQUNELE1BQU1BLDZCQUE2QjtJQUNqQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFREMsT0FBT0MsT0FBTyxHQUFHRiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcc3JjXFxzaGFyZWRcXGxpYlxcbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTm90ZTogVGhpcyBmaWxlIGlzIEpTIGJlY2F1c2UgaXQncyB1c2VkIGJ5IHRoZSB0YXNrZmlsZS1zd2MuanMgZmlsZSwgd2hpY2ggaXMgSlMuXG4vLyBLZWVwIGZpbGUgY2hhbmdlcyBpbiBzeW5jIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYC5kLnRzYCBmaWxlcy5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBicm93c2VyIHZlcnNpb25zIHRoYXQgc3VwcG9ydCBhbGwgb2YgdGhlIGZvbGxvd2luZzpcbiAqIHN0YXRpYyBpbXBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vZXM2LW1vZHVsZVxuICogZHluYW1pYyBpbXBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vZXM2LW1vZHVsZS1keW5hbWljLWltcG9ydFxuICogaW1wb3J0Lm1ldGE6IGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWphdmFzY3JpcHRfb3BlcmF0b3JzX2ltcG9ydF9tZXRhXG4gKi9cbmNvbnN0IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUID0gW1xuICAnY2hyb21lIDY0JyxcbiAgJ2VkZ2UgNzknLFxuICAnZmlyZWZveCA2NycsXG4gICdvcGVyYSA1MScsXG4gICdzYWZhcmkgMTInLFxuXVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUXG4iXSwibmFtZXMiOlsiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJtb2R1bGUiLCJleHBvcnRzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/modern-browserslist-target.js\n");
|
131
|
-
|
132
|
-
/***/ }),
|
133
|
-
|
134
|
-
/***/ "./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js":
|
135
|
-
/*!******************************************************************************!*\
|
136
|
-
!*** ./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js ***!
|
137
|
-
\******************************************************************************/
|
138
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
139
|
-
|
140
|
-
"use strict";
|
141
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"denormalizePagePath\", ({\n enumerable: true,\n get: function() {\n return denormalizePagePath;\n }\n}));\nconst _utils = __webpack_require__(/*! ../router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _normalizepathsep = __webpack_require__(/*! ./normalize-path-sep */ \"./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\");\nfunction denormalizePagePath(page) {\n let _page = (0, _normalizepathsep.normalizePathSep)(page);\n return _page.startsWith('/index/') && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== '/index' ? _page : '/';\n} //# sourceMappingURL=denormalize-page-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQVdnQkE7OztlQUFBQTs7O21DQVhlOzhDQUNFO0FBVTFCLFNBQVNBLG9CQUFvQkMsSUFBWTtJQUM5QyxJQUFJQyxRQUFRQyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQUFBLEVBQWlCRjtJQUM3QixPQUFPQyxNQUFNRSxVQUFVLENBQUMsY0FBYyxDQUFDQyxDQUFBQSxHQUFBQSxPQUFBQSxjQUFBQSxFQUFlSCxTQUNsREEsTUFBTUksS0FBSyxDQUFDLEtBQ1pKLFVBQVUsV0FDUkEsUUFDQTtBQUNSIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXHNyY1xcc2hhcmVkXFxsaWJcXHBhZ2UtcGF0aFxcZGVub3JtYWxpemUtcGFnZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi4vcm91dGVyL3V0aWxzJ1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aFNlcCB9IGZyb20gJy4vbm9ybWFsaXplLXBhdGgtc2VwJ1xuXG4vKipcbiAqIFBlcmZvcm1zIHRoZSBvcHBvc2l0ZSB0cmFuc2Zvcm1hdGlvbiBvZiBgbm9ybWFsaXplUGFnZVBhdGhgLiBOb3RlIHRoYXRcbiAqIHRoaXMgZnVuY3Rpb24gaXMgbm90IGlkZW1wb3RlbnQgZWl0aGVyIGluIGNhc2VzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICogbGVhZGluZyBgL2luZGV4YCBmb3IgdGhlIHBhZ2UuIEV4YW1wbGVzOlxuICogIC0gYC9pbmRleGAgLT4gYC9gXG4gKiAgLSBgL2luZGV4L2Zvb2AgLT4gYC9mb29gXG4gKiAgLSBgL2luZGV4L2luZGV4YCAtPiBgL2luZGV4YFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVub3JtYWxpemVQYWdlUGF0aChwYWdlOiBzdHJpbmcpIHtcbiAgbGV0IF9wYWdlID0gbm9ybWFsaXplUGF0aFNlcChwYWdlKVxuICByZXR1cm4gX3BhZ2Uuc3RhcnRzV2l0aCgnL2luZGV4LycpICYmICFpc0R5bmFtaWNSb3V0ZShfcGFnZSlcbiAgICA/IF9wYWdlLnNsaWNlKDYpXG4gICAgOiBfcGFnZSAhPT0gJy9pbmRleCdcbiAgICAgID8gX3BhZ2VcbiAgICAgIDogJy8nXG59XG4iXSwibmFtZXMiOlsiZGVub3JtYWxpemVQYWdlUGF0aCIsInBhZ2UiLCJfcGFnZSIsIm5vcm1hbGl6ZVBhdGhTZXAiLCJzdGFydHNXaXRoIiwiaXNEeW5hbWljUm91dGUiLCJzbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\n");
|
142
|
-
|
143
|
-
/***/ }),
|
144
|
-
|
145
|
-
/***/ "./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js":
|
146
|
-
/*!*****************************************************************************!*\
|
147
|
-
!*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***!
|
148
|
-
\*****************************************************************************/
|
149
|
-
/***/ ((__unused_webpack_module, exports) => {
|
150
|
-
|
151
|
-
"use strict";
|
152
|
-
eval("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith('/') ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQzs7OztzREFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0EsbUJBQW1CQyxJQUFZO0lBQzdDLE9BQU9BLEtBQUtDLFVBQVUsQ0FBQyxPQUFPRCxPQUFRLE1BQUdBO0FBQzNDIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXHNyY1xcc2hhcmVkXFxsaWJcXHBhZ2UtcGF0aFxcZW5zdXJlLWxlYWRpbmctc2xhc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3IgYSBnaXZlbiBwYWdlIHBhdGgsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIGEgbGVhZGluZyBzbGFzaC5cbiAqIElmIHRoZXJlIGlzIG5vdCBhIGxlYWRpbmcgc2xhc2gsIG9uZSBpcyBhZGRlZCwgb3RoZXJ3aXNlIGl0IGlzIG5vb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVMZWFkaW5nU2xhc2gocGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/IHBhdGggOiBgLyR7cGF0aH1gXG59XG4iXSwibmFtZXMiOlsiZW5zdXJlTGVhZGluZ1NsYXNoIiwicGF0aCIsInN0YXJ0c1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n");
|
153
|
-
|
154
|
-
/***/ }),
|
155
|
-
|
156
|
-
/***/ "./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js":
|
157
|
-
/*!****************************************************************************!*\
|
158
|
-
!*** ./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js ***!
|
159
|
-
\****************************************************************************/
|
160
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
161
|
-
|
162
|
-
"use strict";
|
163
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePagePath\", ({\n enumerable: true,\n get: function() {\n return normalizePagePath;\n }\n}));\nconst _ensureleadingslash = __webpack_require__(/*! ./ensure-leading-slash */ \"./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _utils = __webpack_require__(/*! ../router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _utils1 = __webpack_require__(/*! ../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nfunction normalizePagePath(page) {\n const normalized = /^\\/index(\\/|$)/.test(page) && !(0, _utils.isDynamicRoute)(page) ? \"/index\" + page : page === '/' ? '/index' : (0, _ensureleadingslash.ensureLeadingSlash)(page);\n if (true) {\n const { posix } = __webpack_require__(/*! path */ \"path\");\n const resolvedPage = posix.normalize(normalized);\n if (resolvedPage !== normalized) {\n throw new _utils1.NormalizeError(\"Requested and resolved page mismatch: \" + normalized + \" \" + resolvedPage);\n }\n }\n return normalized;\n} //# sourceMappingURL=normalize-page-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYWdlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztxREFhZ0JBOzs7ZUFBQUE7OztnREFibUI7bUNBQ0o7b0NBQ0E7QUFXeEIsU0FBU0Esa0JBQWtCQyxJQUFZO0lBQzVDLE1BQU1DLGFBQ0osaUJBQWlCQyxJQUFJLENBQUNGLFNBQVMsQ0FBQ0csQ0FBQUEsR0FBQUEsT0FBQUEsY0FBQUEsRUFBZUgsUUFDMUMsV0FBUUEsT0FDVEEsU0FBUyxNQUNQLFdBQ0FJLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBQUEsRUFBbUJKO0lBRTNCLElBQUlLLElBQW1DLEVBQUU7UUFDdkMsTUFBTSxFQUFFRyxLQUFLLEVBQUUsR0FBR0MsbUJBQU9BLENBQUMsa0JBQU07UUFDaEMsTUFBTUMsZUFBZUYsTUFBTUcsU0FBUyxDQUFDVjtRQUNyQyxJQUFJUyxpQkFBaUJULFlBQVk7WUFDL0IsTUFBTSxJQUFJVyxRQUFBQSxjQUFjLENBQ3JCLDJDQUF3Q1gsYUFBVyxNQUFHUztRQUUzRDtJQUNGO0lBRUEsT0FBT1Q7QUFDVCIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxzcmNcXHNoYXJlZFxcbGliXFxwYWdlLXBhdGhcXG5vcm1hbGl6ZS1wYWdlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5zdXJlTGVhZGluZ1NsYXNoIH0gZnJvbSAnLi9lbnN1cmUtbGVhZGluZy1zbGFzaCdcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi4vcm91dGVyL3V0aWxzJ1xuaW1wb3J0IHsgTm9ybWFsaXplRXJyb3IgfSBmcm9tICcuLi91dGlscydcblxuLyoqXG4gKiBUYWtlcyBhIHBhZ2UgYW5kIHRyYW5zZm9ybXMgaXQgaW50byBpdHMgZmlsZSBjb3VudGVycGFydCBlbnN1cmluZyB0aGF0IHRoZVxuICogb3V0cHV0IGlzIG5vcm1hbGl6ZWQuIE5vdGUgdGhpcyBmdW5jdGlvbiBpcyBub3QgaWRlbXBvdGVudCBiZWNhdXNlIGEgcGFnZVxuICogYC9pbmRleGAgY2FuIGJlIHJlZmVyZW5jaW5nIGAvaW5kZXgvaW5kZXguanNgIGFuZCBgL2luZGV4L2luZGV4YCBjb3VsZCBiZVxuICogcmVmZXJlbmNpbmcgYC9pbmRleC9pbmRleC9pbmRleC5qc2AuIEV4YW1wbGVzOlxuICogIC0gYC9gIC0+IGAvaW5kZXhgXG4gKiAgLSBgL2luZGV4L2Zvb2AgLT4gYC9pbmRleC9pbmRleC9mb29gXG4gKiAgLSBgL2luZGV4YCAtPiBgL2luZGV4L2luZGV4YFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGFnZVBhdGgocGFnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9XG4gICAgL15cXC9pbmRleChcXC98JCkvLnRlc3QocGFnZSkgJiYgIWlzRHluYW1pY1JvdXRlKHBhZ2UpXG4gICAgICA/IGAvaW5kZXgke3BhZ2V9YFxuICAgICAgOiBwYWdlID09PSAnLydcbiAgICAgICAgPyAnL2luZGV4J1xuICAgICAgICA6IGVuc3VyZUxlYWRpbmdTbGFzaChwYWdlKVxuXG4gIGlmIChwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09ICdlZGdlJykge1xuICAgIGNvbnN0IHsgcG9zaXggfSA9IHJlcXVpcmUoJ3BhdGgnKVxuICAgIGNvbnN0IHJlc29sdmVkUGFnZSA9IHBvc2l4Lm5vcm1hbGl6ZShub3JtYWxpemVkKVxuICAgIGlmIChyZXNvbHZlZFBhZ2UgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIHRocm93IG5ldyBOb3JtYWxpemVFcnJvcihcbiAgICAgICAgYFJlcXVlc3RlZCBhbmQgcmVzb2x2ZWQgcGFnZSBtaXNtYXRjaDogJHtub3JtYWxpemVkfSAke3Jlc29sdmVkUGFnZX1gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVQYWdlUGF0aCIsInBhZ2UiLCJub3JtYWxpemVkIiwidGVzdCIsImlzRHluYW1pY1JvdXRlIiwiZW5zdXJlTGVhZGluZ1NsYXNoIiwicHJvY2VzcyIsImVudiIsIk5FWFRfUlVOVElNRSIsInBvc2l4IiwicmVxdWlyZSIsInJlc29sdmVkUGFnZSIsIm5vcm1hbGl6ZSIsIk5vcm1hbGl6ZUVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js\n");
|
164
|
-
|
165
|
-
/***/ }),
|
166
|
-
|
167
|
-
/***/ "./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js":
|
168
|
-
/*!***************************************************************************!*\
|
169
|
-
!*** ./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js ***!
|
170
|
-
\***************************************************************************/
|
171
|
-
/***/ ((__unused_webpack_module, exports) => {
|
172
|
-
|
173
|
-
"use strict";
|
174
|
-
eval("/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathSep\", ({\n enumerable: true,\n get: function() {\n return normalizePathSep;\n }\n}));\nfunction normalizePathSep(path) {\n return path.replace(/\\\\/g, '/');\n} //# sourceMappingURL=normalize-path-sep.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYXRoLXNlcC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDOzs7O29EQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxpQkFBaUJDLElBQVk7SUFDM0MsT0FBT0EsS0FBS0MsT0FBTyxDQUFDLE9BQU87QUFDN0IiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcc3JjXFxzaGFyZWRcXGxpYlxccGFnZS1wYXRoXFxub3JtYWxpemUtcGF0aC1zZXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3IgYSBnaXZlbiBwYWdlIHBhdGgsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIGJhY2tzbGFzaFxuICogZXNjYXBpbmcgc2xhc2hlcyBpbiB0aGUgcGF0aC4gRXhhbXBsZTpcbiAqICAtIGBmb29cXC9iYXJcXC9iYXpgIC0+IGBmb28vYmFyL2JhemBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGhTZXAocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpXG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplUGF0aFNlcCIsInBhdGgiLCJyZXBsYWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\n");
|
175
|
-
|
176
|
-
/***/ }),
|
177
|
-
|
178
|
-
/***/ "./node_modules/next/dist/shared/lib/router/utils/app-paths.js":
|
179
|
-
/*!*********************************************************************!*\
|
180
|
-
!*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***!
|
181
|
-
\*********************************************************************/
|
182
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
183
|
-
|
184
|
-
"use strict";
|
185
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split('/').reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === 'page' || segment === 'route') && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, ''));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, '$1');\n} //# sourceMappingURL=app-paths.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFzQmdCQSxnQkFBZ0I7ZUFBaEJBOztJQW1DQUMsZUFBZTtlQUFmQTs7O2dEQXpEbUI7cUNBQ0o7QUFxQnhCLFNBQVNELGlCQUFpQkUsS0FBYTtJQUM1QyxPQUFPQyxDQUFBQSxHQUFBQSxvQkFBQUEsa0JBQUFBLEVBQ0xELE1BQU1FLEtBQUssQ0FBQyxLQUFLQyxNQUFNLENBQUMsQ0FBQ0MsVUFBVUMsU0FBU0MsT0FBT0M7UUFDakQsOEJBQThCO1FBQzlCLElBQUksQ0FBQ0YsU0FBUztZQUNaLE9BQU9EO1FBQ1Q7UUFFQSxzQkFBc0I7UUFDdEIsSUFBSUksQ0FBQUEsR0FBQUEsU0FBQUEsY0FBQUEsRUFBZUgsVUFBVTtZQUMzQixPQUFPRDtRQUNUO1FBRUEsaUNBQWlDO1FBQ2pDLElBQUlDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztZQUN0QixPQUFPRDtRQUNUO1FBRUEsdURBQXVEO1FBQ3ZELElBQ0dDLENBQUFBLFlBQVksVUFBVUEsWUFBWSxRQUFNLElBQ3pDQyxVQUFVQyxTQUFTRSxNQUFNLEdBQUcsR0FDNUI7WUFDQSxPQUFPTDtRQUNUO1FBRUEsT0FBVUEsV0FBUyxNQUFHQztJQUN4QixHQUFHO0FBRVA7QUFNTyxTQUFTTixnQkFBZ0JXLEdBQVc7SUFDekMsT0FBT0EsSUFBSUMsT0FBTyxDQUNoQixlQUNBO0FBR0oiLCJzb3VyY2VzIjpbIkM6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxhcHAtcGF0aHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5zdXJlTGVhZGluZ1NsYXNoIH0gZnJvbSAnLi4vLi4vcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoJ1xuaW1wb3J0IHsgaXNHcm91cFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zZWdtZW50J1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gYXBwIHJvdXRlIHNvIGl0IHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXF1ZXN0IHBhdGguIEVzc2VudGlhbGx5XG4gKiBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb25zOlxuICpcbiAqIC0gYC8oZGFzaGJvYXJkKS91c2VyL1tpZF0vcGFnZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvKGRhc2hib2FyZCkvYWNjb3VudC9wYWdlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvdXNlci9baWRdL3BhZ2VgIHRvIGAvdXNlci9baWRdYFxuICogLSBgL2FjY291bnQvcGFnZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3BhZ2VgIHRvIGAvYFxuICogLSBgLyhkYXNoYm9hcmQpL3VzZXIvW2lkXS9yb3V0ZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvKGRhc2hib2FyZCkvYWNjb3VudC9yb3V0ZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3VzZXIvW2lkXS9yb3V0ZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvYWNjb3VudC9yb3V0ZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3JvdXRlYCB0byBgL2BcbiAqIC0gYC9gIHRvIGAvYFxuICpcbiAqIEBwYXJhbSByb3V0ZSB0aGUgYXBwIHJvdXRlIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgcGF0aG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUFwcFBhdGgocm91dGU6IHN0cmluZykge1xuICByZXR1cm4gZW5zdXJlTGVhZGluZ1NsYXNoKFxuICAgIHJvdXRlLnNwbGl0KCcvJykucmVkdWNlKChwYXRobmFtZSwgc2VnbWVudCwgaW5kZXgsIHNlZ21lbnRzKSA9PiB7XG4gICAgICAvLyBFbXB0eSBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgIGlmICghc2VnbWVudCkge1xuICAgICAgICByZXR1cm4gcGF0aG5hbWVcbiAgICAgIH1cblxuICAgICAgLy8gR3JvdXBzIGFyZSBpZ25vcmVkLlxuICAgICAgaWYgKGlzR3JvdXBTZWdtZW50KHNlZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICAvLyBQYXJhbGxlbCBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgIGlmIChzZWdtZW50WzBdID09PSAnQCcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lXG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IHNlZ21lbnQgKGlmIGl0J3MgYSBsZWFmKSBzaG91bGQgYmUgaWdub3JlZC5cbiAgICAgIGlmIChcbiAgICAgICAgKHNlZ21lbnQgPT09ICdwYWdlJyB8fCBzZWdtZW50ID09PSAncm91dGUnKSAmJlxuICAgICAgICBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7cGF0aG5hbWV9LyR7c2VnbWVudH1gXG4gICAgfSwgJycpXG4gIClcbn1cblxuLyoqXG4gKiBTdHJpcHMgdGhlIGAucnNjYCBleHRlbnNpb24gaWYgaXQncyBpbiB0aGUgcGF0aG5hbWUuXG4gKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb24gZnVsbCB1cmxzIGl0IGNoZWNrcyBgP2AgZm9yIHNlYXJjaFBhcmFtcyBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJzY1VSTCh1cmw6IHN0cmluZykge1xuICByZXR1cm4gdXJsLnJlcGxhY2UoXG4gICAgL1xcLnJzYygkfFxcPykvLFxuICAgIC8vICQxIGVuc3VyZXMgYD9gIGlzIHByZXNlcnZlZFxuICAgICckMSdcbiAgKVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZUFwcFBhdGgiLCJub3JtYWxpemVSc2NVUkwiLCJyb3V0ZSIsImVuc3VyZUxlYWRpbmdTbGFzaCIsInNwbGl0IiwicmVkdWNlIiwicGF0aG5hbWUiLCJzZWdtZW50IiwiaW5kZXgiLCJzZWdtZW50cyIsImlzR3JvdXBTZWdtZW50IiwibGVuZ3RoIiwidXJsIiwicmVwbGFjZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n");
|
186
|
-
|
187
|
-
/***/ }),
|
188
|
-
|
189
|
-
/***/ "./node_modules/next/dist/shared/lib/router/utils/index.js":
|
190
|
-
/*!*****************************************************************!*\
|
191
|
-
!*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***!
|
192
|
-
\*****************************************************************/
|
193
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
194
|
-
|
195
|
-
"use strict";
|
196
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRouteObjects: function() {\n return _sortedroutes.getSortedRouteObjects;\n },\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUEwQkEscUJBQXFCO2VBQXJCQSxjQUFBQSxxQkFBcUI7O0lBQXRDQyxlQUFlO2VBQWZBLGNBQUFBLGVBQWU7O0lBQ2ZDLGNBQWM7ZUFBZEEsV0FBQUEsY0FBYzs7OzBDQURnQzt1Q0FDeEIiLCJzb3VyY2VzIjpbIkM6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxpbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBnZXRTb3J0ZWRSb3V0ZXMsIGdldFNvcnRlZFJvdXRlT2JqZWN0cyB9IGZyb20gJy4vc29ydGVkLXJvdXRlcydcbmV4cG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi9pcy1keW5hbWljJ1xuIl0sIm5hbWVzIjpbImdldFNvcnRlZFJvdXRlT2JqZWN0cyIsImdldFNvcnRlZFJvdXRlcyIsImlzRHluYW1pY1JvdXRlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/index.js\n");
|
197
|
-
|
198
|
-
/***/ }),
|
199
|
-
|
200
|
-
/***/ "./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js":
|
201
|
-
/*!**********************************************************************!*\
|
202
|
-
!*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***!
|
203
|
-
\**********************************************************************/
|
204
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
205
|
-
|
206
|
-
"use strict";
|
207
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/lib/interception-routes */ \"./node_modules/next/dist/server/lib/interception-routes.js\");\n// Identify /[param]/ in route string\nconst TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\nfunction isDynamicRoute(route) {\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWR5bmFtaWMuanMiLCJtYXBwaW5ncyI6Ijs7OztrREFRZ0JBOzs7ZUFBQUE7OztnREFMVDtBQUVQLHFDQUFxQztBQUNyQyxNQUFNQyxhQUFhO0FBRVosU0FBU0QsZUFBZUUsS0FBYTtJQUMxQyxJQUFJQyxDQUFBQSxHQUFBQSxvQkFBQUEsMEJBQUFBLEVBQTJCRCxRQUFRO1FBQ3JDQSxRQUFRRSxDQUFBQSxHQUFBQSxvQkFBQUEsbUNBQUFBLEVBQW9DRixPQUFPRyxnQkFBZ0I7SUFDckU7SUFFQSxPQUFPSixXQUFXSyxJQUFJLENBQUNKO0FBQ3pCIiwic291cmNlcyI6WyJDOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcaXMtZHluYW1pYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbixcbiAgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9saWIvaW50ZXJjZXB0aW9uLXJvdXRlcydcblxuLy8gSWRlbnRpZnkgL1twYXJhbV0vIGluIHJvdXRlIHN0cmluZ1xuY29uc3QgVEVTVF9ST1VURSA9IC9cXC9cXFtbXi9dKz9cXF0oPz1cXC98JCkvXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNSb3V0ZShyb3V0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChyb3V0ZSkpIHtcbiAgICByb3V0ZSA9IGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uKHJvdXRlKS5pbnRlcmNlcHRlZFJvdXRlXG4gIH1cblxuICByZXR1cm4gVEVTVF9ST1VURS50ZXN0KHJvdXRlKVxufVxuIl0sIm5hbWVzIjpbImlzRHluYW1pY1JvdXRlIiwiVEVTVF9ST1VURSIsInJvdXRlIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbiIsImludGVyY2VwdGVkUm91dGUiLCJ0ZXN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n");
|
208
|
-
|
209
|
-
/***/ }),
|
210
|
-
|
211
|
-
/***/ "./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js":
|
212
|
-
/*!*************************************************************************!*\
|
213
|
-
!*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***!
|
214
|
-
\*************************************************************************/
|
215
|
-
/***/ ((__unused_webpack_module, exports) => {
|
216
|
-
|
217
|
-
"use strict";
|
218
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRouteObjects: function() {\n return getSortedRouteObjects;\n },\n getSortedRoutes: function() {\n return getSortedRoutes;\n }\n});\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split('/').filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = '/';\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[]'), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[...]'), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get('[]')._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === '/' ? '/' : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").');\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get('[...]')._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get('[[...]]')._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw new Error(\"Catch-all must be the last part of the URL.\");\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith('[') && segmentName.endsWith(']')) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith('…')) {\n throw new Error(\"Detected a three-dot character ('…') at ('\" + segmentName + \"'). Did you mean ('...')?\");\n }\n if (segmentName.startsWith('...')) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith('[') || segmentName.endsWith(']')) {\n throw new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\");\n }\n if (segmentName.startsWith('.')) {\n throw new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\");\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\");\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path');\n }\n if (slug.replace(/\\W/g, '') === nextSegment.replace(/\\W/g, '')) {\n throw new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path');\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).');\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = '[[...]]';\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").');\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = '[...]';\n }\n } else {\n if (isOptional) {\n throw new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").');\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = '[]';\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n}\nfunction getSortedRouteObjects(objects, getter) {\n // We're assuming here that all the pathnames are unique, that way we can\n // sort the list and use the index as the key.\n const indexes = {};\n const pathnames = [];\n for(let i = 0; i < objects.length; i++){\n const pathname = getter(objects[i]);\n indexes[pathname] = i;\n pathnames[i] = pathname;\n }\n // Sort the pathnames.\n const sorted = getSortedRoutes(pathnames);\n // Map the sorted pathnames back to the original objects using the new sorted\n // index.\n return sorted.map((pathname)=>objects[indexes[pathname]]);\n} //# sourceMappingURL=sorted-routes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3NvcnRlZC1yb3V0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBaU9nQkEscUJBQXFCO2VBQXJCQTs7SUF0QkFDLGVBQWU7ZUFBZkE7OztBQTNNaEIsTUFBTUM7SUFPSkMsT0FBT0MsT0FBZSxFQUFRO1FBQzVCLElBQUksQ0FBQ0MsT0FBTyxDQUFDRCxRQUFRRSxLQUFLLENBQUMsS0FBS0MsTUFBTSxDQUFDQyxVQUFVLEVBQUUsRUFBRTtJQUN2RDtJQUVBQyxTQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQ0MsT0FBTztJQUNyQjtJQUVRQSxRQUFRQyxNQUFvQixFQUFZO1FBQWhDQSxJQUFBQSxXQUFBQSxLQUFBQSxHQUFBQSxTQUFpQjtRQUMvQixNQUFNQyxnQkFBZ0I7ZUFBSSxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSTtTQUFHLENBQUNDLElBQUk7UUFDcEQsSUFBSSxJQUFJLENBQUNDLFFBQVEsS0FBSyxNQUFNO1lBQzFCSixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxPQUFPO1FBQ3BEO1FBQ0EsSUFBSSxJQUFJLENBQUNDLFlBQVksS0FBSyxNQUFNO1lBQzlCUCxjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxVQUFVO1FBQ3ZEO1FBQ0EsSUFBSSxJQUFJLENBQUNFLG9CQUFvQixLQUFLLE1BQU07WUFDdENSLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLFlBQVk7UUFDekQ7UUFFQSxNQUFNRyxTQUFTVCxjQUNaVSxHQUFHLENBQUMsQ0FBQ0MsSUFBTSxJQUFJLENBQUNWLFFBQVEsQ0FBQ1csR0FBRyxDQUFDRCxHQUFJYixPQUFPLENBQUUsS0FBRUMsU0FBU1ksSUFBRSxNQUN2REUsTUFBTSxDQUFDLENBQUNDLE1BQU1DLE9BQVM7bUJBQUlEO21CQUFTQzthQUFLLEVBQUUsRUFBRTtRQUVoRCxJQUFJLElBQUksQ0FB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QjtJQUVBLHNCQUFzQjtJQUN0QixNQUFNQyxTQUFTN0QsZ0JBQWdCMEQ7SUFFL0IsNkVBQTZFO0lBQzdFLFNBQVM7SUFDVCxPQUFPRyxPQUFPeEMsR0FBRyxDQUFDLENBQUN1QyxXQUFhTCxPQUFPLENBQUNFLE9BQU8sQ0FBQ0csU0FBUyxDQUFDO0FBQzVEIiwic291cmNlcyI6WyJDOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcc29ydGVkLXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBVcmxOb2RlIHtcbiAgcGxhY2Vob2xkZXI6IGJvb2xlYW4gPSB0cnVlXG4gIGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBVcmxOb2RlPiA9IG5ldyBNYXAoKVxuICBzbHVnTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgcmVzdFNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBvcHRpb25hbFJlc3RTbHVnTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICBpbnNlcnQodXJsUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5faW5zZXJ0KHVybFBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbiksIFtdLCBmYWxzZSlcbiAgfVxuXG4gIHNtb29zaCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Ntb29zaCgpXG4gIH1cblxuICBwcml2YXRlIF9zbW9vc2gocHJlZml4OiBzdHJpbmcgPSAnLycpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2hpbGRyZW5QYXRocyA9IFsuLi50aGlzLmNoaWxkcmVuLmtleXMoKV0uc29ydCgpXG4gICAgaWYgKHRoaXMuc2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgIGNoaWxkcmVuUGF0aHMuc3BsaWNlKGNoaWxkcmVuUGF0aHMuaW5kZXhPZignW10nKSwgMSlcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoJ1suLi5dJyksIDEpXG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoJ1tbLi4uXV0nKSwgMSlcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXMgPSBjaGlsZHJlblBhdGhzXG4gICAgICAubWFwKChjKSA9PiB0aGlzLmNoaWxkcmVuLmdldChjKSEuX3Ntb29zaChgJHtwcmVmaXh9JHtjfS9gKSlcbiAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IFsuLi5wcmV2LCAuLi5jdXJyXSwgW10pXG5cbiAgICBpZiAodGhpcy5zbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgcm91dGVzLnB1c2goXG4gICAgICAgIC4uLnRoaXMuY2hpbGRyZW4uZ2V0KCdbXScpIS5fc21vb3NoKGAke3ByZWZpeH1bJHt0aGlzLnNsdWdOYW1lfV0vYClcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgIGNvbnN0IHIgPSBwcmVmaXggPT09ICcvJyA/ICcvJyA6IHByZWZpeC5zbGljZSgwLCAtMSlcbiAgICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBZb3UgY2Fubm90IGRlZmluZSBhIHJvdXRlIHdpdGggdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgYSBvcHRpb25hbCBjYXRjaC1hbGwgcm91dGUgKFwiJHtyfVwiIGFuZCBcIiR7cn1bWy4uLiR7dGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZX1dXVwiKS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcm91dGVzLnVuc2hpZnQocilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgIHJvdXRlcy5wdXNoKFxuICAgICAgICAuLi50aGlzLmNoaWxkcmVuXG4gICAgICAgICAgLmdldCgnWy4uLl0nKSFcbiAgICAgICAgICAuX3Ntb29zaChgJHtwcmVmaXh9Wy4uLiR7dGhpcy5yZXN0U2x1Z05hbWV9XS9gKVxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICByb3V0ZXMucHVzaChcbiAgICAgICAgLi4udGhpcy5jaGlsZHJlblxuICAgICAgICAgIC5nZXQoJ1tbLi4uXV0nKSFcbiAgICAgICAgICAuX3Ntb29zaChgJHtwcmVmaXh9W1suLi4ke3RoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWV9XV0vYClcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVzXG4gIH1cblxuICBwcml2YXRlIF9pbnNlcnQoXG4gICAgdXJsUGF0aHM6IHN0cmluZ1tdLFxuICAgIHNsdWdOYW1lczogc3RyaW5nW10sXG4gICAgaXNDYXRjaEFsbDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAodXJsUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0NhdGNoQWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGNoLWFsbCBtdXN0IGJlIHRoZSBsYXN0IHBhcnQgb2YgdGhlIFVSTC5gKVxuICAgIH1cblxuICAgIC8vIFRoZSBuZXh0IHNlZ21lbnQgaW4gdGhlIHVybFBhdGhzIGxpc3RcbiAgICBsZXQgbmV4dFNlZ21lbnQgPSB1cmxQYXRoc1swXVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHNlZ21lbnQgbWF0Y2hlcyBgW3NvbWV0aGluZ11gXG4gICAgaWYgKG5leHRTZWdtZW50LnN0YXJ0c1dpdGgoJ1snKSAmJiBuZXh0U2VnbWVudC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAvLyBTdHJpcCBgW2AgYW5kIGBdYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXG4gICAgICBsZXQgc2VnbWVudE5hbWUgPSBuZXh0U2VnbWVudC5zbGljZSgxLCAtMSlcblxuICAgICAgbGV0IGlzT3B0aW9uYWwgPSBmYWxzZVxuICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoJ1snKSAmJiBzZWdtZW50TmFtZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIC8vIFN0cmlwIG9wdGlvbmFsIGBbYCBhbmQgYF1gLCBsZWF2aW5nIG9ubHkgYHNvbWV0aGluZ2BcbiAgICAgICAgc2VnbWVudE5hbWUgPSBzZWdtZW50TmFtZS5zbGljZSgxLCAtMSlcbiAgICAgICAgaXNPcHRpb25hbCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoJ+KApicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRGV0ZWN0ZWQgYSB0aHJlZS1kb3QgY2hhcmFjdGVyICgn4oCmJykgYXQgKCcke3NlZ21lbnROYW1lfScpLiBEaWQgeW91IG1lYW4gKCcuLi4nKT9gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoJy4uLicpKSB7XG4gICAgICAgIC8vIFN0cmlwIGAuLi5gLCBsZWF2aW5nIG9ubHkgYHNvbWV0aGluZ2BcbiAgICAgICAgc2VnbWVudE5hbWUgPSBzZWdtZW50TmFtZS5zdWJzdHJpbmcoMylcbiAgICAgICAgaXNDYXRjaEFsbCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoJ1snKSB8fCBzZWdtZW50TmFtZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VnbWVudCBuYW1lcyBtYXkgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIGV4dHJhIGJyYWNrZXRzICgnJHtzZWdtZW50TmFtZX0nKS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNlZ21lbnQgbmFtZXMgbWF5IG5vdCBzdGFydCB3aXRoIGVycm9uZW91cyBwZXJpb2RzICgnJHtzZWdtZW50TmFtZX0nKS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gaGFuZGxlU2x1ZyhwcmV2aW91c1NsdWc6IHN0cmluZyB8IG51bGwsIG5leHRTbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHByZXZpb3VzU2x1ZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpYyBzZWdtZW50IGFscmVhZHkgaGFzIGEgc2x1ZyBidXQgdGhlIHNsdWcgaXMgbm90IGBzb21ldGhpbmdgXG4gICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBjb2xsaXNpb25zIGxpa2U6XG4gICAgICAgICAgLy8gcGFnZXMvW3Bvc3RdL2luZGV4LmpzXG4gICAgICAgICAgLy8gcGFnZXMvW2lkXS9pbmRleC5qc1xuICAgICAgICAgIC8vIEJlY2F1c2UgY3VycmVudGx5IG11bHRpcGxlIGR5bmFtaWMgcGFyYW1zIG9uIHRoZSBzYW1lIHNlZ21lbnQgbGV2ZWwgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICBpZiAocHJldmlvdXNTbHVnICE9PSBuZXh0U2x1Zykge1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBlcnJvciBzZWVtcyB0byBiZSBjb25mdXNpbmcgZm9yIHVzZXJzLCBuZWVkcyBhbiBlcnJvciBsaW5rLCB0aGUgZGVzY3JpcHRpb24gY2FuIGJlIGJhc2VkIG9uIGFib3ZlIGNvbW1lbnQuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBZb3UgY2Fubm90IHVzZSBkaWZmZXJlbnQgc2x1ZyBuYW1lcyBmb3IgdGhlIHNhbWUgZHluYW1pYyBwYXRoICgnJHtwcmV2aW91c1NsdWd9JyAhPT0gJyR7bmV4dFNsdWd9JykuYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNsdWdOYW1lcy5mb3JFYWNoKChzbHVnKSA9PiB7XG4gICAgICAgICAgaWYgKHNsdWcgPT09IG5leHRTbHVnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBZb3UgY2Fubm90IGhhdmUgdGhlIHNhbWUgc2x1ZyBuYW1lIFwiJHtuZXh0U2x1Z31cIiByZXBlYXQgd2l0aGluIGEgc2luZ2xlIGR5bmFtaWMgcGF0aGBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2x1Zy5yZXBsYWNlKC9cXFcvZywgJycpID09PSBuZXh0U2VnbWVudC5yZXBsYWNlKC9cXFcvZywgJycpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBZb3UgY2Fubm90IGhhdmUgdGhlIHNsdWcgbmFtZXMgXCIke3NsdWd9XCIgYW5kIFwiJHtuZXh0U2x1Z31cIiBkaWZmZXIgb25seSBieSBub24td29yZCBzeW1ib2xzIHdpdGhpbiBhIHNpbmdsZSBkeW5hbWljIHBhdGhgXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHNsdWdOYW1lcy5wdXNoKG5leHRTbHVnKVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICAgIGlmICh0aGlzLnJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBZb3UgY2Fubm90IHVzZSBib3RoIGFuIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjYXRjaC1hbGwgcm91dGUgYXQgdGhlIHNhbWUgbGV2ZWwgKFwiWy4uLiR7dGhpcy5yZXN0U2x1Z05hbWV9XVwiIGFuZCBcIiR7dXJsUGF0aHNbMF19XCIgKS5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFuZGxlU2x1Zyh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lLCBzZWdtZW50TmFtZSlcbiAgICAgICAgICAvLyBzbHVnTmFtZSBpcyBrZXB0IGFzIGl0IGNhbiBvbmx5IGJlIG9uZSBwYXJ0aWN1bGFyIHNsdWdOYW1lXG4gICAgICAgICAgdGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSA9IHNlZ21lbnROYW1lXG4gICAgICAgICAgLy8gbmV4dFNlZ21lbnQgaXMgb3ZlcndyaXR0ZW4gdG8gW1suLi5dXSBzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSBzb3J0ZWQgc3BlY2lmaWNhbGx5XG4gICAgICAgICAgbmV4dFNlZ21lbnQgPSAnW1suLi5dXSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBZb3UgY2Fubm90IHVzZSBib3RoIGFuIG9wdGlvbmFsIGFuZCByZXF1aXJlZCBjYXRjaC1hbGwgcm91dGUgYXQgdGhlIHNhbWUgbGV2ZWwgKFwiW1suLi4ke3RoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWV9XV1cIiBhbmQgXCIke3VybFBhdGhzWzBdfVwiKS5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFuZGxlU2x1Zyh0aGlzLnJlc3RTbHVnTmFtZSwgc2VnbWVudE5hbWUpXG4gICAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICAgIHRoaXMucmVzdFNsdWdOYW1lID0gc2VnbWVudE5hbWVcbiAgICAgICAgICAvLyBuZXh0U2VnbWVudCBpcyBvdmVyd3JpdHRlbiB0byBbLi4uXSBzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSBzb3J0ZWQgc3BlY2lmaWNhbGx5XG4gICAgICAgICAgbmV4dFNlZ21lbnQgPSAnWy4uLl0nXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc09wdGlvbmFsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYE9wdGlvbmFsIHJvdXRlIHBhcmFtZXRlcnMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIChcIiR7dXJsUGF0aHNbMF19XCIpLmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlU2x1Zyh0aGlzLnNsdWdOYW1lLCBzZWdtZW50TmFtZSlcbiAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICB0aGlzLnNsdWdOYW1lID0gc2VnbWVudE5hbWVcbiAgICAgICAgLy8gbmV4dFNlZ21lbnQgaXMgb3ZlcndyaXR0ZW4gdG8gW10gc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgc29ydGVkIHNwZWNpZmljYWxseVxuICAgICAgICBuZXh0U2VnbWVudCA9ICdbXSdcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIFVybE5vZGUgZG9lc24ndCBoYXZlIHRoZSBuZXh0U2VnbWVudCB5ZXQgd2UgY3JlYXRlIGEgbmV3IGNoaWxkIFVybE5vZGVcbiAgICBpZiAoIXRoaXMuY2hpbGRyZW4uaGFzKG5leHRTZWdtZW50KSkge1xuICAgICAgdGhpcy5jaGlsZHJlbi5zZXQobmV4dFNlZ21lbnQsIG5ldyBVcmxOb2RlKCkpXG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlblxuICAgICAgLmdldChuZXh0U2VnbWVudCkhXG4gICAgICAuX2luc2VydCh1cmxQYXRocy5zbGljZSgxKSwgc2x1Z05hbWVzLCBpc0NhdGNoQWxsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3J0ZWRSb3V0ZXMoXG4gIG5vcm1hbGl6ZWRQYWdlczogUmVhZG9ubHlBcnJheTxzdHJpbmc+XG4pOiBzdHJpbmdbXSB7XG4gIC8vIEZpcnN0IHRoZSBVcmxOb2RlIGlzIGNyZWF0ZWQsIGFuZCBldmVyeSBVcmxOb2RlIGNhbiBoYXZlIG9ubHkgMSBkeW5hbWljIHNlZ21lbnRcbiAgLy8gRWcgeW91IGNhbid0IGhhdmUgcGFnZXMvW3Bvc3RdL2FiYy5qcyBhbmQgcGFnZXMvW2hlbGxvXS9zb21ldGhpbmctZWxzZS5qc1xuICAvLyBPbmx5IDEgZHluYW1pYyBzZWdtZW50IHBlciBuZXN0aW5nIGxldmVsXG5cbiAgLy8gU28gaW4gdGhlIGNhc2UgdGhhdCBpcyB0ZXN0L2ludGVncmF0aW9uL2R5bmFtaWMtcm91dGluZyBpdCdsbCBiZSB0aGlzOlxuICAvLyBwYWdlcy9bcG9zdF0vY29tbWVudHMuanNcbiAgLy8gcGFnZXMvYmxvZy9bcG9zdF0vY29tbWVudC9baWRdLmpzXG4gIC8vIEJvdGggYXJlIGZpbmUgYmVjYXVzZSBgcGFnZXMvW3Bvc3RdYCBhbmQgYHBhZ2VzL2Jsb2dgIGFyZSBvbiB0aGUgc2FtZSBsZXZlbFxuICAvLyBTbyBpbiB0aGlzIGNhc2UgYFVybE5vZGVgIGNyZWF0ZWQgaGVyZSBoYXMgYHRoaXMuc2x1Z05hbWUgPT09ICdwb3N0J2BcbiAgLy8gQW5kIHNpbmNlIHlvdXIgUFIgcGFzc2VkIHRocm91Z2ggYHNsdWdOYW1lYCBhcyBhbiBhcnJheSBiYXNpY2FsbHkgaXQnZCBpbmNsdWRpbmcgaXQgaW4gdG9vIG1hbnkgcG9zc2liaWxpdGllc1xuICAvLyBJbnN0ZWFkIHdoYXQgaGFzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGlzIHRoZSB1cHdhcmRzIHBhdGgncyBkeW5hbWljIG5hbWVzXG4gIGNvbnN0IHJvb3QgPSBuZXcgVXJsTm9kZSgpXG5cbiAgLy8gSGVyZSB0aGUgYHJvb3RgIGdldHMgaW5qZWN0ZWQgbXVsdGlwbGUgcGF0aHMsIGFuZCBpbnNlcnQgd2lsbCBicmVhayB0aGVtIHVwIGludG8gc3VibGV2ZWxzXG4gIG5vcm1hbGl6ZWRQYWdlcy5mb3JFYWNoKChwYWdlUGF0aCkgPT4gcm9vdC5pbnNlcnQocGFnZVBhdGgpKVxuICAvLyBTbW9vc2ggd2lsbCB0aGVuIHNvcnQgdGhvc2Ugc3VibGV2ZWxzIHVwIHRvIHRoZSBwb2ludCB3aGVyZSB5b3UgZ2V0IHRoZSBjb3JyZWN0IHJvdXRlIGRlZmluaXRpb24gcHJpb3JpdHlcbiAgcmV0dXJuIHJvb3Quc21vb3NoKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvcnRlZFJvdXRlT2JqZWN0czxUPihcbiAgb2JqZWN0czogVFtdLFxuICBnZXR0ZXI6IChvYmo6IFQpID0+IHN0cmluZ1xuKTogVFtdIHtcbiAgLy8gV2UncmUgYXNzdW1pbmcgaGVyZSB0aGF0IGFsbCB0aGUgcGF0aG5hbWVzIGFyZSB1bmlxdWUsIHRoYXQgd2F5IHdlIGNhblxuICAvLyBzb3J0IHRoZSBsaXN0IGFuZCB1c2UgdGhlIGluZGV4IGFzIHRoZSBrZXkuXG4gIGNvbnN0IGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fVxuICBjb25zdCBwYXRobmFtZXM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcGF0aG5hbWUgPSBnZXR0ZXIob2JqZWN0c1tpXSlcbiAgICBpbmRleGVzW3BhdGhuYW1lXSA9IGlcbiAgICBwYXRobmFtZXNbaV0gPSBwYXRobmFtZVxuICB9XG5cbiAgLy8gU29ydCB0aGUgcGF0aG5hbWVzLlxuICBjb25zdCBzb3J0ZWQgPSBnZXRTb3J0ZWRSb3V0ZXMocGF0aG5hbWVzKVxuXG4gIC8vIE1hcCB0aGUgc29ydGVkIHBhdGhuYW1lcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvYmplY3RzIHVzaW5nIHRoZSBuZXcgc29ydGVkXG4gIC8vIGluZGV4LlxuICByZXR1cm4gc29ydGVkLm1hcCgocGF0aG5hbWUpID0+IG9iamVjdHNbaW5kZXhlc1twYXRobmFtZV1dKVxufVxuIl0sIm5hbWVzIjpbImdldFNvcnRlZFJvdXRlT2JqZWN0cyIsImdldFNvcnRlZFJvdXRlcyIsIlVybE5vZGUiLCJpbnNlcnQiLCJ1cmxQYXRoIiwiX2luc2VydCIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInNtb29zaCIsIl9zbW9vc2giLCJwcmVmaXgiLCJjaGlsZHJlblBhdGhzIiwiY2hpbGRyZW4iLCJrZXlzIiwic29ydCIsInNsdWdOYW1lIiwic3BsaWNlIiwiaW5kZXhPZiIsInJlc3RTbHVnTmFtZSIsIm9wdGlvbmFsUmVzdFNsdWdOYW1lIiwicm91dGVzIiwibWFwIiwiYyIsImdldCIsInJlZHVjZSIsInByZXYiLCJjdXJyIiwicHVzaCIsInBsYWNlaG9sZGVyIiwiciIsInNsaWNlIiwiRXJyb3IiLCJ1bnNoaWZ0IiwidXJsUGF0aHMiLCJzbHVnTmFtZXMiLCJpc0NhdGNoQWxsIiwibGVuZ3RoIiwibmV4dFNlZ21lbnQiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzZWdtZW50TmFtZSIsImlzT3B0aW9uYWwiLCJzdWJzdHJpbmciLCJoYW5kbGVTbHVnIiwicHJldmlvdXNTbHVnIiwibmV4dFNsdWciLCJmb3JFYWNoIiwic2x1ZyIsInJlcGxhY2UiLCJoYXMiLCJzZXQiLCJNYXAiLCJub3JtYWxpemVkUGFnZXMiLCJyb290IiwicGFnZVBhdGgiLCJvYmplY3RzIiwiZ2V0dGVyIiwiaW5kZXhlcyIsInBhdGhuYW1lcyIsImkiLCJwYXRobmFtZSIsInNvcnRlZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n");
|
219
|
-
|
220
|
-
/***/ }),
|
221
|
-
|
222
|
-
/***/ "./node_modules/next/dist/shared/lib/segment.js":
|
223
|
-
/*!******************************************************!*\
|
224
|
-
!*** ./node_modules/next/dist/shared/lib/segment.js ***!
|
225
|
-
\******************************************************/
|
226
|
-
/***/ ((__unused_webpack_module, exports) => {
|
227
|
-
|
228
|
-
"use strict";
|
229
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n addSearchParamsIfPageSegment: function() {\n return addSearchParamsIfPageSegment;\n },\n isGroupSegment: function() {\n return isGroupSegment;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')');\n}\nfunction addSearchParamsIfPageSegment(segment, searchParams) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams);\n return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY;\n }\n return segment;\n}\nconst PAGE_SEGMENT_KEY = '__PAGE__';\nconst DEFAULT_SEGMENT_KEY = '__DEFAULT__'; //# sourceMappingURL=segment.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2VnbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF3QmFBLG1CQUFtQjtlQUFuQkE7O0lBREFDLGdCQUFnQjtlQUFoQkE7O0lBaEJHQyw0QkFBNEI7ZUFBNUJBOztJQUxBQyxjQUFjO2VBQWRBOzs7QUFBVCxTQUFTQSxlQUFlQyxPQUFlO0lBQzVDLHNDQUFzQztJQUN0QyxPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLE9BQU9BLFFBQVFDLFFBQVEsQ0FBQztBQUNoRDtBQUVPLFNBQVNILDZCQUNkRSxPQUFnQixFQUNoQkUsWUFBMkQ7SUFFM0QsTUFBTUMsZ0JBQWdCSCxRQUFRSSxRQUFRLENBQUNQO0lBRXZDLElBQUlNLGVBQWU7UUFDakIsTUFBTUUsbUJBQW1CQyxLQUFLQyxTQUFTLENBQUNMO1FBQ3hDLE9BQU9HLHFCQUFxQixPQUN4QlIsbUJBQW1CLE1BQU1RLG1CQUN6QlI7SUFDTjtJQUVBLE9BQU9HO0FBQ1Q7QUFFTyxNQUFNSCxtQkFBbUI7QUFDekIsTUFBTUQsc0JBQXNCIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxzcmNcXHNoYXJlZFxcbGliXFxzZWdtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaXNHcm91cFNlZ21lbnQoc2VnbWVudDogc3RyaW5nKSB7XG4gIC8vIFVzZSBhcnJheVswXSBmb3IgcGVyZm9ybWFudCBwdXJwb3NlXG4gIHJldHVybiBzZWdtZW50WzBdID09PSAnKCcgJiYgc2VnbWVudC5lbmRzV2l0aCgnKScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWFyY2hQYXJhbXNJZlBhZ2VTZWdtZW50KFxuICBzZWdtZW50OiBTZWdtZW50LFxuICBzZWFyY2hQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPlxuKSB7XG4gIGNvbnN0IGlzUGFnZVNlZ21lbnQgPSBzZWdtZW50LmluY2x1ZGVzKFBBR0VfU0VHTUVOVF9LRVkpXG5cbiAgaWYgKGlzUGFnZVNlZ21lbnQpIHtcbiAgICBjb25zdCBzdHJpbmdpZmllZFF1ZXJ5ID0gSlNPTi5zdHJpbmdpZnkoc2VhcmNoUGFyYW1zKVxuICAgIHJldHVybiBzdHJpbmdpZmllZFF1ZXJ5ICE9PSAne30nXG4gICAgICA/IFBBR0VfU0VHTUVOVF9LRVkgKyAnPycgKyBzdHJpbmdpZmllZFF1ZXJ5XG4gICAgICA6IFBBR0VfU0VHTUVOVF9LRVlcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50XG59XG5cbmV4cG9ydCBjb25zdCBQQUdFX1NFR01FTlRfS0VZID0gJ19fUEFHRV9fJ1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VHTUVOVF9LRVkgPSAnX19ERUZBVUxUX18nXG4iXSwibmFtZXMiOlsiREVGQVVMVF9TRUdNRU5UX0tFWSIsIlBBR0VfU0VHTUVOVF9LRVkiLCJhZGRTZWFyY2hQYXJhbXNJZlBhZ2VTZWdtZW50IiwiaXNHcm91cFNlZ21lbnQiLCJzZWdtZW50IiwiZW5kc1dpdGgiLCJzZWFyY2hQYXJhbXMiLCJpc1BhZ2VTZWdtZW50IiwiaW5jbHVkZXMiLCJzdHJpbmdpZmllZFF1ZXJ5IiwiSlNPTiIsInN0cmluZ2lmeSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/segment.js\n");
|
230
|
-
|
231
|
-
/***/ }),
|
232
|
-
|
233
|
-
/***/ "./node_modules/next/dist/shared/lib/side-effect.js":
|
234
|
-
/*!**********************************************************!*\
|
235
|
-
!*** ./node_modules/next/dist/shared/lib/side-effect.js ***!
|
236
|
-
\**********************************************************/
|
237
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
238
|
-
|
239
|
-
"use strict";
|
240
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return SideEffect;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"react\");\nconst isServer = \"undefined\" === 'undefined';\nconst useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect;\nconst useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect;\nfunction SideEffect(props) {\n const { headManager, reduceComponentsToState } = props;\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));\n headManager.updateHead(reduceComponentsToState(headElements, props));\n }\n }\n if (isServer) {\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n emitChange();\n }\n useClientOnlyLayoutEffect({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n return ({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.delete(props.children);\n }\n })[\"SideEffect.useClientOnlyLayoutEffect\"];\n }\n }[\"SideEffect.useClientOnlyLayoutEffect\"]);\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n return ({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n }\n })[\"SideEffect.useClientOnlyLayoutEffect\"];\n }\n }[\"SideEffect.useClientOnlyLayoutEffect\"]);\n useClientOnlyEffect({\n \"SideEffect.useClientOnlyEffect\": ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n return ({\n \"SideEffect.useClientOnlyEffect\": ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n }\n })[\"SideEffect.useClientOnlyEffect\"];\n }\n }[\"SideEffect.useClientOnlyEffect\"]);\n return null;\n} //# sourceMappingURL=side-effect.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2lkZS1lZmZlY3QuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FvQkE7OztlQUF3QkE7OzttQ0FuQnVDO0FBZS9ELE1BQU1DLFdBQVcsT0FBT0MsU0FBVztBQUNuQyxNQUFNQyw0QkFBNEJGLFdBQVcsS0FBTyxJQUFJRyxPQUFBQSxlQUFlO0FBQ3ZFLE1BQU1DLHNCQUFzQkosV0FBVyxLQUFPLElBQUlLLE9BQUFBLFNBQVM7QUFFNUMsU0FBU04sV0FBV08sS0FBc0I7SUFDdkQsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLHVCQUF1QixFQUFFLEdBQUdGO0lBRWpELFNBQVNHO1FBQ1AsSUFBSUYsZUFBZUEsWUFBWUcsZ0JBQWdCLEVBQUU7WUFDL0MsTUFBTUMsZUFBZUMsT0FBQUEsUUFBUSxDQUFDQyxPQUFPLENBQ25DQyxNQUFNQyxJQUFJLENBQUNSLFlBQVlHLGdCQUFnQixFQUEwQk0sTUFBTSxDQUNyRUM7WUFHSlYsWUFBWVcsVUFBVSxDQUFDVix3QkFBd0JHLGNBQWNMO1FBQy9EO0lBQ0Y7SUFFQSxJQUFJTixVQUFVO1lBQ1pPO1FBQUFBLGVBQUFBLE9BQUFBLEtBQUFBLElBQUFBLGlDQUFBQSxZQUFhRyxnQkFBQUEsS0FBZ0IsZ0JBQTdCSCw4QkFBK0JZLEdBQUcsQ0FBQ2IsTUFBTWMsUUFBUTtRQUNqRFg7SUFDRjtJQUVBUDtnREFBMEI7Z0JBQ3hCSztZQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQ0FBQUEsWUFBYUcsZ0JBQUFBLEtBQWdCLGdCQUE3QkgsOEJBQStCWSxHQUFHLENBQUNiLE1BQU1jLFFBQVE7WUFDakQ7d0RBQU87d0JBQ0xiO29CQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQ0FBQUEsWUFBYUcsZ0JBQUFBLEtBQWdCLGdCQUE3QkgsOEJBQStCYyxNQUFNLENBQUNmLE1BQU1jLFFBQVE7Z0JBQ3REOztRQUNGOztJQUVBLGtGQUFrRjtJQUNsRixvRkFBb0Y7SUFDcEYsZ0VBQWdFO0lBQ2hFLHFGQUFxRjtJQUNyRixtRkFBbUY7SUFDbkZsQjtnREFBMEI7WUFDeEIsSUFBSUssYUFBYTtnQkFDZkEsWUFBWWUsY0FBYyxHQUFHYjtZQUMvQjtZQUNBO3dEQUFPO29CQUNMLElBQUlGLGFBQWE7d0JBQ2ZBLFlBQVllLGNBQWMsR0FBR2I7b0JBQy9CO2dCQUNGOztRQUNGOztJQUVBTDswQ0FBb0I7WUFDbEIsSUFBSUcsZUFBZUEsWUFBWWUsY0FBYyxFQUFFO2dCQUM3Q2YsWUFBWWUsY0FBYztnQkFDMUJmLFlBQVllLGNBQWMsR0FBRztZQUMvQjtZQUNBO2tEQUFPO29CQUNMLElBQUlmLGVBQWVBLFlBQVllLGNBQWMsRUFBRTt3QkFDN0NmLFlBQVllLGNBQWM7d0JBQzFCZixZQUFZZSxjQUFjLEdBQUc7b0JBQy9CO2dCQUNGOztRQUNGOztJQUVBLE9BQU87QUFDVCIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcc3JjXFxzaGFyZWRcXGxpYlxcc2lkZS1lZmZlY3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2hpbGRyZW4sIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0J1xuXG50eXBlIFN0YXRlID0gSlNYLkVsZW1lbnRbXSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgdHlwZSBTaWRlRWZmZWN0UHJvcHMgPSB7XG4gIHJlZHVjZUNvbXBvbmVudHNUb1N0YXRlOiA8VCBleHRlbmRzIHt9PihcbiAgICBjb21wb25lbnRzOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgcHJvcHM6IFRcbiAgKSA9PiBTdGF0ZVxuICBoYW5kbGVTdGF0ZUNoYW5nZT86IChzdGF0ZTogU3RhdGUpID0+IHZvaWRcbiAgaGVhZE1hbmFnZXI6IGFueVxuICBpbkFtcE1vZGU/OiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuY29uc3QgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuY29uc3QgdXNlQ2xpZW50T25seUxheW91dEVmZmVjdCA9IGlzU2VydmVyID8gKCkgPT4ge30gOiB1c2VMYXlvdXRFZmZlY3RcbmNvbnN0IHVzZUNsaWVudE9ubHlFZmZlY3QgPSBpc1NlcnZlciA/ICgpID0+IHt9IDogdXNlRWZmZWN0XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNpZGVFZmZlY3QocHJvcHM6IFNpZGVFZmZlY3RQcm9wcykge1xuICBjb25zdCB7IGhlYWRNYW5hZ2VyLCByZWR1Y2VDb21wb25lbnRzVG9TdGF0ZSB9ID0gcHJvcHNcblxuICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgIGlmIChoZWFkTWFuYWdlciAmJiBoZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzKSB7XG4gICAgICBjb25zdCBoZWFkRWxlbWVudHMgPSBDaGlsZHJlbi50b0FycmF5KFxuICAgICAgICBBcnJheS5mcm9tKGhlYWRNYW5hZ2VyLm1vdW50ZWRJbnN0YW5jZXMgYXMgU2V0PFJlYWN0LlJlYWN0Tm9kZT4pLmZpbHRlcihcbiAgICAgICAgICBCb29sZWFuXG4gICAgICAgIClcbiAgICAgICkgYXMgUmVhY3QuUmVhY3RFbGVtZW50W11cbiAgICAgIGhlYWRNYW5hZ2VyLnVwZGF0ZUhlYWQocmVkdWNlQ29tcG9uZW50c1RvU3RhdGUoaGVhZEVsZW1lbnRzLCBwcm9wcykpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzU2VydmVyKSB7XG4gICAgaGVhZE1hbmFnZXI/Lm1vdW50ZWRJbnN0YW5jZXM/LmFkZChwcm9wcy5jaGlsZHJlbilcbiAgICBlbWl0Q2hhbmdlKClcbiAgfVxuXG4gIHVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGhlYWRNYW5hZ2VyPy5tb3VudGVkSW5zdGFuY2VzPy5hZGQocHJvcHMuY2hpbGRyZW4pXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhlYWRNYW5hZ2VyPy5tb3VudGVkSW5zdGFuY2VzPy5kZWxldGUocHJvcHMuY2hpbGRyZW4pXG4gICAgfVxuICB9KVxuXG4gIC8vIFdlIG5lZWQgdG8gY2FsbCBgdXBkYXRlSGVhZGAgbWV0aG9kIHdoZW5ldmVyIHRoZSBgU2lkZUVmZmVjdGAgaXMgdHJpZ2dlciBpbiBhbGxcbiAgLy8gbGlmZS1jeWNsZXM6IG1vdW50LCB1cGRhdGUsIHVubW91bnQuIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBgU2lkZUVmZmVjdGBzXG4gIC8vIGJlaW5nIHJlbmRlcmVkLCB3ZSBvbmx5IHRyaWdnZXIgdGhlIG1ldGhvZCBmcm9tIHRoZSBsYXN0IG9uZS5cbiAgLy8gVGhpcyBpcyBlbnN1cmVkIGJ5IGtlZXBpbmcgdGhlIGxhc3QgdW5mbHVzaGVkIGB1cGRhdGVIZWFkYCBpbiB0aGUgYF9wZW5kaW5nVXBkYXRlYFxuICAvLyBzaW5nbGV0b24gaW4gdGhlIGxheW91dCBlZmZlY3QgcGFzcywgYW5kIGFjdHVhbGx5IHRyaWdnZXIgaXQgaW4gdGhlIGVmZmVjdCBwYXNzLlxuICB1c2VDbGllbnRPbmx5TGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGVhZE1hbmFnZXIpIHtcbiAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gZW1pdENoYW5nZVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGhlYWRNYW5hZ2VyKSB7XG4gICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gZW1pdENoYW5nZVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICB1c2VDbGllbnRPbmx5RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGVhZE1hbmFnZXIgJiYgaGVhZE1hbmFnZXIuX3BlbmRpbmdVcGRhdGUpIHtcbiAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlKClcbiAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGhlYWRNYW5hZ2VyICYmIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlKSB7XG4gICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlKClcbiAgICAgICAgaGVhZE1hbmFnZXIuX3BlbmRpbmdVcGRhdGUgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBudWxsXG59XG4iXSwibmFtZXMiOlsiU2lkZUVmZmVjdCIsImlzU2VydmVyIiwid2luZG93IiwidXNlQ2xpZW50T25seUxheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZUNsaWVudE9ubHlFZmZlY3QiLCJ1c2VFZmZlY3QiLCJwcm9wcyIsImhlYWRNYW5hZ2VyIiwicmVkdWNlQ29tcG9uZW50c1RvU3RhdGUiLCJlbWl0Q2hhbmdlIiwibW91bnRlZEluc3RhbmNlcyIsImhlYWRFbGVtZW50cyIsIkNoaWxkcmVuIiwidG9BcnJheSIsIkFycmF5IiwiZnJvbSIsImZpbHRlciIsIkJvb2xlYW4iLCJ1cGRhdGVIZWFkIiwiYWRkIiwiY2hpbGRyZW4iLCJkZWxldGUiLCJfcGVuZGluZ1VwZGF0ZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/side-effect.js\n");
|
241
|
-
|
242
|
-
/***/ }),
|
243
|
-
|
244
|
-
/***/ "./node_modules/next/dist/shared/lib/utils.js":
|
245
|
-
/*!****************************************************!*\
|
246
|
-
!*** ./node_modules/next/dist/shared/lib/utils.js ***!
|
247
|
-
\****************************************************/
|
248
|
-
/***/ ((__unused_webpack_module, exports) => {
|
249
|
-
|
250
|
-
"use strict";
|
251
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DecodeError: function() {\n return DecodeError;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n isResSent: function() {\n return isResSent;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n 'CLS',\n 'FCP',\n 'FID',\n 'INP',\n 'LCP',\n 'TTFB'\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? ':' + port : '');\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split('?');\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/').replace(/\\/\\/+/g, '/') + (urlParts[1] ? \"?\" + urlParts.slice(1).join('?') : '');\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw new Error(message);\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw new Error(message);\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== 'undefined';\nconst ST = SP && [\n 'mark',\n 'measure',\n 'getEntriesByName'\n].every((method)=>typeof performance[method] === 'function');\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = 'ENOENT';\n this.name = 'PageNotFoundError';\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = 'ENOENT';\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBb2FhQSxXQUFXO2VBQVhBOztJQW9CQUMsdUJBQXVCO2VBQXZCQTs7SUFQQUMsaUJBQWlCO2VBQWpCQTs7SUFaQUMsY0FBYztlQUFkQTs7SUFDQUMsaUJBQWlCO2VBQWpCQTs7SUFUQUMsRUFBRTtlQUFGQTs7SUFDQUMsRUFBRTtlQUFGQTs7SUFsWEFDLFVBQVU7ZUFBVkE7O0lBc1FHQyxRQUFRO2VBQVJBOztJQStCQUMsY0FBYztlQUFkQTs7SUFYQUMsaUJBQWlCO2VBQWpCQTs7SUFLQUMsTUFBTTtlQUFOQTs7SUFQSEMsYUFBYTtlQUFiQTs7SUFtQkdDLFNBQVM7ZUFBVEE7O0lBa0JNQyxtQkFBbUI7ZUFBbkJBOztJQWROQyx3QkFBd0I7ZUFBeEJBOztJQStHQUMsY0FBYztlQUFkQTs7O0FBOVpULE1BQU1ULGFBQWE7SUFBQztJQUFPO0lBQU87SUFBTztJQUFPO0lBQU87Q0FBTztBQXNROUQsU0FBU0MsU0FDZFMsRUFBSztJQUVMLElBQUlDLE9BQU87SUFDWCxJQUFJQztJQUVKLE9BQVE7eUNBQUlDLE9BQUFBLElBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLE9BQUFBLE1BQUFBLE9BQUFBO1lBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztRQUNWLElBQUksQ0FBQ0YsTUFBTTtZQUNUQSxPQUFPO1lBQ1BDLFNBQVNGLE1BQU1HO1FBQ2pCO1FBQ0EsT0FBT0Q7SUFDVDtBQUNGO0FBRUEsMERBQTBEO0FBQzFELGdFQUFnRTtBQUNoRSxNQUFNRSxxQkFBcUI7QUFDcEIsTUFBTVQsZ0JBQWdCLENBQUNVLE1BQWdCRCxtQkFBbUJFLElBQUksQ0FBQ0Q7QUFFL0QsU0FBU1o7SUFDZCxNQUFNLEVBQUVjLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsT0FBT0MsUUFBUTtJQUNw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Q3JDVSxZQUFZQyxJQUFZLEVBQUVaLE9BQWUsQ0FBRTtRQUN6QyxLQUFLO1FBQ0wsSUFBSSxDQUFDQSxPQUFPLEdBQUksMENBQXVDWSxPQUFLLE1BQUdaO0lBQ2pFO0FBQ0Y7QUFFTyxNQUFNbkQsZ0NBQWdDb0Q7SUFFM0NVLGFBQWM7UUFDWixLQUFLO1FBQ0wsSUFBSSxDQUFDRSxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNiLE9BQU8sR0FBSTtJQUNsQjtBQUNGO0FBV08sU0FBU3BDLGVBQWVrRCxLQUFZO0lBQ3pDLE9BQU9DLEtBQUtDLFNBQVMsQ0FBQztRQUFFaEIsU0FBU2MsTUFBTWQsT0FBTztRQUFFaUIsT0FBT0gsTUFBTUcsS0FBSztJQUFDO0FBQ3JFIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxzcmNcXHNoYXJlZFxcbGliXFx1dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEh0bWxQcm9wcyB9IGZyb20gJy4vaHRtbC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlLCBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vc2VydmVyL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgRW52IH0gZnJvbSAnQG5leHQvZW52J1xuaW1wb3J0IHR5cGUgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyL3JvdXRlcidcbmltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB0eXBlIHsgUHJldmlld0RhdGEgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ09NUElMRVJfTkFNRVMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGZzIGZyb20gJ2ZzJ1xuXG5leHBvcnQgdHlwZSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQ29udGV4dCBleHRlbmRzIEJhc2VDb250ZXh0ID0gTmV4dFBhZ2VDb250ZXh0LFxuICBJbml0aWFsUHJvcHMgPSB7fSxcbiAgUHJvcHMgPSB7fSxcbj4gPSBDb21wb25lbnRUeXBlPFByb3BzPiAmIHtcbiAgLyoqXG4gICAqIFVzZWQgZm9yIGluaXRpYWwgcGFnZSBsb2FkIGRhdGEgcG9wdWxhdGlvbi4gRGF0YSByZXR1cm5lZCBmcm9tIGBnZXRJbml0aWFsUHJvcHNgIGlzIHNlcmlhbGl6ZWQgd2hlbiBzZXJ2ZXIgcmVuZGVyZWQuXG4gICAqIE1ha2Ugc3VyZSB0byByZXR1cm4gcGxhaW4gYE9iamVjdGAgd2l0aG91dCB1c2luZyBgRGF0ZWAsIGBNYXBgLCBgU2V0YC5cbiAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBgcGFnZWBcbiAgICovXG4gIGdldEluaXRpYWxQcm9wcz8oY29udGV4dDogQ29udGV4dCk6IEluaXRpYWxQcm9wcyB8IFByb21pc2U8SW5pdGlhbFByb3BzPlxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFR5cGUgPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgRG9jdW1lbnRDb250ZXh0LFxuICBEb2N1bWVudEluaXRpYWxQcm9wcyxcbiAgRG9jdW1lbnRQcm9wc1xuPlxuXG5leHBvcnQgdHlwZSBBcHBUeXBlPFAgPSB7fT4gPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQXBwQ29udGV4dFR5cGUsXG4gIFAsXG4gIEFwcFByb3BzVHlwZTxhbnksIFA+XG4+XG5cbmV4cG9ydCB0eXBlIEFwcFRyZWVUeXBlID0gQ29tcG9uZW50VHlwZTxcbiAgQXBwSW5pdGlhbFByb3BzICYgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbj5cblxuLyoqXG4gKiBXZWIgdml0YWxzIHByb3ZpZGVkIHRvIF9hcHAucmVwb3J0V2ViVml0YWxzIGJ5IENvcmUgV2ViIFZpdGFscyBwbHVnaW4gZGV2ZWxvcGVkIGJ5IEdvb2dsZSBDaHJvbWUgdGVhbS5cbiAqIGh0dHBzOi8vbmV4dGpzLm9yZy9ibG9nL25leHQtOS00I2ludGVncmF0ZWQtd2ViLXZpdGFscy1yZXBvcnRpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9WSVRBTFMgPSBbJ0NMUycsICdGQ1AnLCAnRklEJywgJ0lOUCcsICdMQ1AnLCAnVFRGQiddIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBOZXh0V2ViVml0YWxzTWV0cmljID0ge1xuICBpZDogc3RyaW5nXG4gIHN0YXJ0VGltZTogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbiAgYXR0cmlidXRpb24/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfVxufSAmIChcbiAgfCB7XG4gICAgICBsYWJlbDogJ3dlYi12aXRhbCdcbiAgICAgIG5hbWU6ICh0eXBlb2YgV0VCX1ZJVEFMUylbbnVtYmVyXVxuICAgIH1cbiAgfCB7XG4gICAgICBsYWJlbDogJ2N1c3RvbSdcbiAgICAgIG5hbWU6XG4gICAgICAgIHwgJ05leHQuanMtaHlkcmF0aW9uJ1xuICAgICAgICB8ICdOZXh0LmpzLXJvdXRlLWNoYW5nZS10by1yZW5kZXInXG4gICAgICAgIHwgJ05leHQuanMtcmVuZGVyJ1xuICAgIH1cbilcblxuZXhwb3J0IHR5cGUgRW5oYW5jZXI8Qz4gPSAoQ29tcG9uZW50OiBDKSA9PiBDXG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudHNFbmhhbmNlciA9XG4gIHwge1xuICAgICAgZW5oYW5jZUFwcD86IEVuaGFuY2VyPEFwcFR5cGU+XG4gICAgICBlbmhhbmNlQ29tcG9uZW50PzogRW5oYW5jZXI8TmV4dENvbXBvbmVudFR5cGU+XG4gICAgfVxuICB8IEVuaGFuY2VyPE5leHRDb21wb25lbnRUeXBlPlxuXG5leHBvcnQgdHlwZSBSZW5kZXJQYWdlUmVzdWx0ID0ge1xuICBodG1sOiBzdHJpbmdcbiAgaGVhZD86IEFycmF5PEpTWC5FbGVtZW50IHwgbnVsbD5cbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyUGFnZSA9IChcbiAgb3B0aW9ucz86IENvbXBvbmVudHNFbmhhbmNlclxuKSA9PiBEb2N1bWVudEluaXRpYWxQcm9wcyB8IFByb21pc2U8RG9jdW1lbnRJbml0aWFsUHJvcHM+XG5cbmV4cG9ydCB0eXBlIEJhc2VDb250ZXh0ID0ge1xuICByZXM/OiBTZXJ2ZXJSZXNwb25zZVxuICBbazogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIE5FWFRfREFUQSA9IHtcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgcGFnZTogc3RyaW5nXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuICBidWlsZElkOiBzdHJpbmdcbiAgYXNzZXRQcmVmaXg/OiBzdHJpbmdcbiAgcnVudGltZUNvbmZpZz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgbmV4dEV4cG9ydD86IGJvb2xlYW5cbiAgYXV0b0V4cG9ydD86IGJvb2xlYW5cbiAgaXNGYWxsYmFjaz86IGJvb2xlYW5cbiAgaXNFeHBlcmltZW50YWxDb21waWxlPzogYm9vbGVhblxuICBkeW5hbWljSWRzPzogKHN0cmluZyB8IG51bWJlcilbXVxuICBlcnI/OiBFcnJvciAmIHtcbiAgICBzdGF0dXNDb2RlPzogbnVtYmVyXG4gICAgc291cmNlPzogdHlwZW9mIENPTVBJTEVSX05BTUVTLnNlcnZlciB8IHR5cGVvZiBDT01QSUxFUl9OQU1FUy5lZGdlU2VydmVyXG4gIH1cbiAgZ3NwPzogYm9vbGVhblxuICBnc3NwPzogYm9vbGVhblxuICBjdXN0b21TZXJ2ZXI/OiBib29sZWFuXG4gIGdpcD86IGJvb2xlYW5cbiAgYXBwR2lwPzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmdcbiAgbG9jYWxlcz86IHN0cmluZ1tdXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmdcbiAgZG9tYWluTG9jYWxlcz86IERvbWFpbkxvY2FsZVtdXG4gIHNjcmlwdExvYWRlcj86IGFueVtdXG4gIGlzUHJldmlldz86IGJvb2xlYW5cbiAgbm90Rm91bmRTcmNQYWdlPzogc3RyaW5nXG59XG5cbi8qKlxuICogYE5leHRgIGNvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0UGFnZUNvbnRleHQge1xuICAvKipcbiAgICogRXJyb3Igb2JqZWN0IGlmIGVuY291bnRlcmVkIGR1cmluZyByZW5kZXJpbmdcbiAgICovXG4gIGVycj86IChFcnJvciAmIHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSB8IG51bGxcbiAgLyoqXG4gICAqIGBIVFRQYCByZXF1ZXN0IG9iamVjdC5cbiAgICovXG4gIHJlcT86IEluY29taW5nTWVzc2FnZVxuICAvKipcbiAgICogYEhUVFBgIHJlc3BvbnNlIG9iamVjdC5cbiAgICovXG4gIHJlcz86IFNlcnZlclJlc3BvbnNlXG4gIC8qKlxuICAgKiBQYXRoIHNlY3Rpb24gb2YgYFVSTGAuXG4gICAqL1xuICBwYXRobmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBRdWVyeSBzdHJpbmcgc2VjdGlvbiBvZiBgVVJMYCBwYXJzZWQgYXMgYW4gb2JqZWN0LlxuICAgKi9cbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIC8qKlxuICAgKiBgU3RyaW5nYCBvZiB0aGUgYWN0dWFsIHBhdGggaW5jbHVkaW5nIHF1ZXJ5LlxuICAgKi9cbiAgYXNQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBsb2NhbGVcbiAgICovXG4gIGxvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogQWxsIGNvbmZpZ3VyZWQgbG9jYWxlc1xuICAgKi9cbiAgbG9jYWxlcz86IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJlZCBkZWZhdWx0IGxvY2FsZVxuICAgKi9cbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogYENvbXBvbmVudGAgdGhlIHRyZWUgb2YgdGhlIEFwcCB0byB1c2UgaWYgbmVlZGluZyB0byByZW5kZXIgc2VwYXJhdGVseVxuICAgKi9cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbn1cblxuZXhwb3J0IHR5cGUgQXBwQ29udGV4dFR5cGU8Um91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXI+ID0ge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dD5cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbiAgY3R4OiBOZXh0UGFnZUNvbnRleHRcbiAgcm91dGVyOiBSb3V0ZXJcbn1cblxuZXhwb3J0IHR5cGUgQXBwSW5pdGlhbFByb3BzPFBhZ2VQcm9wcyA9IGFueT4gPSB7XG4gIHBhZ2VQcm9wczogUGFnZVByb3BzXG59XG5cbmV4cG9ydCB0eXBlIEFwcFByb3BzVHlwZTxcbiAgUm91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXIsXG4gIFBhZ2VQcm9wcyA9IHt9LFxuPiA9IEFwcEluaXRpYWxQcm9wczxQYWdlUHJvcHM+ICYge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dCwgYW55LCBhbnk+XG4gIHJvdXRlcjogUm91dGVyXG4gIF9fTl9TU0c/OiBib29sZWFuXG4gIF9fTl9TU1A/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50Q29udGV4dCA9IE5leHRQYWdlQ29udGV4dCAmIHtcbiAgcmVuZGVyUGFnZTogUmVuZGVyUGFnZVxuICBkZWZhdWx0R2V0SW5pdGlhbFByb3BzKFxuICAgIGN0eDogRG9jdW1lbnRDb250ZXh0LFxuICAgIG9wdGlvbnM/OiB7IG5vbmNlPzogc3RyaW5nIH1cbiAgKTogUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz5cbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRJbml0aWFsUHJvcHMgPSBSZW5kZXJQYWdlUmVzdWx0ICYge1xuICBzdHlsZXM/OiBSZWFjdC5SZWFjdEVsZW1lbnRbXSB8IEl0ZXJhYmxlPFJlYWN0LlJlYWN0Tm9kZT4gfCBKU1guRWxlbWVudFxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFByb3BzID0gRG9jdW1lbnRJbml0aWFsUHJvcHMgJiBIdG1sUHJvcHNcblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0QXBpUmVxdWVzdCBleHRlbmRzIEluY29taW5nTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgYHF1ZXJ5YCB2YWx1ZXMgZnJvbSB1cmxcbiAgICovXG4gIHF1ZXJ5OiBQYXJ0aWFsPHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXVxuICB9PlxuICAvKipcbiAgICogT2JqZWN0IG9mIGBjb29raWVzYCBmcm9tIGhlYWRlclxuICAgKi9cbiAgY29va2llczogUGFydGlhbDx7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nXG4gIH0+XG5cbiAgYm9keTogYW55XG5cbiAgZW52OiBFbnZcblxuICBkcmFmdE1vZGU/OiBib29sZWFuXG5cbiAgcHJldmlldz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFByZXZpZXcgZGF0YSBzZXQgb24gdGhlIHJlcXVlc3QsIGlmIGFueVxuICAgKiAqL1xuICBwcmV2aWV3RGF0YT86IFByZXZpZXdEYXRhXG59XG5cbi8qKlxuICogU2VuZCBib2R5IG9mIHJlc3BvbnNlXG4gKi9cbnR5cGUgU2VuZDxUPiA9IChib2R5OiBUKSA9PiB2b2lkXG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSByZXNwb25zZVxuICovXG5leHBvcnQgdHlwZSBOZXh0QXBpUmVzcG9uc2U8RGF0YSA9IGFueT4gPSBTZXJ2ZXJSZXNwb25zZSAmIHtcbiAgLyoqXG4gICAqIFNlbmQgZGF0YSBgYW55YCBkYXRhIGluIHJlc3BvbnNlXG4gICAqL1xuICBzZW5kOiBTZW5kPERhdGE+XG4gIC8qKlxuICAgKiBTZW5kIGRhdGEgYGpzb25gIGRhdGEgaW4gcmVzcG9uc2VcbiAgICovXG4gIGpzb246IFNlbmQ8RGF0YT5cbiAgc3RhdHVzOiAoc3RhdHVzQ29kZTogbnVtYmVyKSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3QodXJsOiBzdHJpbmcpOiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3Qoc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKTogTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIFNldCBkcmFmdCBtb2RlXG4gICAqL1xuICBzZXREcmFmdE1vZGU6IChvcHRpb25zOiB7IGVuYWJsZTogYm9vbGVhbiB9KSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogU2V0IHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIHNldFByZXZpZXdEYXRhOiAoXG4gICAgZGF0YTogb2JqZWN0IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIChpbiBzZWNvbmRzKSBmb3IgdGhlIHByZXZpZXcgc2Vzc2lvbiB0byBsYXN0IGZvci5cbiAgICAgICAqIFRoZSBnaXZlbiBudW1iZXIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBieSByb3VuZGluZyBkb3duLlxuICAgICAgICogQnkgZGVmYXVsdCwgbm8gbWF4aW11bSBhZ2UgaXMgc2V0IGFuZCB0aGUgcHJldmlldyBzZXNzaW9uIGZpbmlzaGVzXG4gICAgICAgKiB3aGVuIHRoZSBjbGllbnQgc2h1dHMgZG93biAoYnJvd3NlciBpcyBjbG9zZWQpLlxuICAgICAgICovXG4gICAgICBtYXhBZ2U/OiBudW1iZXJcbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoZSBwYXRoIGZvciB0aGUgcHJldmlldyBzZXNzaW9uIHRvIHdvcmsgdW5kZXIuIEJ5IGRlZmF1bHQsXG4gICAgICAgKiB0aGUgcGF0aCBpcyBjb25zaWRlcmVkIHRoZSBcImRlZmF1bHQgcGF0aFwiLCBpLmUuLCBhbnkgcGFnZXMgdW5kZXIgXCIvXCIuXG4gICAgICAgKi9cbiAgICAgIHBhdGg/OiBzdHJpbmdcbiAgICB9XG4gICkgPT4gTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIENsZWFyIHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIGNsZWFyUHJldmlld0RhdGE6IChvcHRpb25zPzogeyBwYXRoPzogc3RyaW5nIH0pID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlIGEgc3BlY2lmaWMgcGFnZSBhbmQgcmVnZW5lcmF0ZSBpdCB1c2luZyBPbi1EZW1hbmQgSW5jcmVtZW50YWxcbiAgICogU3RhdGljIFJlZ2VuZXJhdGlvbi5cbiAgICogVGhlIHBhdGggc2hvdWxkIGJlIGFuIGFjdHVhbCBwYXRoLCBub3QgYSByZXdyaXR0ZW4gcGF0aC4gRS5nLiBmb3JcbiAgICogXCIvYmxvZy9bc2x1Z11cIiB0aGlzIHNob3VsZCBiZSBcIi9ibG9nL3Bvc3QtMVwiLlxuICAgKiBAbGluayBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL2luY3JlbWVudGFsLXN0YXRpYy1yZWdlbmVyYXRpb24jb24tZGVtYW5kLXJldmFsaWRhdGlvbi13aXRoLXJldmFsaWRhdGVwYXRoXG4gICAqL1xuICByZXZhbGlkYXRlOiAoXG4gICAgdXJsUGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkPzogYm9vbGVhblxuICAgIH1cbiAgKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSBoYW5kbGVyXG4gKi9cbmV4cG9ydCB0eXBlIE5leHRBcGlIYW5kbGVyPFQgPSBhbnk+ID0gKFxuICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICByZXM6IE5leHRBcGlSZXNwb25zZTxUPlxuKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPlxuXG4vKipcbiAqIFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjT25jZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBSZXR1cm5UeXBlPFQ+PihcbiAgZm46IFRcbik6IFQge1xuICBsZXQgdXNlZCA9IGZhbHNlXG4gIGxldCByZXN1bHQ6IFJldHVyblR5cGU8VD5cblxuICByZXR1cm4gKCguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGlmICghdXNlZCkge1xuICAgICAgdXNlZCA9IHRydWVcbiAgICAgIHJlc3VsdCA9IGZuKC4uLmFyZ3MpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSkgYXMgVFxufVxuXG4vLyBTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG4vLyBBYnNvbHV0ZSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zXG5jb25zdCBBQlNPTFVURV9VUkxfUkVHRVggPSAvXlthLXpBLVpdW2EtekEtWlxcZCtcXC0uXSo/Oi9cbmV4cG9ydCBjb25zdCBpc0Fic29sdXRlVXJsID0gKHVybDogc3RyaW5nKSA9PiBBQlNPTFVURV9VUkxfUkVHRVgudGVzdCh1cmwpXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhdGlvbk9yaWdpbigpIHtcbiAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/ICc6JyArIHBvcnQgOiAnJ31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVUkwoKSB7XG4gIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93LmxvY2F0aW9uXG4gIGNvbnN0IG9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgcmV0dXJuIGhyZWYuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZTxQPihDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8UD4pIHtcbiAgcmV0dXJuIHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gICAgPyBDb21wb25lbnRcbiAgICA6IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnVW5rbm93bidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzU2VudChyZXM6IFNlcnZlclJlc3BvbnNlKSB7XG4gIHJldHVybiByZXMuZmluaXNoZWQgfHwgcmVzLmhlYWRlcnNTZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXBlYXRlZFNsYXNoZXModXJsOiBzdHJpbmcpIHtcbiAgY29uc3QgdXJsUGFydHMgPSB1cmwuc3BsaXQoJz8nKVxuICBjb25zdCB1cmxOb1F1ZXJ5ID0gdXJsUGFydHNbMF1cblxuICByZXR1cm4gKFxuICAgIHVybE5vUXVlcnlcbiAgICAgIC8vIGZpcnN0IHdlIHJlcGxhY2UgYW55IG5vbi1lbmNvZGVkIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZFxuICAgICAgLy8gdGhlbiBub3JtYWxpemUgcmVwZWF0ZWQgZm9yd2FyZCBzbGFzaGVzXG4gICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpICtcbiAgICAodXJsUGFydHNbMV0gPyBgPyR7dXJsUGFydHMuc2xpY2UoMSkuam9pbignPycpfWAgOiAnJylcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEdldEluaXRpYWxQcm9wczxcbiAgQyBleHRlbmRzIEJhc2VDb250ZXh0LFxuICBJUCA9IHt9LFxuICBQID0ge30sXG4+KEFwcDogTmV4dENvbXBvbmVudFR5cGU8QywgSVAsIFA+LCBjdHg6IEMpOiBQcm9taXNlPElQPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKEFwcC5wcm90b3R5cGU/LmdldEluaXRpYWxQcm9wcykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBcIiR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICAgIEFwcFxuICAgICAgKX0uZ2V0SW5pdGlhbFByb3BzKClcIiBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAtIHZpc2l0IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dldC1pbml0aWFsLXByb3BzLWFzLWFuLWluc3RhbmNlLW1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgICB9XG4gIH1cbiAgLy8gd2hlbiBjYWxsZWQgZnJvbSBfYXBwIGBjdHhgIGlzIG5lc3RlZCBpbiBgY3R4YFxuICBjb25zdCByZXMgPSBjdHgucmVzIHx8IChjdHguY3R4ICYmIGN0eC5jdHgucmVzKVxuXG4gIGlmICghQXBwLmdldEluaXRpYWxQcm9wcykge1xuICAgIGlmIChjdHguY3R4ICYmIGN0eC5Db21wb25lbnQpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgcGFnZVByb3BzIGRlZmF1bHRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VQcm9wczogYXdhaXQgbG9hZEdldEluaXRpYWxQcm9wcyhjdHguQ29tcG9uZW50LCBjdHguY3R4KSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9IGFzIElQXG4gIH1cblxuICBjb25zdCBwcm9wcyA9IGF3YWl0IEFwcC5nZXRJbml0aWFsUHJvcHMoY3R4KVxuXG4gIGlmIChyZXMgJiYgaXNSZXNTZW50KHJlcykpIHtcbiAgICByZXR1cm4gcHJvcHNcbiAgfVxuXG4gIGlmICghcHJvcHMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYFwiJHtnZXREaXNwbGF5TmFtZShcbiAgICAgIEFwcFxuICAgICl9LmdldEluaXRpYWxQcm9wcygpXCIgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0LiBCdXQgZm91bmQgXCIke3Byb3BzfVwiIGluc3RlYWQuYFxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMCAmJiAhY3R4LmN0eCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgJHtnZXREaXNwbGF5TmFtZShcbiAgICAgICAgICBBcHBcbiAgICAgICAgKX0gcmV0dXJuZWQgYW4gZW1wdHkgb2JqZWN0IGZyb20gXFxgZ2V0SW5pdGlhbFByb3BzXFxgLiBUaGlzIGRlLW9wdGltaXplcyBhbmQgcHJldmVudHMgYXV0b21hdGljIHN0YXRpYyBvcHRpbWl6YXRpb24uIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2VtcHR5LW9iamVjdC1nZXRJbml0aWFsUHJvcHNgXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb3BzXG59XG5cbmV4cG9ydCBjb25zdCBTUCA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCdcbmV4cG9ydCBjb25zdCBTVCA9XG4gIFNQICYmXG4gIChbJ21hcmsnLCAnbWVhc3VyZScsICdnZXRFbnRyaWVzQnlOYW1lJ10gYXMgY29uc3QpLmV2ZXJ5KFxuICAgIChtZXRob2QpID0+IHR5cGVvZiBwZXJmb3JtYW5jZVttZXRob2RdID09PSAnZnVuY3Rpb24nXG4gIClcblxuZXhwb3J0IGNsYXNzIERlY29kZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmV4cG9ydCBjbGFzcyBOb3JtYWxpemVFcnJvciBleHRlbmRzIEVycm9yIHt9XG5leHBvcnQgY2xhc3MgUGFnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNvZGUgPSAnRU5PRU5UJ1xuICAgIHRoaXMubmFtZSA9ICdQYWdlTm90Rm91bmRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBgQ2Fubm90IGZpbmQgbW9kdWxlIGZvciBwYWdlOiAke3BhZ2V9YFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nU3RhdGljUGFnZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocGFnZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIHN0YXRpYyBmaWxlIGZvciBwYWdlOiAke3BhZ2V9ICR7bWVzc2FnZX1gXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb2RlOiBzdHJpbmdcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29kZSA9ICdFTk9FTlQnXG4gICAgdGhpcy5tZXNzYWdlID0gYENhbm5vdCBmaW5kIHRoZSBtaWRkbGV3YXJlIG1vZHVsZWBcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlRnMge1xuICBleGlzdHNTeW5jOiB0eXBlb2YgZnMuZXhpc3RzU3luY1xuICByZWFkRmlsZTogdHlwZW9mIGZzLnByb21pc2VzLnJlYWRGaWxlXG4gIHJlYWRGaWxlU3luYzogdHlwZW9mIGZzLnJlYWRGaWxlU3luY1xuICB3cml0ZUZpbGUoZjogc3RyaW5nLCBkOiBhbnkpOiBQcm9taXNlPHZvaWQ+XG4gIG1rZGlyKGRpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgc3RyaW5nPlxuICBzdGF0KGY6IHN0cmluZyk6IFByb21pc2U8eyBtdGltZTogRGF0ZSB9PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFjayB9KVxufVxuIl0sIm5hbWVzIjpbIkRlY29kZUVycm9yIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJNaXNzaW5nU3RhdGljUGFnZSIsIk5vcm1hbGl6ZUVycm9yIiwiUGFnZU5vdEZvdW5kRXJyb3IiLCJTUCIsIlNUIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiZ2V0RGlzcGxheU5hbWUiLCJnZXRMb2NhdGlvbk9yaWdpbiIsImdldFVSTCIsImlzQWJzb2x1dGVVcmwiLCJpc1Jlc1NlbnQiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwic3RyaW5naWZ5RXJyb3IiLCJmbiIsInVzZWQiLCJyZXN1bHQiLCJhcmdzIiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJuYW1lIiwicmVzIiwiZmluaXNoZWQiLCJoZWFkZXJzU2VudCIsInVybFBhcnRzIiwic3BsaXQiLCJ1cmxOb1F1ZXJ5IiwicmVwbGFjZSIsInNsaWNlIiwiam9pbiIsIkFwcCIsImN0eCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3RvdHlwZSIsImdldEluaXRpYWxQcm9wcyIsIm1lc3NhZ2UiLCJFcnJvciIsInBhZ2VQcm9wcyIsInByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImNvbnNvbGUiLCJ3YXJuIiwicGVyZm9ybWFuY2UiLCJldmVyeSIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiwicGFnZSIsImNvZGUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFjayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils.js\n");
|
252
|
-
|
253
|
-
/***/ }),
|
254
|
-
|
255
|
-
/***/ "./node_modules/next/dist/shared/lib/utils/warn-once.js":
|
256
|
-
/*!**************************************************************!*\
|
257
|
-
!*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***!
|
258
|
-
\**************************************************************/
|
259
|
-
/***/ ((__unused_webpack_module, exports) => {
|
260
|
-
|
261
|
-
"use strict";
|
262
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMvd2Fybi1vbmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7NENBV1NBOzs7ZUFBQUE7OztBQVhULElBQUlBLFdBQVcsQ0FBQ0MsS0FBZTtBQUMvQixJQUFJQyxJQUFvQixFQUFtQjtJQUN6QyxNQUFNRyxXQUFXLElBQUlDO0lBQ3JCTixXQUFXLENBQUNPO1FBQ1YsSUFBSSxDQUFDRixTQUFTRyxHQUFHLENBQUNELE1BQU07WUFDdEJFLFFBQVFDLElBQUksQ0FBQ0g7UUFDZjtRQUNBRixTQUFTTSxHQUFHLENBQUNKO0lBQ2Y7QUFDRiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxzcmNcXHNoYXJlZFxcbGliXFx1dGlsc1xcd2Fybi1vbmNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCB3YXJuT25jZSA9IChfOiBzdHJpbmcpID0+IHt9XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBjb25zdCB3YXJuaW5ncyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIHdhcm5PbmNlID0gKG1zZzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCF3YXJuaW5ncy5oYXMobXNnKSkge1xuICAgICAgY29uc29sZS53YXJuKG1zZylcbiAgICB9XG4gICAgd2FybmluZ3MuYWRkKG1zZylcbiAgfVxufVxuXG5leHBvcnQgeyB3YXJuT25jZSB9XG4iXSwibmFtZXMiOlsid2Fybk9uY2UiLCJfIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwid2FybmluZ3MiLCJTZXQiLCJtc2ciLCJoYXMiLCJjb25zb2xlIiwid2FybiIsImFkZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils/warn-once.js\n");
|
263
|
-
|
264
|
-
/***/ }),
|
265
|
-
|
266
|
-
/***/ "./node_modules/next/dist/compiled/@opentelemetry/api/index.js":
|
267
|
-
/*!*********************************************************************!*\
|
268
|
-
!*** ./node_modules/next/dist/compiled/@opentelemetry/api/index.js ***!
|
269
|
-
\*********************************************************************/
|
270
|
-
/***/ ((module) => {
|
271
|
-
|
272
|
-
eval("(()=>{\"use strict\";var e={491:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ContextAPI=void 0;const n=r(223);const a=r(172);const o=r(930);const i=\"context\";const c=new n.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new ContextAPI}return this._instance}setGlobalContextManager(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}active(){return this._getContextManager().active()}with(e,t,r,...n){return this._getContextManager().with(e,t,r,...n)}bind(e,t){return this._getContextManager().bind(e,t)}_getContextManager(){return(0,a.getGlobal)(i)||c}disable(){this._getContextManager().disable();(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.ContextAPI=ContextAPI},930:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagAPI=void 0;const n=r(56);const a=r(912);const o=r(957);const i=r(172);const c=\"diag\";class DiagAPI{constructor(){function _logProxy(e){return function(...t){const r=(0,i.getGlobal)(\"diag\");if(!r)return;return r[e](...t)}}const e=this;const setLogger=(t,r={logLevel:o.DiagLogLevel.INFO})=>{var n,c,s;if(t===e){const t=new Error(\"Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation\");e.error((n=t.stack)!==null&&n!==void 0?n:t.message);return false}if(typeof r===\"number\"){r={logLevel:r}}const u=(0,i.getGlobal)(\"diag\");const l=(0,a.createLogLevelDiagLogger)((c=r.logLevel)!==null&&c!==void 0?c:o.DiagLogLevel.INFO,t);if(u&&!r.suppressOverrideMessage){const e=(s=(new Error).stack)!==null&&s!==void 0?s:\"<failed to generate stacktrace>\";u.warn(`Current logger will be overwritten from ${e}`);l.warn(`Current logger will overwrite one already registered from ${e}`)}return(0,i.registerGlobal)(\"diag\",l,e,true)};e.setLogger=setLogger;e.disable=()=>{(0,i.unregisterGlobal)(c,e)};e.createComponentLogger=e=>new n.DiagComponentLogger(e);e.verbose=_logProxy(\"verbose\");e.debug=_logProxy(\"debug\");e.info=_logProxy(\"info\");e.warn=_logProxy(\"warn\");e.error=_logProxy(\"error\")}static instance(){if(!this._instance){this._instance=new DiagAPI}return this._instance}}t.DiagAPI=DiagAPI},653:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.MetricsAPI=void 0;const n=r(660);const a=r(172);const o=r(930);const i=\"metrics\";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new MetricsAPI}return this._instance}setGlobalMeterProvider(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}getMeterProvider(){return(0,a.getGlobal)(i)||n.NOOP_METER_PROVIDER}getMeter(e,t,r){return this.getMeterProvider().getMeter(e,t,r)}disable(){(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.MetricsAPI=MetricsAPI},181:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.PropagationAPI=void 0;const n=r(172);const a=r(874);const o=r(194);const i=r(277);const c=r(369);const s=r(930);const u=\"propagation\";const l=new a.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=c.createBaggage;this.getBaggage=i.getBaggage;this.getActiveBaggage=i.getActiveBaggage;this.setBaggage=i.setBaggage;this.deleteBaggage=i.deleteBaggage}static getInstance(){if(!this._instance){this._instance=new PropagationAPI}return this._instance}setGlobalPropagator(e){return(0,n.registerGlobal)(u,e,s.DiagAPI.instance())}inject(e,t,r=o.defaultTextMapSetter){return this._getGlobalPropagator().inject(e,t,r)}extract(e,t,r=o.defaultTextMapGetter){return this._getGlobalPropagator().extract(e,t,r)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,n.unregisterGlobal)(u,s.DiagAPI.instance())}_getGlobalPropagator(){return(0,n.getGlobal)(u)||l}}t.PropagationAPI=PropagationAPI},997:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceAPI=void 0;const n=r(172);const a=r(846);const o=r(139);const i=r(607);const c=r(930);const s=\"trace\";class TraceAPI{constructor(){this._proxyTracerProvider=new a.ProxyTracerProvider;this.wrapSpanContext=o.wrapSpanContext;this.isSpanContextValid=o.isSpanContextValid;this.deleteSpan=i.deleteSpan;this.getSpan=i.getSpan;this.getActiveSpan=i.getActiveSpan;this.getSpanContext=i.getSpanContext;this.setSpan=i.setSpan;this.setSpanContext=i.setSpanContext}static getInstance(){if(!this._instance){this._instance=new TraceAPI}return this._instance}setGlobalTracerProvider(e){const t=(0,n.registerGlobal)(s,this._proxyTracerProvider,c.DiagAPI.instance());if(t){this._proxyTracerProvider.setDelegate(e)}return t}getTracerProvider(){return(0,n.getGlobal)(s)||this._proxyTracerProvider}getTracer(e,t){return this.getTracerProvider().getTracer(e,t)}disable(){(0,n.unregisterGlobal)(s,c.DiagAPI.instance());this._proxyTracerProvider=new a.ProxyTracerProvider}}t.TraceAPI=TraceAPI},277:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.deleteBaggage=t.setBaggage=t.getActiveBaggage=t.getBaggage=void 0;const n=r(491);const a=r(780);const o=(0,a.createContextKey)(\"OpenTelemetry Baggage Key\");function getBaggage(e){return e.getValue(o)||undefined}t.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(n.ContextAPI.getInstance().active())}t.getActiveBaggage=getActiveBaggage;function setBaggage(e,t){return e.setValue(o,t)}t.setBaggage=setBaggage;function deleteBaggage(e){return e.deleteValue(o)}t.deleteBaggage=deleteBaggage},993:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.BaggageImpl=void 0;class BaggageImpl{constructor(e){this._entries=e?new Map(e):new Map}getEntry(e){const t=this._entries.get(e);if(!t){return undefined}return Object.assign({},t)}getAllEntries(){return Array.from(this._entries.entries()).map((([e,t])=>[e,t]))}setEntry(e,t){const r=new BaggageImpl(this._entries);r._entries.set(e,t);return r}removeEntry(e){const t=new BaggageImpl(this._entries);t._entries.delete(e);return t}removeEntries(...e){const t=new BaggageImpl(this._entries);for(const r of e){t._entries.delete(r)}return t}clear(){return new BaggageImpl}}t.BaggageImpl=BaggageImpl},830:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataSymbol=void 0;t.baggageEntryMetadataSymbol=Symbol(\"BaggageEntryMetadata\")},369:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataFromString=t.createBaggage=void 0;const n=r(930);const a=r(993);const o=r(830);const i=n.DiagAPI.instance();function createBaggage(e={}){return new a.BaggageImpl(new Map(Object.entries(e)))}t.createBaggage=createBaggage;function baggageEntryMetadataFromString(e){if(typeof e!==\"string\"){i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);e=\"\"}return{__TYPE__:o.baggageEntryMetadataSymbol,toString(){return e}}}t.baggageEntryMetadataFromString=baggageEntryMetadataFromString},67:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.context=void 0;const n=r(491);t.context=n.ContextAPI.getInstance()},223:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopContextManager=void 0;const n=r(780);class NoopContextManager{active(){return n.ROOT_CONTEXT}with(e,t,r,...n){return t.call(r,...n)}bind(e,t){return t}enable(){return this}disable(){return this}}t.NoopContextManager=NoopContextManager},780:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ROOT_CONTEXT=t.createContextKey=void 0;function createContextKey(e){return Symbol.for(e)}t.createContextKey=createContextKey;class BaseContext{constructor(e){const t=this;t._currentContext=e?new Map(e):new Map;t.getValue=e=>t._currentContext.get(e);t.setValue=(e,r)=>{const n=new BaseContext(t._currentContext);n._currentContext.set(e,r);return n};t.deleteValue=e=>{const r=new BaseContext(t._currentContext);r._currentContext.delete(e);return r}}}t.ROOT_CONTEXT=new BaseContext},506:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.diag=void 0;const n=r(930);t.diag=n.DiagAPI.instance()},56:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagComponentLogger=void 0;const n=r(172);class DiagComponentLogger{constructor(e){this._namespace=e.namespace||\"DiagComponentLogger\"}debug(...e){return logProxy(\"debug\",this._namespace,e)}error(...e){return logProxy(\"error\",this._namespace,e)}info(...e){return logProxy(\"info\",this._namespace,e)}warn(...e){return logProxy(\"warn\",this._namespace,e)}verbose(...e){return logProxy(\"verbose\",this._namespace,e)}}t.DiagComponentLogger=DiagComponentLogger;function logProxy(e,t,r){const a=(0,n.getGlobal)(\"diag\");if(!a){return}r.unshift(t);return a[e](...r)}},972:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagConsoleLogger=void 0;const r=[{n:\"error\",c:\"error\"},{n:\"warn\",c:\"warn\"},{n:\"info\",c:\"info\"},{n:\"debug\",c:\"debug\"},{n:\"verbose\",c:\"trace\"}];class DiagConsoleLogger{constructor(){function _consoleFunc(e){return function(...t){if(console){let r=console[e];if(typeof r!==\"function\"){r=console.log}if(typeof r===\"function\"){return r.apply(console,t)}}}}for(let e=0;e<r.length;e++){this[r[e].n]=_consoleFunc(r[e].c)}}}t.DiagConsoleLogger=DiagConsoleLogger},912:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createLogLevelDiagLogger=void 0;const n=r(957);function createLogLevelDiagLogger(e,t){if(e<n.DiagLogLevel.NONE){e=n.DiagLogLevel.NONE}else if(e>n.DiagLogLevel.ALL){e=n.DiagLogLevel.ALL}t=t||{};function _filterFunc(r,n){const a=t[r];if(typeof a===\"function\"&&e>=n){return a.bind(t)}return function(){}}return{error:_filterFunc(\"error\",n.DiagLogLevel.ERROR),warn:_filterFunc(\"warn\",n.DiagLogLevel.WARN),info:_filterFunc(\"info\",n.DiagLogLevel.INFO),debug:_filterFunc(\"debug\",n.DiagLogLevel.DEBUG),verbose:_filterFunc(\"verbose\",n.DiagLogLevel.VERBOSE)}}t.createLogLevelDiagLogger=createLogLevelDiagLogger},957:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagLogLevel=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"ERROR\"]=30]=\"ERROR\";e[e[\"WARN\"]=50]=\"WARN\";e[e[\"INFO\"]=60]=\"INFO\";e[e[\"DEBUG\"]=70]=\"DEBUG\";e[e[\"VERBOSE\"]=80]=\"VERBOSE\";e[e[\"ALL\"]=9999]=\"ALL\"})(r=t.DiagLogLevel||(t.DiagLogLevel={}))},172:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.unregisterGlobal=t.getGlobal=t.registerGlobal=void 0;const n=r(200);const a=r(521);const o=r(130);const i=a.VERSION.split(\".\")[0];const c=Symbol.for(`opentelemetry.js.api.${i}`);const s=n._globalThis;function registerGlobal(e,t,r,n=false){var o;const i=s[c]=(o=s[c])!==null&&o!==void 0?o:{version:a.VERSION};if(!n&&i[e]){const t=new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);r.error(t.stack||t.message);return false}if(i.version!==a.VERSION){const t=new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);r.error(t.stack||t.message);return false}i[e]=t;r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);return true}t.registerGlobal=registerGlobal;function getGlobal(e){var t,r;const n=(t=s[c])===null||t===void 0?void 0:t.version;if(!n||!(0,o.isCompatible)(n)){return}return(r=s[c])===null||r===void 0?void 0:r[e]}t.getGlobal=getGlobal;function unregisterGlobal(e,t){t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);const r=s[c];if(r){delete r[e]}}t.unregisterGlobal=unregisterGlobal},130:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.isCompatible=t._makeCompatibilityCheck=void 0;const n=r(521);const a=/^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;function _makeCompatibilityCheck(e){const t=new Set([e]);const r=new Set;const n=e.match(a);if(!n){return()=>false}const o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null){return function isExactmatch(t){return t===e}}function _reject(e){r.add(e);return false}function _accept(e){t.add(e);return true}return function isCompatible(e){if(t.has(e)){return true}if(r.has(e)){return false}const n=e.match(a);if(!n){return _reject(e)}const i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null){return _reject(e)}if(o.major!==i.major){return _reject(e)}if(o.major===0){if(o.minor===i.minor&&o.patch<=i.patch){return _accept(e)}return _reject(e)}if(o.minor<=i.minor){return _accept(e)}return _reject(e)}}t._makeCompatibilityCheck=_makeCompatibilityCheck;t.isCompatible=_makeCompatibilityCheck(n.VERSION)},886:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.metrics=void 0;const n=r(653);t.metrics=n.MetricsAPI.getInstance()},901:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ValueType=void 0;var r;(function(e){e[e[\"INT\"]=0]=\"INT\";e[e[\"DOUBLE\"]=1]=\"DOUBLE\"})(r=t.ValueType||(t.ValueType={}))},102:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createNoopMeter=t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=t.NOOP_OBSERVABLE_GAUGE_METRIC=t.NOOP_OBSERVABLE_COUNTER_METRIC=t.NOOP_UP_DOWN_COUNTER_METRIC=t.NOOP_HISTOGRAM_METRIC=t.NOOP_COUNTER_METRIC=t.NOOP_METER=t.NoopObservableUpDownCounterMetric=t.NoopObservableGaugeMetric=t.NoopObservableCounterMetric=t.NoopObservableMetric=t.NoopHistogramMetric=t.NoopUpDownCounterMetric=t.NoopCounterMetric=t.NoopMetric=t.NoopMeter=void 0;class NoopMeter{constructor(){}createHistogram(e,r){return t.NOOP_HISTOGRAM_METRIC}createCounter(e,r){return t.NOOP_COUNTER_METRIC}createUpDownCounter(e,r){return t.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(e,r){return t.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(e,r){return t.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(e,r){return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(e,t){}removeBatchObservableCallback(e){}}t.NoopMeter=NoopMeter;class NoopMetric{}t.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(e,t){}}t.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(e,t){}}t.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopHistogramMetric extends NoopMetric{record(e,t){}}t.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(e){}removeCallback(e){}}t.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}t.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}t.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}t.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;t.NOOP_METER=new NoopMeter;t.NOOP_COUNTER_METRIC=new NoopCounterMetric;t.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;t.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;t.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;t.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return t.NOOP_METER}t.createNoopMeter=createNoopMeter},660:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NOOP_METER_PROVIDER=t.NoopMeterProvider=void 0;const n=r(102);class NoopMeterProvider{getMeter(e,t,r){return n.NOOP_METER}}t.NoopMeterProvider=NoopMeterProvider;t.NOOP_METER_PROVIDER=new NoopMeterProvider},200:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(46),t)},651:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t._globalThis=void 0;t._globalThis=typeof globalThis===\"object\"?globalThis:global},46:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(651),t)},939:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.propagation=void 0;const n=r(181);t.propagation=n.PropagationAPI.getInstance()},874:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(e,t){}extract(e,t){return e}fields(){return[]}}t.NoopTextMapPropagator=NoopTextMapPropagator},194:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.defaultTextMapSetter=t.defaultTextMapGetter=void 0;t.defaultTextMapGetter={get(e,t){if(e==null){return undefined}return e[t]},keys(e){if(e==null){return[]}return Object.keys(e)}};t.defaultTextMapSetter={set(e,t,r){if(e==null){return}e[t]=r}}},845:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.trace=void 0;const n=r(997);t.trace=n.TraceAPI.getInstance()},403:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NonRecordingSpan=void 0;const n=r(476);class NonRecordingSpan{constructor(e=n.INVALID_SPAN_CONTEXT){this._spanContext=e}spanContext(){return this._spanContext}setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t){return this}setStatus(e){return this}updateName(e){return this}end(e){}isRecording(){return false}recordException(e,t){}}t.NonRecordingSpan=NonRecordingSpan},614:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracer=void 0;const n=r(491);const a=r(607);const o=r(403);const i=r(139);const c=n.ContextAPI.getInstance();class NoopTracer{startSpan(e,t,r=c.active()){const n=Boolean(t===null||t===void 0?void 0:t.root);if(n){return new o.NonRecordingSpan}const s=r&&(0,a.getSpanContext)(r);if(isSpanContext(s)&&(0,i.isSpanContextValid)(s)){return new o.NonRecordingSpan(s)}else{return new o.NonRecordingSpan}}startActiveSpan(e,t,r,n){let o;let i;let s;if(arguments.length<2){return}else if(arguments.length===2){s=t}else if(arguments.length===3){o=t;s=r}else{o=t;i=r;s=n}const u=i!==null&&i!==void 0?i:c.active();const l=this.startSpan(e,o,u);const g=(0,a.setSpan)(u,l);return c.with(g,s,undefined,l)}}t.NoopTracer=NoopTracer;function isSpanContext(e){return typeof e===\"object\"&&typeof e[\"spanId\"]===\"string\"&&typeof e[\"traceId\"]===\"string\"&&typeof e[\"traceFlags\"]===\"number\"}},124:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracerProvider=void 0;const n=r(614);class NoopTracerProvider{getTracer(e,t,r){return new n.NoopTracer}}t.NoopTracerProvider=NoopTracerProvider},125:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracer=void 0;const n=r(614);const a=new n.NoopTracer;class ProxyTracer{constructor(e,t,r,n){this._provider=e;this.name=t;this.version=r;this.options=n}startSpan(e,t,r){return this._getTracer().startSpan(e,t,r)}startActiveSpan(e,t,r,n){const a=this._getTracer();return Reflect.apply(a.startActiveSpan,a,arguments)}_getTracer(){if(this._delegate){return this._delegate}const e=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!e){return a}this._delegate=e;return this._delegate}}t.ProxyTracer=ProxyTracer},846:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracerProvider=void 0;const n=r(125);const a=r(124);const o=new a.NoopTracerProvider;class ProxyTracerProvider{getTracer(e,t,r){var a;return(a=this.getDelegateTracer(e,t,r))!==null&&a!==void 0?a:new n.ProxyTracer(this,e,t,r)}getDelegate(){var e;return(e=this._delegate)!==null&&e!==void 0?e:o}setDelegate(e){this._delegate=e}getDelegateTracer(e,t,r){var n;return(n=this._delegate)===null||n===void 0?void 0:n.getTracer(e,t,r)}}t.ProxyTracerProvider=ProxyTracerProvider},996:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SamplingDecision=void 0;var r;(function(e){e[e[\"NOT_RECORD\"]=0]=\"NOT_RECORD\";e[e[\"RECORD\"]=1]=\"RECORD\";e[e[\"RECORD_AND_SAMPLED\"]=2]=\"RECORD_AND_SAMPLED\"})(r=t.SamplingDecision||(t.SamplingDecision={}))},607:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.getSpanContext=t.setSpanContext=t.deleteSpan=t.setSpan=t.getActiveSpan=t.getSpan=void 0;const n=r(780);const a=r(403);const o=r(491);const i=(0,n.createContextKey)(\"OpenTelemetry Context Key SPAN\");function getSpan(e){return e.getValue(i)||undefined}t.getSpan=getSpan;function getActiveSpan(){return getSpan(o.ContextAPI.getInstance().active())}t.getActiveSpan=getActiveSpan;function setSpan(e,t){return e.setValue(i,t)}t.setSpan=setSpan;function deleteSpan(e){return e.deleteValue(i)}t.deleteSpan=deleteSpan;function setSpanContext(e,t){return setSpan(e,new a.NonRecordingSpan(t))}t.setSpanContext=setSpanContext;function getSpanContext(e){var t;return(t=getSpan(e))===null||t===void 0?void 0:t.spanContext()}t.getSpanContext=getSpanContext},325:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceStateImpl=void 0;const n=r(564);const a=32;const o=512;const i=\",\";const c=\"=\";class TraceStateImpl{constructor(e){this._internalState=new Map;if(e)this._parse(e)}set(e,t){const r=this._clone();if(r._internalState.has(e)){r._internalState.delete(e)}r._internalState.set(e,t);return r}unset(e){const t=this._clone();t._internalState.delete(e);return t}get(e){return this._internalState.get(e)}serialize(){return this._keys().reduce(((e,t)=>{e.push(t+c+this.get(t));return e}),[]).join(i)}_parse(e){if(e.length>o)return;this._internalState=e.split(i).reverse().reduce(((e,t)=>{const r=t.trim();const a=r.indexOf(c);if(a!==-1){const o=r.slice(0,a);const i=r.slice(a+1,t.length);if((0,n.validateKey)(o)&&(0,n.validateValue)(i)){e.set(o,i)}else{}}return e}),new Map);if(this._internalState.size>a){this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,a))}}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){const e=new TraceStateImpl;e._internalState=new Map(this._internalState);return e}}t.TraceStateImpl=TraceStateImpl},564:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.validateValue=t.validateKey=void 0;const r=\"[_0-9a-z-*/]\";const n=`[a-z]${r}{0,255}`;const a=`[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;const o=new RegExp(`^(?:${n}|${a})$`);const i=/^[ -~]{0,255}[!-~]$/;const c=/,|=/;function validateKey(e){return o.test(e)}t.validateKey=validateKey;function validateValue(e){return i.test(e)&&!c.test(e)}t.validateValue=validateValue},98:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createTraceState=void 0;const n=r(325);function createTraceState(e){return new n.TraceStateImpl(e)}t.createTraceState=createTraceState},476:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.INVALID_SPAN_CONTEXT=t.INVALID_TRACEID=t.INVALID_SPANID=void 0;const n=r(475);t.INVALID_SPANID=\"0000000000000000\";t.INVALID_TRACEID=\"00000000000000000000000000000000\";t.INVALID_SPAN_CONTEXT={traceId:t.INVALID_TRACEID,spanId:t.INVALID_SPANID,traceFlags:n.TraceFlags.NONE}},357:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanKind=void 0;var r;(function(e){e[e[\"INTERNAL\"]=0]=\"INTERNAL\";e[e[\"SERVER\"]=1]=\"SERVER\";e[e[\"CLIENT\"]=2]=\"CLIENT\";e[e[\"PRODUCER\"]=3]=\"PRODUCER\";e[e[\"CONSUMER\"]=4]=\"CONSUMER\"})(r=t.SpanKind||(t.SpanKind={}))},139:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.wrapSpanContext=t.isSpanContextValid=t.isValidSpanId=t.isValidTraceId=void 0;const n=r(476);const a=r(403);const o=/^([0-9a-f]{32})$/i;const i=/^[0-9a-f]{16}$/i;function isValidTraceId(e){return o.test(e)&&e!==n.INVALID_TRACEID}t.isValidTraceId=isValidTraceId;function isValidSpanId(e){return i.test(e)&&e!==n.INVALID_SPANID}t.isValidSpanId=isValidSpanId;function isSpanContextValid(e){return isValidTraceId(e.traceId)&&isValidSpanId(e.spanId)}t.isSpanContextValid=isSpanContextValid;function wrapSpanContext(e){return new a.NonRecordingSpan(e)}t.wrapSpanContext=wrapSpanContext},847:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanStatusCode=void 0;var r;(function(e){e[e[\"UNSET\"]=0]=\"UNSET\";e[e[\"OK\"]=1]=\"OK\";e[e[\"ERROR\"]=2]=\"ERROR\"})(r=t.SpanStatusCode||(t.SpanStatusCode={}))},475:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceFlags=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"SAMPLED\"]=1]=\"SAMPLED\"})(r=t.TraceFlags||(t.TraceFlags={}))},521:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.VERSION=void 0;t.VERSION=\"1.6.0\"}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var a=t[r]={exports:{}};var o=true;try{e[r].call(a.exports,a,a.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r={};(()=>{var e=r;Object.defineProperty(e,\"__esModule\",{value:true});e.trace=e.propagation=e.metrics=e.diag=e.context=e.INVALID_SPAN_CONTEXT=e.INVALID_TRACEID=e.INVALID_SPANID=e.isValidSpanId=e.isValidTraceId=e.isSpanContextValid=e.createTraceState=e.TraceFlags=e.SpanStatusCode=e.SpanKind=e.SamplingDecision=e.ProxyTracerProvider=e.ProxyTracer=e.defaultTextMapSetter=e.defaultTextMapGetter=e.ValueType=e.createNoopMeter=e.DiagLogLevel=e.DiagConsoleLogger=e.ROOT_CONTEXT=e.createContextKey=e.baggageEntryMetadataFromString=void 0;var t=__nccwpck_require__(369);Object.defineProperty(e,\"baggageEntryMetadataFromString\",{enumerable:true,get:function(){return t.baggageEntryMetadataFromString}});var n=__nccwpck_require__(780);Object.defineProperty(e,\"createContextKey\",{enumerable:true,get:function(){return n.createContextKey}});Object.defineProperty(e,\"ROOT_CONTEXT\",{enumerable:true,get:function(){return n.ROOT_CONTEXT}});var a=__nccwpck_require__(972);Object.defineProperty(e,\"DiagConsoleLogger\",{enumerable:true,get:function(){return a.DiagConsoleLogger}});var o=__nccwpck_require__(957);Object.defineProperty(e,\"DiagLogLevel\",{enumerable:true,get:function(){return o.DiagLogLevel}});var i=__nccwpck_require__(102);Object.defineProperty(e,\"createNoopMeter\",{enumerable:true,get:function(){return i.createNoopMeter}});var c=__nccwpck_require__(901);Object.defineProperty(e,\"ValueType\",{enumerable:true,get:function(){return c.ValueType}});var s=__nccwpck_require__(194);Object.defineProperty(e,\"defaultTextMapGetter\",{enumerable:true,get:function(){return s.defaultTextMapGetter}});Object.defineProperty(e,\"defaultTextMapSetter\",{enumerable:true,get:function(){return s.defaultTextMapSetter}});var u=__nccwpck_require__(125);Object.defineProperty(e,\"ProxyTracer\",{enumerable:true,get:function(){return u.ProxyTracer}});var l=__nccwpck_require__(846);Object.defineProperty(e,\"ProxyTracerProvider\",{enumerable:true,get:function(){return l.ProxyTracerProvider}});var g=__nccwpck_require__(996);Object.defineProperty(e,\"SamplingDecision\",{enumerable:true,get:function(){return g.SamplingDecision}});var p=__nccwpck_require__(357);Object.defineProperty(e,\"SpanKind\",{enumerable:true,get:function(){return p.SpanKind}});var d=__nccwpck_require__(847);Object.defineProperty(e,\"SpanStatusCode\",{enumerable:true,get:function(){return d.SpanStatusCode}});var _=__nccwpck_require__(475);Object.defineProperty(e,\"TraceFlags\",{enumerable:true,get:function(){return _.TraceFlags}});var f=__nccwpck_require__(98);Object.defineProperty(e,\"createTraceState\",{enumerable:true,get:function(){return f.createTraceState}});var b=__nccwpck_require__(139);Object.defineProperty(e,\"isSpanContextValid\",{enumerable:true,get:function(){return b.isSpanContextValid}});Object.defineProperty(e,\"isValidTraceId\",{enumerable:true,get:function(){return b.isValidTraceId}});Object.defineProperty(e,\"isValidSpanId\",{enumerable:true,get:function(){return b.isValidSpanId}});var v=__nccwpck_require__(476);Object.defineProperty(e,\"INVALID_SPANID\",{enumerable:true,get:function(){return v.INVALID_SPANID}});Object.defineProperty(e,\"INVALID_TRACEID\",{enumerable:true,get:function(){return v.INVALID_TRACEID}});Object.defineProperty(e,\"INVALID_SPAN_CONTEXT\",{enumerable:true,get:function(){return v.INVALID_SPAN_CONTEXT}});const O=__nccwpck_require__(67);Object.defineProperty(e,\"context\",{enumerable:true,get:function(){return O.context}});const P=__nccwpck_require__(506);Object.defineProperty(e,\"diag\",{enumerable:true,get:function(){return P.diag}});const N=__nccwpck_require__(886);Object.defineProperty(e,\"metrics\",{enumerable:true,get:function(){return N.metrics}});const S=__nccwpck_require__(939);Object.defineProperty(e,\"propagation\",{enumerable:true,get:function(){return S.propagation}});const C=__nccwpck_require__(845);Object.defineProperty(e,\"trace\",{enumerable:true,get:function(){return C.trace}});e[\"default\"]={context:O.context,diag:P.diag,metrics:N.metrics,propagation:S.propagation,trace:C.trace}})();module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL0BvcGVudGVsZW1ldHJ5L2FwaS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGFBQWEsT0FBTyxjQUFjLHNDQUFzQyxXQUFXLEVBQUUsb0JBQW9CLGVBQWUsZUFBZSxlQUFlLGtCQUFrQixpQ0FBaUMsaUJBQWlCLGVBQWUscUJBQXFCLG9CQUFvQiw4QkFBOEIsc0JBQXNCLDJCQUEyQixxREFBcUQsU0FBUywwQ0FBMEMsaUJBQWlCLGtEQUFrRCxVQUFVLDJDQUEyQyxxQkFBcUIsNEJBQTRCLFVBQVUsb0NBQW9DLGdEQUFnRCx3QkFBd0IsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLGlCQUFpQixjQUFjLGVBQWUsZUFBZSxlQUFlLGVBQWUsY0FBYyxjQUFjLHNCQUFzQixzQkFBc0IsZ0NBQWdDLGFBQWEsbUJBQW1CLGFBQWEsc0JBQXNCLDZCQUE2QixJQUFJLFVBQVUsVUFBVSx3SkFBd0osb0RBQW9ELGFBQWEsd0JBQXdCLEdBQUcsWUFBWSxnQ0FBZ0Msa0dBQWtHLGtDQUFrQyxxRkFBcUYsa0RBQWtELEVBQUUsR0FBRyxvRUFBb0UsRUFBRSxHQUFHLDZDQUE2QyxzQkFBc0IsZUFBZSw2QkFBNkIsd0RBQXdELCtCQUErQiwyQkFBMkIseUJBQXlCLHlCQUF5QiwyQkFBMkIsa0JBQWtCLG9CQUFvQiwyQkFBMkIsdUJBQXVCLGtCQUFrQixlQUFlLHNDQUFzQyxXQUFXLEVBQUUsb0JBQW9CLGVBQWUsZUFBZSxlQUFlLGtCQUFrQixpQkFBaUIsZUFBZSxxQkFBcUIsb0JBQW9CLDhCQUE4QixzQkFBc0IsMEJBQTBCLHFEQUFxRCxtQkFBbUIsZ0RBQWdELGdCQUFnQiwrQ0FBK0MsVUFBVSxnREFBZ0Qsd0JBQXdCLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSx3QkFBd0IsZUFBZSxlQUFlLGVBQWUsZUFBZSxlQUFlLGVBQWUsc0JBQXNCLG9DQUFvQyxxQkFBcUIsY0FBYyxtQ0FBbUMsNkJBQTZCLHlDQUF5Qyw2QkFB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Z0MsbUNBQW1DLCtCQUErQixrQkFBa0IsRUFBRSxpQ0FBaUMsZ0NBQWdDLCtCQUErQixlQUFlLEVBQUUsaUNBQWlDLG1DQUFtQywrQkFBK0Isa0JBQWtCLEVBQUUsaUNBQWlDLHVDQUF1QywrQkFBK0Isc0JBQXNCLEVBQUUsaUNBQWlDLGlDQUFpQywrQkFBK0IsZ0JBQWdCLEVBQUUsY0FBYyx5RkFBeUYsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXERlc2t0b3BcXFdvcmtTcGFjZVxcdGVzdHdpZGdldFxcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxjb21waWxlZFxcQG9wZW50ZWxlbWV0cnlcXGFwaVxcaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ezQ5MTooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkNvbnRleHRBUEk9dm9pZCAwO2NvbnN0IG49cigyMjMpO2NvbnN0IGE9cigxNzIpO2NvbnN0IG89cig5MzApO2NvbnN0IGk9XCJjb250ZXh0XCI7Y29uc3QgYz1uZXcgbi5Ob29wQ29udGV4dE1hbmFnZXI7Y2xhc3MgQ29udGV4dEFQSXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2V0SW5zdGFuY2UoKXtpZighdGhpcy5faW5zdGFuY2Upe3RoaXMuX2luc3RhbmNlPW5ldyBDb250ZXh0QVBJfXJldHVybiB0aGlzLl9pbnN0YW5jZX1zZXRHbG9iYWxDb250ZXh0TWFuYWdlcihlKXtyZXR1cm4oMCxhLnJlZ2lzdGVyR2xvYmFsKShpLGUsby5EaWFnQVBJLmluc3RhbmNlKCkpfWFjdGl2ZSgpe3JldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpfXdpdGgoZSx0LHIsLi4ubil7cmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkud2l0aChlLHQsciwuLi5uKX1iaW5kKGUsdCl7cmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZChlLHQpfV9nZXRDb250ZXh0TWFuYWdlcigpe3JldHVybigwLGEuZ2V0R2xvYmFsKShpKXx8Y31kaXNhYmxlKCl7dGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCk7KDAsYS51bnJlZ2lzdGVyR2xvYmFsKShpLG8uRGlhZ0FQSS5pbnN0YW5jZSgpKX19dC5Db250ZXh0QVBJPUNvbnRleHRBUEl9LDkzMDooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkRpYWdBUEk9dm9pZCAwO2NvbnN0IG49cig1Nik7Y29uc3QgYT1yKDkxMik7Y29uc3Qgbz1yKDk1Nyk7Y29uc3QgaT1yKDE3Mik7Y29uc3QgYz1cImRpYWdcIjtjbGFzcyBEaWFnQVBJe2NvbnN0cnVjdG9yKCl7ZnVuY3Rpb24gX2xvZ1Byb3h5KGUpe3JldHVybiBmdW5jdGlvbiguLi50KXtjb25zdCByPSgwLGkuZ2V0R2xvYmFsKShcImRpYWdcIik7aWYoIXIpcmV0dXJuO3JldHVybiByW2VdKC4uLnQpfX1jb25zdCBlPXRoaXM7Y29uc3Qgc2V0TG9nZ2VyPSh0LHI9e2xvZ0xldmVsOm8uRGlhZ0xvZ0xldmVsLklORk99KT0+e3ZhciBuLGMscztpZih0PT09ZSl7Y29uc3QgdD1uZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXCIpO2UuZXJyb3IoKG49dC5zdGFjaykhPT1udWxsJiZuIT09dm9pZCAwP246dC5tZXNzYWdlKTtyZXR1cm4gZmFsc2V9aWYodHlwZW9mIHI9PT1cIm51bWJlclwiKXtyPXtsb2dMZXZlbDpyfX1jb25zdCB1PSgwLGkuZ2V0R2xvYmFsKShcImRpYWdcIik7Y29uc3QgbD0oMCxhLmNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcikoKGM9ci5sb2dMZXZlbCkhPT1udWxsJiZjIT09dm9pZCAwP2M6by5EaWFnTG9nTGV2ZWwuSU5GTyx0KTtpZih1JiYhci5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSl7Y29uc3QgZT0ocz0obmV3IEVycm9yKS5zdGFjaykhPT1udWxsJiZzIT09dm9pZCAwP3M6XCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7dS53YXJuKGBDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gJHtlfWApO2wud2FybihgQ3VycmVudCBsb2dnZXIgd2lsbCBvdmVyd3JpdGUgb25lIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tICR7ZX1gKX1yZXR1cm4oMCxpLnJlZ2lzdGVyR2xvYmFsKShcImRpYWdcIixsLGUsdHJ1ZSl9O2Uuc2V0TG9nZ2VyPXNldExvZ2dlcjtlLmRpc2FibGU9KCk9PnsoMCxpLnVucmVnaXN0ZXJHbG9iYWwpKGMsZSl9O2UuY3JlYXRlQ29tcG9uZW50TG9nZ2VyPWU9Pm5ldyBuLkRpYWdDb21wb25lbnRMb2dnZXIoZSk7ZS52ZXJib3NlPV9sb2dQcm94eShcInZlcmJvc2VcIik7ZS5kZWJ1Zz1fbG9nUHJveHkoXCJkZWJ1Z1wiKTtlLmluZm89X2xvZ1Byb3h5KFwiaW5mb1wiKTtlLndhcm49X2xvZ1Byb3h5KFwid2FyblwiKTtlLmVycm9yPV9sb2dQcm94eShcImVycm9yXCIpfXN0YXRpYyBpbnN0YW5jZSgpe2lmKCF0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2U9bmV3IERpYWdBUEl9cmV0dXJuIHRoaXMuX2luc3RhbmNlfX10LkRpYWdBUEk9RGlhZ0FQSX0sNjUzOihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuTWV0cmljc0FQST12b2lkIDA7Y29uc3Qgbj1yKDY2MCk7Y29uc3QgYT1yKDE3Mik7Y29uc3Qgbz1yKDkzMCk7Y29uc3QgaT1cIm1ldHJpY3NcIjtjbGFzcyBNZXRyaWNzQVBJe2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRJbnN0YW5jZSgpe2lmKCF0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2U9bmV3IE1ldHJpY3NBUEl9cmV0dXJuIHRoaXMuX2luc3RhbmNlfXNldEdsb2JhbE1ldGVyUHJvdmlkZXIoZSl7cmV0dXJuKDAsYS5yZWdpc3Rlckdsb2JhbCkoaSxlLG8uRGlhZ0FQSS5pbnN0YW5jZSgpKX1nZXRNZXRlclByb3ZpZGVyKCl7cmV0dXJuKDAsYS5nZXRHbG9iYWwpKGkpfHxuLk5PT1BfTUVURVJfUFJPVklERVJ9Z2V0TWV0ZXIoZSx0LHIpe3JldHVybiB0aGlzLmdldE1ldGVyUHJvdmlkZXIoKS5nZXRNZXRlcihlLHQscil9ZGlzYWJsZSgpeygwLGEudW5yZWdpc3Rlckdsb2JhbCkoaSxvLkRpYWdBUEkuaW5zdGFuY2UoKSl9fXQuTWV0cmljc0FQST1NZXRyaWNzQVBJfSwxODE6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5Qcm9wYWdhdGlvbkFQST12b2lkIDA7Y29uc3Qgbj1yKDE3Mik7Y29uc3QgYT1yKDg3NCk7Y29uc3Qgbz1yKDE5NCk7Y29uc3QgaT1yKDI3Nyk7Y29uc3QgYz1yKDM2OSk7Y29uc3Qgcz1yKDkzMCk7Y29uc3QgdT1cInByb3BhZ2F0aW9uXCI7Y29uc3QgbD1uZXcgYS5Ob29wVGV4dE1hcFByb3BhZ2F0b3I7Y2xhc3MgUHJvcGFnYXRpb25BUEl7Y29uc3RydWN0b3IoKXt0aGlzLmNyZWF0ZUJhZ2dhZ2U9Yy5jcmVhdGVCYWdnYWdlO3RoaXMuZ2V0QmFnZ2FnZT1pLmdldEJhZ2dhZ2U7dGhpcy5nZXRBY3RpdmVCYWdnYWdlPWkuZ2V0QWN0aXZlQmFnZ2FnZTt0aGlzLnNldEJhZ2dhZ2U9aS5zZXRCYWdnYWdlO3RoaXMuZGVsZXRlQmFnZ2FnZT1pLmRlbGV0ZUJhZ2dhZ2V9c3RhdGljIGdldEluc3RhbmNlKCl7aWYoIXRoaXMuX2luc3RhbmNlKXt0aGlzLl9pbnN0YW5jZT1uZXcgUHJvcGFnYXRpb25BUEl9cmV0dXJuIHRoaXMuX2luc3RhbmNlfXNldEdsb2JhbFByb3BhZ2F0b3IoZSl7cmV0dXJuKDAsbi5yZWdpc3Rlckdsb2JhbCkodSxlLHMuRGlhZ0FQSS5pbnN0YW5jZSgpKX1pbmplY3QoZSx0LHI9by5kZWZhdWx0VGV4dE1hcFNldHRlcil7cmV0dXJuIHRoaXMuX2dldEdsb2JhbFByb3BhZ2F0b3IoKS5pbmplY3QoZSx0LHIpfWV4dHJhY3QoZSx0LHI9by5kZWZhdWx0VGV4dE1hcEdldHRlcil7cmV0dXJuIHRoaXMuX2dldEdsb2JhbFByb3BhZ2F0b3IoKS5leHRyYWN0KGUsdCxyKX1maWVsZHMoKXtyZXR1cm4gdGhpcy5fZ2V0R2xvYmFsUHJvcGFnYXRvcigpLmZpZWxkcygpfWRpc2FibGUoKXsoMCxuLnVucmVnaXN0ZXJHbG9iYWwpKHUscy5EaWFnQVBJLmluc3RhbmNlKCkpfV9nZXRHbG9iYWxQcm9wYWdhdG9yKCl7cmV0dXJuKDAsbi5nZXRHbG9iYWwpKHUpfHxsfX10LlByb3BhZ2F0aW9uQVBJPVByb3BhZ2F0aW9uQVBJfSw5OTc6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5UcmFjZUFQST12b2lkIDA7Y29uc3Qgbj1yKDE3Mik7Y29uc3QgYT1yKDg0Nik7Y29uc3Qgbz1yKDEzOSk7Y29uc3QgaT1yKDYwNyk7Y29uc3QgYz1yKDkzMCk7Y29uc3Qgcz1cInRyYWNlXCI7Y2xhc3MgVHJhY2VBUEl7Y29uc3RydWN0b3IoKXt0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyPW5ldyBhLlByb3h5VHJhY2VyUHJvdmlkZXI7dGhpcy53cmFwU3BhbkNvbnRleHQ9by53cmFwU3BhbkNvbnRleHQ7dGhpcy5pc1NwYW5Db250ZXh0VmFsaWQ9by5pc1NwYW5Db250ZXh0VmFsaWQ7dGhpcy5kZWxldGVTcGFuPWkuZGVsZXRlU3Bhbjt0aGlzLmdldFNwYW49aS5nZXRTcGFuO3RoaXMuZ2V0QWN0aXZlU3Bhbj1pLmdldEFjdGl2ZVNwYW47dGhpcy5nZXRTcGFuQ29udGV4dD1pLmdldFNwYW5Db250ZXh0O3RoaXMuc2V0U3Bhbj1pLnNldFNwYW47dGhpcy5zZXRTcGFuQ29udGV4dD1pLnNldFNwYW5Db250ZXh0fXN0YXRpYyBnZXRJbnN0YW5jZSgpe2lmKCF0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2U9bmV3IFRyYWNlQVBJfXJldHVybiB0aGlzLl9pbnN0YW5jZX1zZXRHbG9iYWxUcmFjZXJQcm92aWRlcihlKXtjb25zdCB0PSgwLG4ucmVnaXN0ZXJHbG9iYWwpKHMsdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcixjLkRpYWdBUEkuaW5zdGFuY2UoKSk7aWYodCl7dGhpcy5fcHJveHlUcmFjZXJQcm92aWRlci5zZXREZWxlZ2F0ZShlKX1yZXR1cm4gdH1nZXRUcmFjZXJQcm92aWRlcigpe3JldHVybigwLG4uZ2V0R2xvYmFsKShzKXx8dGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcn1nZXRUcmFjZXIoZSx0KXtyZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcihlLHQpfWRpc2FibGUoKXsoMCxuLnVucmVnaXN0ZXJHbG9iYWwpKHMsYy5EaWFnQVBJLmluc3RhbmNlKCkpO3RoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI9bmV3IGEuUHJveHlUcmFjZXJQcm92aWRlcn19dC5UcmFjZUFQST1UcmFjZUFQSX0sMjc3OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuZGVsZXRlQmFnZ2FnZT10LnNldEJhZ2dhZ2U9dC5nZXRBY3RpdmVCYWdnYWdlPXQuZ2V0QmFnZ2FnZT12b2lkIDA7Y29uc3Qgbj1yKDQ5MSk7Y29uc3QgYT1yKDc4MCk7Y29uc3Qgbz0oMCxhLmNyZWF0ZUNvbnRleHRLZXkpKFwiT3BlblRlbGVtZXRyeSBCYWdnYWdlIEtleVwiKTtmdW5jdGlvbiBnZXRCYWdnYWdlKGUpe3JldHVybiBlLmdldFZhbHVlKG8pfHx1bmRlZmluZWR9dC5nZXRCYWdnYWdlPWdldEJhZ2dhZ2U7ZnVuY3Rpb24gZ2V0QWN0aXZlQmFnZ2FnZSgpe3JldHVybiBnZXRCYWdnYWdlKG4uQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKX10LmdldEFjdGl2ZUJhZ2dhZ2U9Z2V0QWN0aXZlQmFnZ2FnZTtmdW5jdGlvbiBzZXRCYWdnYWdlKGUsdCl7cmV0dXJuIGUuc2V0VmFsdWUobyx0KX10LnNldEJhZ2dhZ2U9c2V0QmFnZ2FnZTtmdW5jdGlvbiBkZWxldGVCYWdnYWdlKGUpe3JldHVybiBlLmRlbGV0ZVZhbHVlKG8pfXQuZGVsZXRlQmFnZ2FnZT1kZWxldGVCYWdnYWdlfSw5OTM6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuQmFnZ2FnZUltcGw9dm9pZCAwO2NsYXNzIEJhZ2dhZ2VJbXBse2NvbnN0cnVjdG9yKGUpe3RoaXMuX2VudHJpZXM9ZT9uZXcgTWFwKGUpOm5ldyBNYXB9Z2V0RW50cnkoZSl7Y29uc3QgdD10aGlzLl9lbnRyaWVzLmdldChlKTtpZighdCl7cmV0dXJuIHVuZGVmaW5lZH1yZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0KX1nZXRBbGxFbnRyaWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fZW50cmllcy5lbnRyaWVzKCkpLm1hcCgoKFtlLHRdKT0+W2UsdF0pKX1zZXRFbnRyeShlLHQpe2NvbnN0IHI9bmV3IEJhZ2dhZ2VJbXBsKHRoaXMuX2VudHJpZXMpO3IuX2VudHJpZXMuc2V0KGUsdCk7cmV0dXJuIHJ9cmVtb3ZlRW50cnkoZSl7Y29uc3QgdD1uZXcgQmFnZ2FnZUltcGwodGhpcy5fZW50cmllcyk7dC5fZW50cmllcy5kZWxldGUoZSk7cmV0dXJuIHR9cmVtb3ZlRW50cmllcyguLi5lKXtjb25zdCB0PW5ldyBCYWdnYWdlSW1wbCh0aGlzLl9lbnRyaWVzKTtmb3IoY29uc3QgciBvZiBlKXt0Ll9lbnRyaWVzLmRlbGV0ZShyKX1yZXR1cm4gdH1jbGVhcigpe3JldHVybiBuZXcgQmFnZ2FnZUltcGx9fXQuQmFnZ2FnZUltcGw9QmFnZ2FnZUltcGx9LDgzMDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5iYWdnYWdlRW50cnlNZXRhZGF0YVN5bWJvbD12b2lkIDA7dC5iYWdnYWdlRW50cnlNZXRhZGF0YVN5bWJvbD1TeW1ib2woXCJCYWdnYWdlRW50cnlNZXRhZGF0YVwiKX0sMzY5OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nPXQuY3JlYXRlQmFnZ2FnZT12b2lkIDA7Y29uc3Qgbj1yKDkzMCk7Y29uc3QgYT1yKDk5Myk7Y29uc3Qgbz1yKDgzMCk7Y29uc3QgaT1uLkRpYWdBUEkuaW5zdGFuY2UoKTtmdW5jdGlvbiBjcmVhdGVCYWdnYWdlKGU9e30pe3JldHVybiBuZXcgYS5CYWdnYWdlSW1wbChuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGUpKSl9dC5jcmVhdGVCYWdnYWdlPWNyZWF0ZUJhZ2dhZ2U7ZnVuY3Rpb24gYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nKGUpe2lmKHR5cGVvZiBlIT09XCJzdHJpbmdcIil7aS5lcnJvcihgQ2Fubm90IGNyZWF0ZSBiYWdnYWdlIG1ldGFkYXRhIGZyb20gdW5rbm93biB0eXBlOiAke3R5cGVvZiBlfWApO2U9XCJcIn1yZXR1cm57X19UWVBFX186by5iYWdnYWdlRW50cnlNZXRhZGF0YVN5bWJvbCx0b1N0cmluZygpe3JldHVybiBlfX19dC5iYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmc9YmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nfSw2NzooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmNvbnRleHQ9dm9pZCAwO2NvbnN0IG49cig0OTEpO3QuY29udGV4dD1uLkNvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKX0sMjIzOihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuTm9vcENvbnRleHRNYW5hZ2VyPXZvaWQgMDtjb25zdCBuPXIoNzgwKTtjbGFzcyBOb29wQ29udGV4dE1hbmFnZXJ7YWN0aXZlKCl7cmV0dXJuIG4uUk9PVF9DT05URVhUfXdpdGgoZSx0LHIsLi4ubil7cmV0dXJuIHQuY2FsbChyLC4uLm4pfWJpbmQoZSx0KXtyZXR1cm4gdH1lbmFibGUoKXtyZXR1cm4gdGhpc31kaXNhYmxlKCl7cmV0dXJuIHRoaXN9fXQuTm9vcENvbnRleHRNYW5hZ2VyPU5vb3BDb250ZXh0TWFuYWdlcn0sNzgwOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlJPT1RfQ09OVEVYVD10LmNyZWF0ZUNvbnRleHRLZXk9dm9pZCAwO2Z1bmN0aW9uIGNyZWF0ZUNvbnRleHRLZXkoZSl7cmV0dXJuIFN5bWJvbC5mb3IoZSl9dC5jcmVhdGVDb250ZXh0S2V5PWNyZWF0ZUNvbnRleHRLZXk7Y2xhc3MgQmFzZUNvbnRleHR7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD10aGlzO3QuX2N1cnJlbnRDb250ZXh0PWU/bmV3IE1hcChlKTpuZXcgTWFwO3QuZ2V0VmFsdWU9ZT0+dC5fY3VycmVudENvbnRleHQuZ2V0KGUpO3Quc2V0VmFsdWU9KGUscik9Pntjb25zdCBuPW5ldyBCYXNlQ29udGV4dCh0Ll9jdXJyZW50Q29udGV4dCk7bi5fY3VycmVudENvbnRleHQuc2V0KGUscik7cmV0dXJuIG59O3QuZGVsZXRlVmFsdWU9ZT0+e2NvbnN0IHI9bmV3IEJhc2VDb250ZXh0KHQuX2N1cnJlbnRDb250ZXh0KTtyLl9jdXJyZW50Q29udGV4dC5kZWxldGUoZSk7cmV0dXJuIHJ9fX10LlJPT1RfQ09OVEVYVD1uZXcgQmFzZUNvbnRleHR9LDUwNjooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmRpYWc9dm9pZCAwO2NvbnN0IG49cig5MzApO3QuZGlhZz1uLkRpYWdBUEkuaW5zdGFuY2UoKX0sNTY6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5EaWFnQ29tcG9uZW50TG9nZ2VyPXZvaWQgMDtjb25zdCBuPXIoMTcyKTtjbGFzcyBEaWFnQ29tcG9uZW50TG9nZ2Vye2NvbnN0cnVjdG9yKGUpe3RoaXMuX25hbWVzcGFjZT1lLm5hbWVzcGFjZXx8XCJEaWFnQ29tcG9uZW50TG9nZ2VyXCJ9ZGVidWcoLi4uZSl7cmV0dXJuIGxvZ1Byb3h5KFwiZGVidWdcIix0aGlzLl9uYW1lc3BhY2UsZSl9ZXJyb3IoLi4uZSl7cmV0dXJuIGxvZ1Byb3h5KFwiZXJyb3JcIix0aGlzLl9uYW1lc3BhY2UsZSl9aW5mbyguLi5lKXtyZXR1cm4gbG9nUHJveHkoXCJpbmZvXCIsdGhpcy5fbmFtZXNwYWNlLGUpfXdhcm4oLi4uZSl7cmV0dXJuIGxvZ1Byb3h5KFwid2FyblwiLHRoaXMuX25hbWVzcGFjZSxlKX12ZXJib3NlKC4uLmUpe3JldHVybiBsb2dQcm94eShcInZlcmJvc2VcIix0aGlzLl9uYW1lc3BhY2UsZSl9fXQuRGlhZ0NvbXBvbmVudExvZ2dlcj1EaWFnQ29tcG9uZW50TG9nZ2VyO2Z1bmN0aW9uIGxvZ1Byb3h5KGUsdCxyKXtjb25zdCBhPSgwLG4uZ2V0R2xvYmFsKShcImRpYWdcIik7aWYoIWEpe3JldHVybn1yLnVuc2hpZnQodCk7cmV0dXJuIGFbZV0oLi4ucil9fSw5NzI6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuRGlhZ0NvbnNvbGVMb2dnZXI9dm9pZCAwO2NvbnN0IHI9W3tuOlwiZXJyb3JcIixjOlwiZXJyb3JcIn0se246XCJ3YXJuXCIsYzpcIndhcm5cIn0se246XCJpbmZvXCIsYzpcImluZm9cIn0se246XCJkZWJ1Z1wiLGM6XCJkZWJ1Z1wifSx7bjpcInZlcmJvc2VcIixjOlwidHJhY2VcIn1dO2NsYXNzIERpYWdDb25zb2xlTG9nZ2Vye2NvbnN0cnVjdG9yKCl7ZnVuY3Rpb24gX2NvbnNvbGVGdW5jKGUpe3JldHVybiBmdW5jdGlvbiguLi50KXtpZihjb25zb2xlKXtsZXQgcj1jb25zb2xlW2VdO2lmKHR5cGVvZiByIT09XCJmdW5jdGlvblwiKXtyPWNvbnNvbGUubG9nfWlmKHR5cGVvZiByPT09XCJmdW5jdGlvblwiKXtyZXR1cm4gci5hcHBseShjb25zb2xlLHQpfX19fWZvcihsZXQgZT0wO2U8ci5sZW5ndGg7ZSsrKXt0aGlzW3JbZV0ubl09X2NvbnNvbGVGdW5jKHJbZV0uYyl9fX10LkRpYWdDb25zb2xlTG9nZ2VyPURpYWdDb25zb2xlTG9nZ2VyfSw5MTI6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5jcmVhdGVMb2dMZXZlbERpYWdMb2dnZXI9dm9pZCAwO2NvbnN0IG49cig5NTcpO2Z1bmN0aW9uIGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcihlLHQpe2lmKGU8bi5EaWFnTG9nTGV2ZWwuTk9ORSl7ZT1uLkRpYWdMb2dMZXZlbC5OT05FfWVsc2UgaWYoZT5uLkRpYWdMb2dMZXZlbC5BTEwpe2U9bi5EaWFnTG9nTGV2ZWwuQUxMfXQ9dHx8e307ZnVuY3Rpb24gX2ZpbHRlckZ1bmMocixuKXtjb25zdCBhPXRbcl07aWYodHlwZW9mIGE9PT1cImZ1bmN0aW9uXCImJmU+PW4pe3JldHVybiBhLmJpbmQodCl9cmV0dXJuIGZ1bmN0aW9uKCl7fX1yZXR1cm57ZXJyb3I6X2ZpbHRlckZ1bmMoXCJlcnJvclwiLG4uRGlhZ0xvZ0xldmVsLkVSUk9SKSx3YXJuOl9maWx0ZXJGdW5jKFwid2FyblwiLG4uRGlhZ0xvZ0xldmVsLldBUk4pLGluZm86X2ZpbHRlckZ1bmMoXCJpbmZvXCIsbi5EaWFnTG9nTGV2ZWwuSU5GTyksZGVidWc6X2ZpbHRlckZ1bmMoXCJkZWJ1Z1wiLG4uRGlhZ0xvZ0xldmVsLkRFQlVHKSx2ZXJib3NlOl9maWx0ZXJGdW5jKFwidmVyYm9zZVwiLG4uRGlhZ0xvZ0xldmVsLlZFUkJPU0UpfX10LmNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcj1jcmVhdGVMb2dMZXZlbERpYWdMb2dnZXJ9LDk1NzooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5EaWFnTG9nTGV2ZWw9dm9pZCAwO3ZhciByOyhmdW5jdGlvbihlKXtlW2VbXCJOT05FXCJdPTBdPVwiTk9ORVwiO2VbZVtcIkVSUk9SXCJdPTMwXT1cIkVSUk9SXCI7ZVtlW1wiV0FSTlwiXT01MF09XCJXQVJOXCI7ZVtlW1wiSU5GT1wiXT02MF09XCJJTkZPXCI7ZVtlW1wiREVCVUdcIl09NzBdPVwiREVCVUdcIjtlW2VbXCJWRVJCT1NFXCJdPTgwXT1cIlZFUkJPU0VcIjtlW2VbXCJBTExcIl09OTk5OV09XCJBTExcIn0pKHI9dC5EaWFnTG9nTGV2ZWx8fCh0LkRpYWdMb2dMZXZlbD17fSkpfSwxNzI6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC51bnJlZ2lzdGVyR2xvYmFsPXQuZ2V0R2xvYmFsPXQucmVnaXN0ZXJHbG9iYWw9dm9pZCAwO2NvbnN0IG49cigyMDApO2NvbnN0IGE9cig1MjEpO2NvbnN0IG89cigxMzApO2NvbnN0IGk9YS5WRVJTSU9OLnNwbGl0KFwiLlwiKVswXTtjb25zdCBjPVN5bWJvbC5mb3IoYG9wZW50ZWxlbWV0cnkuanMuYXBpLiR7aX1gKTtjb25zdCBzPW4uX2dsb2JhbFRoaXM7ZnVuY3Rpb24gcmVnaXN0ZXJHbG9iYWwoZSx0LHIsbj1mYWxzZSl7dmFyIG87Y29uc3QgaT1zW2NdPShvPXNbY10pIT09bnVsbCYmbyE9PXZvaWQgMD9vOnt2ZXJzaW9uOmEuVkVSU0lPTn07aWYoIW4mJmlbZV0pe2NvbnN0IHQ9bmV3IEVycm9yKGBAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogJHtlfWApO3IuZXJyb3IodC5zdGFja3x8dC5tZXNzYWdlKTtyZXR1cm4gZmFsc2V9aWYoaS52ZXJzaW9uIT09YS5WRVJTSU9OKXtjb25zdCB0PW5ldyBFcnJvcihgQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2JHtpLnZlcnNpb259IGZvciAke2V9IGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdiR7YS5WRVJTSU9OfWApO3IuZXJyb3IodC5zdGFja3x8dC5tZXNzYWdlKTtyZXR1cm4gZmFsc2V9aVtlXT10O3IuZGVidWcoYEBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0ZXJlZCBhIGdsb2JhbCBmb3IgJHtlfSB2JHthLlZFUlNJT059LmApO3JldHVybiB0cnVlfXQucmVnaXN0ZXJHbG9iYWw9cmVnaXN0ZXJHbG9iYWw7ZnVuY3Rpb24gZ2V0R2xvYmFsKGUpe3ZhciB0LHI7Y29uc3Qgbj0odD1zW2NdKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudmVyc2lvbjtpZighbnx8ISgwLG8uaXNDb21wYXRpYmxlKShuKSl7cmV0dXJufXJldHVybihyPXNbY10pPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6cltlXX10LmdldEdsb2JhbD1nZXRHbG9iYWw7ZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbChlLHQpe3QuZGVidWcoYEBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgJHtlfSB2JHthLlZFUlNJT059LmApO2NvbnN0IHI9c1tjXTtpZihyKXtkZWxldGUgcltlXX19dC51bnJlZ2lzdGVyR2xvYmFsPXVucmVnaXN0ZXJHbG9iYWx9LDEzMDooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmlzQ29tcGF0aWJsZT10Ll9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrPXZvaWQgMDtjb25zdCBuPXIoNTIxKTtjb25zdCBhPS9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztmdW5jdGlvbiBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayhlKXtjb25zdCB0PW5ldyBTZXQoW2VdKTtjb25zdCByPW5ldyBTZXQ7Y29uc3Qgbj1lLm1hdGNoKGEpO2lmKCFuKXtyZXR1cm4oKT0+ZmFsc2V9Y29uc3Qgbz17bWFqb3I6K25bMV0sbWlub3I6K25bMl0scGF0Y2g6K25bM10scHJlcmVsZWFzZTpuWzRdfTtpZihvLnByZXJlbGVhc2UhPW51bGwpe3JldHVybiBmdW5jdGlvbiBpc0V4YWN0bWF0Y2godCl7cmV0dXJuIHQ9PT1lfX1mdW5jdGlvbiBfcmVqZWN0KGUpe3IuYWRkKGUpO3JldHVybiBmYWxzZX1mdW5jdGlvbiBfYWNjZXB0KGUpe3QuYWRkKGUpO3JldHVybiB0cnVlfXJldHVybiBmdW5jdGlvbiBpc0NvbXBhdGlibGUoZSl7aWYodC5oYXMoZSkpe3JldHVybiB0cnVlfWlmKHIuaGFzKGUpKXtyZXR1cm4gZmFsc2V9Y29uc3Qgbj1lLm1hdGNoKGEpO2lmKCFuKXtyZXR1cm4gX3JlamVjdChlKX1jb25zdCBpPXttYWpvcjorblsxXSxtaW5vcjorblsyXSxwYXRjaDorblszXSxwcmVyZWxlYXNlOm5bNF19O2lmKGkucHJlcmVsZWFzZSE9bnVsbCl7cmV0dXJuIF9yZWplY3QoZSl9aWYoby5tYWpvciE9PWkubWFqb3Ipe3JldHVybiBfcmVqZWN0KGUpfWlmKG8ubWFqb3I9PT0wKXtpZihvLm1pbm9yPT09aS5taW5vciYmby5wYXRjaDw9aS5wYXRjaCl7cmV0dXJuIF9hY2NlcHQoZSl9cmV0dXJuIF9yZWplY3QoZSl9aWYoby5taW5vcjw9aS5taW5vcil7cmV0dXJuIF9hY2NlcHQoZSl9cmV0dXJuIF9yZWplY3QoZSl9fXQuX21ha2VDb21wYXRpYmlsaXR5Q2hlY2s9X21ha2VDb21wYXRpYmlsaXR5Q2hlY2s7dC5pc0NvbXBhdGlibGU9X21ha2VDb21wYXRpYmlsaXR5Q2hlY2sobi5WRVJTSU9OKX0sODg2OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QubWV0cmljcz12b2lkIDA7Y29uc3Qgbj1yKDY1Myk7dC5tZXRyaWNzPW4uTWV0cmljc0FQSS5nZXRJbnN0YW5jZSgpfSw5MDE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuVmFsdWVUeXBlPXZvaWQgMDt2YXIgcjsoZnVuY3Rpb24oZSl7ZVtlW1wiSU5UXCJdPTBdPVwiSU5UXCI7ZVtlW1wiRE9VQkxFXCJdPTFdPVwiRE9VQkxFXCJ9KShyPXQuVmFsdWVUeXBlfHwodC5WYWx1ZVR5cGU9e30pKX0sMTAyOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmNyZWF0ZU5vb3BNZXRlcj10Lk5PT1BfT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVJfTUVUUklDPXQuTk9PUF9PQlNFUlZBQkxFX0dBVUdFX01FVFJJQz10Lk5PT1BfT0JTRVJWQUJMRV9DT1VOVEVSX01FVFJJQz10Lk5PT1BfVVBfRE9XTl9DT1VOVEVSX01FVFJJQz10Lk5PT1BfSElTVE9HUkFNX01FVFJJQz10Lk5PT1BfQ09VTlRFUl9NRVRSSUM9dC5OT09QX01FVEVSPXQuTm9vcE9ic2VydmFibGVVcERvd25Db3VudGVyTWV0cmljPXQuTm9vcE9ic2VydmFibGVHYXVnZU1ldHJpYz10Lk5vb3BPYnNlcnZhYmxlQ291bnRlck1ldHJpYz10Lk5vb3BPYnNlcnZhYmxlTWV0cmljPXQuTm9vcEhpc3RvZ3JhbU1ldHJpYz10Lk5vb3BVcERvd25Db3VudGVyTWV0cmljPXQuTm9vcENvdW50ZXJNZXRyaWM9dC5Ob29wTWV0cmljPXQuTm9vcE1ldGVyPXZvaWQgMDtjbGFzcyBOb29wTWV0ZXJ7Y29uc3RydWN0b3IoKXt9Y3JlYXRlSGlzdG9ncmFtKGUscil7cmV0dXJuIHQuTk9PUF9ISVNUT0dSQU1fTUVUUklDfWNyZWF0ZUNvdW50ZXIoZSxyKXtyZXR1cm4gdC5OT09QX0NPVU5URVJfTUVUUklDfWNyZWF0ZVVwRG93bkNvdW50ZXIoZSxyKXtyZXR1cm4gdC5OT09QX1VQX0RPV05fQ09VTlRFUl9NRVRSSUN9Y3JlYXRlT2JzZXJ2YWJsZUdhdWdlKGUscil7cmV0dXJuIHQuTk9PUF9PQlNFUlZBQkxFX0dBVUdFX01FVFJJQ31jcmVhdGVPYnNlcnZhYmxlQ291bnRlcihlLHIpe3JldHVybiB0Lk5PT1BfT0JTRVJWQUJMRV9DT1VOVEVSX01FVFJJQ31jcmVhdGVPYnNlcnZhYmxlVXBEb3duQ291bnRlcihlLHIpe3JldHVybiB0Lk5PT1BfT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVJfTUVUUklDfWFkZEJhdGNoT2JzZXJ2YWJsZUNhbGxiYWNrKGUsdCl7fXJlbW92ZUJhdGNoT2JzZXJ2YWJsZUNhbGxiYWNrKGUpe319dC5Ob29wTWV0ZXI9Tm9vcE1ldGVyO2NsYXNzIE5vb3BNZXRyaWN7fXQuTm9vcE1ldHJpYz1Ob29wTWV0cmljO2NsYXNzIE5vb3BDb3VudGVyTWV0cmljIGV4dGVuZHMgTm9vcE1ldHJpY3thZGQoZSx0KXt9fXQuTm9vcENvdW50ZXJNZXRyaWM9Tm9vcENvdW50ZXJNZXRyaWM7Y2xhc3MgTm9vcFVwRG93bkNvdW50ZXJNZXRyaWMgZXh0ZW5kcyBOb29wTWV0cmlje2FkZChlLHQpe319dC5Ob29wVXBEb3duQ291bnRlck1ldHJpYz1Ob29wVXBEb3duQ291bnRlck1ldHJpYztjbGFzcyBOb29wSGlzdG9ncmFtTWV0cmljIGV4dGVuZHMgTm9vcE1ldHJpY3tyZWNvcmQoZSx0KXt9fXQuTm9vcEhpc3RvZ3JhbU1ldHJpYz1Ob29wSGlzdG9ncmFtTWV0cmljO2NsYXNzIE5vb3BPYnNlcnZhYmxlTWV0cmlje2FkZENhbGxiYWNrKGUpe31yZW1vdmVDYWxsYmFjayhlKXt9fXQuTm9vcE9ic2VydmFibGVNZXRyaWM9Tm9vcE9ic2VydmFibGVNZXRyaWM7Y2xhc3MgTm9vcE9ic2VydmFibGVDb3VudGVyTWV0cmljIGV4dGVuZHMgTm9vcE9ic2VydmFibGVNZXRyaWN7fXQuTm9vcE9ic2VydmFibGVDb3VudGVyTWV0cmljPU5vb3BPYnNlcnZhYmxlQ291bnRlck1ldHJpYztjbGFzcyBOb29wT2JzZXJ2YWJsZUdhdWdlTWV0cmljIGV4dGVuZHMgTm9vcE9ic2VydmFibGVNZXRyaWN7fXQuTm9vcE9ic2VydmFibGVHYXVnZU1ldHJpYz1Ob29wT2JzZXJ2YWJsZUdhdWdlTWV0cmljO2NsYXNzIE5vb3BPYnNlcnZhYmxlVXBEb3duQ291bnRlck1ldHJpYyBleHRlbmRzIE5vb3BPYnNlcnZhYmxlTWV0cmlje310Lk5vb3BPYnNlcnZhYmxlVXBEb3duQ291bnRlck1ldHJpYz1Ob29wT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJNZXRyaWM7dC5OT09QX01FVEVSPW5ldyBOb29wTWV0ZXI7dC5OT09QX0NPVU5URVJfTUVUUklDPW5ldyBOb29wQ291bnRlck1ldHJpYzt0Lk5PT1BfSElTVE9HUkFNX01FVFJJQz1uZXcgTm9vcEhpc3RvZ3JhbU1ldHJpYzt0Lk5PT1BfVVBfRE9XTl9DT1VOVEVSX01FVFJJQz1uZXcgTm9vcFVwRG93bkNvdW50ZXJNZXRyaWM7dC5OT09QX09CU0VSVkFCTEVfQ09VTlRFUl9NRVRSSUM9bmV3IE5vb3BPYnNlcnZhYmxlQ291bnRlck1ldHJpYzt0Lk5PT1BfT0JTRVJWQUJMRV9HQVVHRV9NRVRSSUM9bmV3IE5vb3BPYnNlcnZhYmxlR2F1Z2VNZXRyaWM7dC5OT09QX09CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSX01FVFJJQz1uZXcgTm9vcE9ic2VydmFibGVVcERvd25Db3VudGVyTWV0cmljO2Z1bmN0aW9uIGNyZWF0ZU5vb3BNZXRlcigpe3JldHVybiB0Lk5PT1BfTUVURVJ9dC5jcmVhdGVOb29wTWV0ZXI9Y3JlYXRlTm9vcE1ldGVyfSw2NjA6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5OT09QX01FVEVSX1BST1ZJREVSPXQuTm9vcE1ldGVyUHJvdmlkZXI9dm9pZCAwO2NvbnN0IG49cigxMDIpO2NsYXNzIE5vb3BNZXRlclByb3ZpZGVye2dldE1ldGVyKGUsdCxyKXtyZXR1cm4gbi5OT09QX01FVEVSfX10Lk5vb3BNZXRlclByb3ZpZGVyPU5vb3BNZXRlclByb3ZpZGVyO3QuTk9PUF9NRVRFUl9QUk9WSURFUj1uZXcgTm9vcE1ldGVyUHJvdmlkZXJ9LDIwMDpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19KX06ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7ZVtuXT10W3JdfSk7dmFyIGE9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpaWYociE9PVwiZGVmYXVsdFwiJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikpbih0LGUscil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7YShyKDQ2KSx0KX0sNjUxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0Ll9nbG9iYWxUaGlzPXZvaWQgMDt0Ll9nbG9iYWxUaGlzPXR5cGVvZiBnbG9iYWxUaGlzPT09XCJvYmplY3RcIj9nbG9iYWxUaGlzOmdsb2JhbH0sNDY6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fSl9OmZ1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO2Vbbl09dFtyXX0pO3ZhciBhPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiBlKWlmKHIhPT1cImRlZmF1bHRcIiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpKW4odCxlLHIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO2Eocig2NTEpLHQpfSw5Mzk6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5wcm9wYWdhdGlvbj12b2lkIDA7Y29uc3Qgbj1yKDE4MSk7dC5wcm9wYWdhdGlvbj1uLlByb3BhZ2F0aW9uQVBJLmdldEluc3RhbmNlKCl9LDg3NDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5Ob29wVGV4dE1hcFByb3BhZ2F0b3I9dm9pZCAwO2NsYXNzIE5vb3BUZXh0TWFwUHJvcGFnYXRvcntpbmplY3QoZSx0KXt9ZXh0cmFjdChlLHQpe3JldHVybiBlfWZpZWxkcygpe3JldHVybltdfX10Lk5vb3BUZXh0TWFwUHJvcGFnYXRvcj1Ob29wVGV4dE1hcFByb3BhZ2F0b3J9LDE5NDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5kZWZhdWx0VGV4dE1hcFNldHRlcj10LmRlZmF1bHRUZXh0TWFwR2V0dGVyPXZvaWQgMDt0LmRlZmF1bHRUZXh0TWFwR2V0dGVyPXtnZXQoZSx0KXtpZihlPT1udWxsKXtyZXR1cm4gdW5kZWZpbmVkfXJldHVybiBlW3RdfSxrZXlzKGUpe2lmKGU9PW51bGwpe3JldHVybltdfXJldHVybiBPYmplY3Qua2V5cyhlKX19O3QuZGVmYXVsdFRleHRNYXBTZXR0ZXI9e3NldChlLHQscil7aWYoZT09bnVsbCl7cmV0dXJufWVbdF09cn19fSw4NDU6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC50cmFjZT12b2lkIDA7Y29uc3Qgbj1yKDk5Nyk7dC50cmFjZT1uLlRyYWNlQVBJLmdldEluc3RhbmNlKCl9LDQwMzooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0Lk5vblJlY29yZGluZ1NwYW49dm9pZCAwO2NvbnN0IG49cig0NzYpO2NsYXNzIE5vblJlY29yZGluZ1NwYW57Y29uc3RydWN0b3IoZT1uLklOVkFMSURfU1BBTl9DT05URVhUKXt0aGlzLl9zcGFuQ29udGV4dD1lfXNwYW5Db250ZXh0KCl7cmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0fXNldEF0dHJpYnV0ZShlLHQpe3JldHVybiB0aGlzfXNldEF0dHJpYnV0ZXMoZSl7cmV0dXJuIHRoaXN9YWRkRXZlbnQoZSx0KXtyZXR1cm4gdGhpc31zZXRTdGF0dXMoZSl7cmV0dXJuIHRoaXN9dXBkYXRlTmFtZShlKXtyZXR1cm4gdGhpc31lbmQoZSl7fWlzUmVjb3JkaW5nKCl7cmV0dXJuIGZhbHNlfXJlY29yZEV4Y2VwdGlvbihlLHQpe319dC5Ob25SZWNvcmRpbmdTcGFuPU5vblJlY29yZGluZ1NwYW59LDYxNDooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0Lk5vb3BUcmFjZXI9dm9pZCAwO2NvbnN0IG49cig0OTEpO2NvbnN0IGE9cig2MDcpO2NvbnN0IG89cig0MDMpO2NvbnN0IGk9cigxMzkpO2NvbnN0IGM9bi5Db250ZXh0QVBJLmdldEluc3RhbmNlKCk7Y2xhc3MgTm9vcFRyYWNlcntzdGFydFNwYW4oZSx0LHI9Yy5hY3RpdmUoKSl7Y29uc3Qgbj1Cb29sZWFuKHQ9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LnJvb3QpO2lmKG4pe3JldHVybiBuZXcgby5Ob25SZWNvcmRpbmdTcGFufWNvbnN0IHM9ciYmKDAsYS5nZXRTcGFuQ29udGV4dCkocik7aWYoaXNTcGFuQ29udGV4dChzKSYmKDAsaS5pc1NwYW5Db250ZXh0VmFsaWQpKHMpKXtyZXR1cm4gbmV3IG8uTm9uUmVjb3JkaW5nU3BhbihzKX1lbHNle3JldHVybiBuZXcgby5Ob25SZWNvcmRpbmdTcGFufX1zdGFydEFjdGl2ZVNwYW4oZSx0LHIsbil7bGV0IG87bGV0IGk7bGV0IHM7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtyZXR1cm59ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoPT09Mil7cz10fWVsc2UgaWYoYXJndW1lbnRzLmxlbmd0aD09PTMpe289dDtzPXJ9ZWxzZXtvPXQ7aT1yO3M9bn1jb25zdCB1PWkhPT1udWxsJiZpIT09dm9pZCAwP2k6Yy5hY3RpdmUoKTtjb25zdCBsPXRoaXMuc3RhcnRTcGFuKGUsbyx1KTtjb25zdCBnPSgwLGEuc2V0U3BhbikodSxsKTtyZXR1cm4gYy53aXRoKGcscyx1bmRlZmluZWQsbCl9fXQuTm9vcFRyYWNlcj1Ob29wVHJhY2VyO2Z1bmN0aW9uIGlzU3BhbkNvbnRleHQoZSl7cmV0dXJuIHR5cGVvZiBlPT09XCJvYmplY3RcIiYmdHlwZW9mIGVbXCJzcGFuSWRcIl09PT1cInN0cmluZ1wiJiZ0eXBlb2YgZVtcInRyYWNlSWRcIl09PT1cInN0cmluZ1wiJiZ0eXBlb2YgZVtcInRyYWNlRmxhZ3NcIl09PT1cIm51bWJlclwifX0sMTI0OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuTm9vcFRyYWNlclByb3ZpZGVyPXZvaWQgMDtjb25zdCBuPXIoNjE0KTtjbGFzcyBOb29wVHJhY2VyUHJvdmlkZXJ7Z2V0VHJhY2VyKGUsdCxyKXtyZXR1cm4gbmV3IG4uTm9vcFRyYWNlcn19dC5Ob29wVHJhY2VyUHJvdmlkZXI9Tm9vcFRyYWNlclByb3ZpZGVyfSwxMjU6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5Qcm94eVRyYWNlcj12b2lkIDA7Y29uc3Qgbj1yKDYxNCk7Y29uc3QgYT1uZXcgbi5Ob29wVHJhY2VyO2NsYXNzIFByb3h5VHJhY2Vye2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMuX3Byb3ZpZGVyPWU7dGhpcy5uYW1lPXQ7dGhpcy52ZXJzaW9uPXI7dGhpcy5vcHRpb25zPW59c3RhcnRTcGFuKGUsdCxyKXtyZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKGUsdCxyKX1zdGFydEFjdGl2ZVNwYW4oZSx0LHIsbil7Y29uc3QgYT10aGlzLl9nZXRUcmFjZXIoKTtyZXR1cm4gUmVmbGVjdC5hcHBseShhLnN0YXJ0QWN0aXZlU3BhbixhLGFyZ3VtZW50cyl9X2dldFRyYWNlcigpe2lmKHRoaXMuX2RlbGVnYXRlKXtyZXR1cm4gdGhpcy5fZGVsZWdhdGV9Y29uc3QgZT10aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsdGhpcy52ZXJzaW9uLHRoaXMub3B0aW9ucyk7aWYoIWUpe3JldHVybiBhfXRoaXMuX2RlbGVnYXRlPWU7cmV0dXJuIHRoaXMuX2RlbGVnYXRlfX10LlByb3h5VHJhY2VyPVByb3h5VHJhY2VyfSw4NDY6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5Qcm94eVRyYWNlclByb3ZpZGVyPXZvaWQgMDtjb25zdCBuPXIoMTI1KTtjb25zdCBhPXIoMTI0KTtjb25zdCBvPW5ldyBhLk5vb3BUcmFjZXJQcm92aWRlcjtjbGFzcyBQcm94eVRyYWNlclByb3ZpZGVye2dldFRyYWNlcihlLHQscil7dmFyIGE7cmV0dXJuKGE9dGhpcy5nZXREZWxlZ2F0ZVRyYWNlcihlLHQscikpIT09bnVsbCYmYSE9PXZvaWQgMD9hOm5ldyBuLlByb3h5VHJhY2VyKHRoaXMsZSx0LHIpfWdldERlbGVnYXRlKCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5fZGVsZWdhdGUpIT09bnVsbCYmZSE9PXZvaWQgMD9lOm99c2V0RGVsZWdhdGUoZSl7dGhpcy5fZGVsZWdhdGU9ZX1nZXREZWxlZ2F0ZVRyYWNlcihlLHQscil7dmFyIG47cmV0dXJuKG49dGhpcy5fZGVsZWdhdGUpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5nZXRUcmFjZXIoZSx0LHIpfX10LlByb3h5VHJhY2VyUHJvdmlkZXI9UHJveHlUcmFjZXJQcm92aWRlcn0sOTk2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlNhbXBsaW5nRGVjaXNpb249dm9pZCAwO3ZhciByOyhmdW5jdGlvbihlKXtlW2VbXCJOT1RfUkVDT1JEXCJdPTBdPVwiTk9UX1JFQ09SRFwiO2VbZVtcIlJFQ09SRFwiXT0xXT1cIlJFQ09SRFwiO2VbZVtcIlJFQ09SRF9BTkRfU0FNUExFRFwiXT0yXT1cIlJFQ09SRF9BTkRfU0FNUExFRFwifSkocj10LlNhbXBsaW5nRGVjaXNpb258fCh0LlNhbXBsaW5nRGVjaXNpb249e30pKX0sNjA3OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuZ2V0U3BhbkNvbnRleHQ9dC5zZXRTcGFuQ29udGV4dD10LmRlbGV0ZVNwYW49dC5zZXRTcGFuPXQuZ2V0QWN0aXZlU3Bhbj10LmdldFNwYW49dm9pZCAwO2NvbnN0IG49cig3ODApO2NvbnN0IGE9cig0MDMpO2NvbnN0IG89cig0OTEpO2NvbnN0IGk9KDAsbi5jcmVhdGVDb250ZXh0S2V5KShcIk9wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTlwiKTtmdW5jdGlvbiBnZXRTcGFuKGUpe3JldHVybiBlLmdldFZhbHVlKGkpfHx1bmRlZmluZWR9dC5nZXRTcGFuPWdldFNwYW47ZnVuY3Rpb24gZ2V0QWN0aXZlU3Bhbigpe3JldHVybiBnZXRTcGFuKG8uQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKX10LmdldEFjdGl2ZVNwYW49Z2V0QWN0aXZlU3BhbjtmdW5jdGlvbiBzZXRTcGFuKGUsdCl7cmV0dXJuIGUuc2V0VmFsdWUoaSx0KX10LnNldFNwYW49c2V0U3BhbjtmdW5jdGlvbiBkZWxldGVTcGFuKGUpe3JldHVybiBlLmRlbGV0ZVZhbHVlKGkpfXQuZGVsZXRlU3Bhbj1kZWxldGVTcGFuO2Z1bmN0aW9uIHNldFNwYW5Db250ZXh0KGUsdCl7cmV0dXJuIHNldFNwYW4oZSxuZXcgYS5Ob25SZWNvcmRpbmdTcGFuKHQpKX10LnNldFNwYW5Db250ZXh0PXNldFNwYW5Db250ZXh0O2Z1bmN0aW9uIGdldFNwYW5Db250ZXh0KGUpe3ZhciB0O3JldHVybih0PWdldFNwYW4oZSkpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5zcGFuQ29udGV4dCgpfXQuZ2V0U3BhbkNvbnRleHQ9Z2V0U3BhbkNvbnRleHR9LDMyNTooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlRyYWNlU3RhdGVJbXBsPXZvaWQgMDtjb25zdCBuPXIoNTY0KTtjb25zdCBhPTMyO2NvbnN0IG89NTEyO2NvbnN0IGk9XCIsXCI7Y29uc3QgYz1cIj1cIjtjbGFzcyBUcmFjZVN0YXRlSW1wbHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbnRlcm5hbFN0YXRlPW5ldyBNYXA7aWYoZSl0aGlzLl9wYXJzZShlKX1zZXQoZSx0KXtjb25zdCByPXRoaXMuX2Nsb25lKCk7aWYoci5faW50ZXJuYWxTdGF0ZS5oYXMoZSkpe3IuX2ludGVybmFsU3RhdGUuZGVsZXRlKGUpfXIuX2ludGVybmFsU3RhdGUuc2V0KGUsdCk7cmV0dXJuIHJ9dW5zZXQoZSl7Y29uc3QgdD10aGlzLl9jbG9uZSgpO3QuX2ludGVybmFsU3RhdGUuZGVsZXRlKGUpO3JldHVybiB0fWdldChlKXtyZXR1cm4gdGhpcy5faW50ZXJuYWxTdGF0ZS5nZXQoZSl9c2VyaWFsaXplKCl7cmV0dXJuIHRoaXMuX2tleXMoKS5yZWR1Y2UoKChlLHQpPT57ZS5wdXNoKHQrYyt0aGlzLmdldCh0KSk7cmV0dXJuIGV9KSxbXSkuam9pbihpKX1fcGFyc2UoZSl7aWYoZS5sZW5ndGg+bylyZXR1cm47dGhpcy5faW50ZXJuYWxTdGF0ZT1lLnNwbGl0KGkpLnJldmVyc2UoKS5yZWR1Y2UoKChlLHQpPT57Y29uc3Qgcj10LnRyaW0oKTtjb25zdCBhPXIuaW5kZXhPZihjKTtpZihhIT09LTEpe2NvbnN0IG89ci5zbGljZSgwLGEpO2NvbnN0IGk9ci5zbGljZShhKzEsdC5sZW5ndGgpO2lmKCgwLG4udmFsaWRhdGVLZXkpKG8pJiYoMCxuLnZhbGlkYXRlVmFsdWUpKGkpKXtlLnNldChvLGkpfWVsc2V7fX1yZXR1cm4gZX0pLG5ldyBNYXApO2lmKHRoaXMuX2ludGVybmFsU3RhdGUuc2l6ZT5hKXt0aGlzLl9pbnRlcm5hbFN0YXRlPW5ldyBNYXAoQXJyYXkuZnJvbSh0aGlzLl9pbnRlcm5hbFN0YXRlLmVudHJpZXMoKSkucmV2ZXJzZSgpLnNsaWNlKDAsYSkpfX1fa2V5cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2ludGVybmFsU3RhdGUua2V5cygpKS5yZXZlcnNlKCl9X2Nsb25lKCl7Y29uc3QgZT1uZXcgVHJhY2VTdGF0ZUltcGw7ZS5faW50ZXJuYWxTdGF0ZT1uZXcgTWFwKHRoaXMuX2ludGVybmFsU3RhdGUpO3JldHVybiBlfX10LlRyYWNlU3RhdGVJbXBsPVRyYWNlU3RhdGVJbXBsfSw1NjQ6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QudmFsaWRhdGVWYWx1ZT10LnZhbGlkYXRlS2V5PXZvaWQgMDtjb25zdCByPVwiW18wLTlhLXotKi9dXCI7Y29uc3Qgbj1gW2Etel0ke3J9ezAsMjU1fWA7Y29uc3QgYT1gW2EtejAtOV0ke3J9ezAsMjQwfUBbYS16XSR7cn17MCwxM31gO2NvbnN0IG89bmV3IFJlZ0V4cChgXig/OiR7bn18JHthfSkkYCk7Y29uc3QgaT0vXlsgLX5dezAsMjU1fVshLX5dJC87Y29uc3QgYz0vLHw9LztmdW5jdGlvbiB2YWxpZGF0ZUtleShlKXtyZXR1cm4gby50ZXN0KGUpfXQudmFsaWRhdGVLZXk9dmFsaWRhdGVLZXk7ZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZShlKXtyZXR1cm4gaS50ZXN0KGUpJiYhYy50ZXN0KGUpfXQudmFsaWRhdGVWYWx1ZT12YWxpZGF0ZVZhbHVlfSw5ODooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmNyZWF0ZVRyYWNlU3RhdGU9dm9pZCAwO2NvbnN0IG49cigzMjUpO2Z1bmN0aW9uIGNyZWF0ZVRyYWNlU3RhdGUoZSl7cmV0dXJuIG5ldyBuLlRyYWNlU3RhdGVJbXBsKGUpfXQuY3JlYXRlVHJhY2VTdGF0ZT1jcmVhdGVUcmFjZVN0YXRlfSw0NzY6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5JTlZBTElEX1NQQU5fQ09OVEVYVD10LklOVkFMSURfVFJBQ0VJRD10LklOVkFMSURfU1BBTklEPXZvaWQgMDtjb25zdCBuPXIoNDc1KTt0LklOVkFMSURfU1BBTklEPVwiMDAwMDAwMDAwMDAwMDAwMFwiO3QuSU5WQUxJRF9UUkFDRUlEPVwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIjt0LklOVkFMSURfU1BBTl9DT05URVhUPXt0cmFjZUlkOnQuSU5WQUxJRF9UUkFDRUlELHNwYW5JZDp0LklOVkFMSURfU1BBTklELHRyYWNlRmxhZ3M6bi5UcmFjZUZsYWdzLk5PTkV9fSwzNTc6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuU3BhbktpbmQ9dm9pZCAwO3ZhciByOyhmdW5jdGlvbihlKXtlW2VbXCJJTlRFUk5BTFwiXT0wXT1cIklOVEVSTkFMXCI7ZVtlW1wiU0VSVkVSXCJdPTFdPVwiU0VSVkVSXCI7ZVtlW1wiQ0xJRU5UXCJdPTJdPVwiQ0xJRU5UXCI7ZVtlW1wiUFJPRFVDRVJcIl09M109XCJQUk9EVUNFUlwiO2VbZVtcIkNPTlNVTUVSXCJdPTRdPVwiQ09OU1VNRVJcIn0pKHI9dC5TcGFuS2luZHx8KHQuU3BhbktpbmQ9e30pKX0sMTM5OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3Qud3JhcFNwYW5Db250ZXh0PXQuaXNTcGFuQ29udGV4dFZhbGlkPXQuaXNWYWxpZFNwYW5JZD10LmlzVmFsaWRUcmFjZUlkPXZvaWQgMDtjb25zdCBuPXIoNDc2KTtjb25zdCBhPXIoNDAzKTtjb25zdCBvPS9eKFswLTlhLWZdezMyfSkkL2k7Y29uc3QgaT0vXlswLTlhLWZdezE2fSQvaTtmdW5jdGlvbiBpc1ZhbGlkVHJhY2VJZChlKXtyZXR1cm4gby50ZXN0KGUpJiZlIT09bi5JTlZBTElEX1RSQUNFSUR9dC5pc1ZhbGlkVHJhY2VJZD1pc1ZhbGlkVHJhY2VJZDtmdW5jdGlvbiBpc1ZhbGlkU3BhbklkKGUpe3JldHVybiBpLnRlc3QoZSkmJmUhPT1uLklOVkFMSURfU1BBTklEfXQuaXNWYWxpZFNwYW5JZD1pc1ZhbGlkU3BhbklkO2Z1bmN0aW9uIGlzU3BhbkNvbnRleHRWYWxpZChlKXtyZXR1cm4gaXNWYWxpZFRyYWNlSWQoZS50cmFjZUlkKSYmaXNWYWxpZFNwYW5JZChlLnNwYW5JZCl9dC5pc1NwYW5Db250ZXh0VmFsaWQ9aXNTcGFuQ29udGV4dFZhbGlkO2Z1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChlKXtyZXR1cm4gbmV3IGEuTm9uUmVjb3JkaW5nU3BhbihlKX10LndyYXBTcGFuQ29udGV4dD13cmFwU3BhbkNvbnRleHR9LDg0NzooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5TcGFuU3RhdHVzQ29kZT12b2lkIDA7dmFyIHI7KGZ1bmN0aW9uKGUpe2VbZVtcIlVOU0VUXCJdPTBdPVwiVU5TRVRcIjtlW2VbXCJPS1wiXT0xXT1cIk9LXCI7ZVtlW1wiRVJST1JcIl09Ml09XCJFUlJPUlwifSkocj10LlNwYW5TdGF0dXNDb2RlfHwodC5TcGFuU3RhdHVzQ29kZT17fSkpfSw0NzU6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuVHJhY2VGbGFncz12b2lkIDA7dmFyIHI7KGZ1bmN0aW9uKGUpe2VbZVtcIk5PTkVcIl09MF09XCJOT05FXCI7ZVtlW1wiU0FNUExFRFwiXT0xXT1cIlNBTVBMRURcIn0pKHI9dC5UcmFjZUZsYWdzfHwodC5UcmFjZUZsYWdzPXt9KSl9LDUyMTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5WRVJTSU9OPXZvaWQgMDt0LlZFUlNJT049XCIxLjYuMFwifX07dmFyIHQ9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhyKXt2YXIgbj10W3JdO2lmKG4hPT11bmRlZmluZWQpe3JldHVybiBuLmV4cG9ydHN9dmFyIGE9dFtyXT17ZXhwb3J0czp7fX07dmFyIG89dHJ1ZTt0cnl7ZVtyXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtvPWZhbHNlfWZpbmFsbHl7aWYobylkZWxldGUgdFtyXX1yZXR1cm4gYS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgcj17fTsoKCk9Pnt2YXIgZT1yO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7ZS50cmFjZT1lLnByb3BhZ2F0aW9uPWUubWV0cmljcz1lLmRpYWc9ZS5jb250ZXh0PWUuSU5WQUxJRF9TUEFOX0NPTlRFWFQ9ZS5JTlZBTElEX1RSQUNFSUQ9ZS5JTlZBTElEX1NQQU5JRD1lLmlzVmFsaWRTcGFuSWQ9ZS5pc1ZhbGlkVHJhY2VJZD1lLmlzU3BhbkNvbnRleHRWYWxpZD1lLmNyZWF0ZVRyYWNlU3RhdGU9ZS5UcmFjZUZsYWdzPWUuU3BhblN0YXR1c0NvZGU9ZS5TcGFuS2luZD1lLlNhbXBsaW5nRGVjaXNpb249ZS5Qcm94eVRyYWNlclByb3ZpZGVyPWUuUHJveHlUcmFjZXI9ZS5kZWZhdWx0VGV4dE1hcFNldHRlcj1lLmRlZmF1bHRUZXh0TWFwR2V0dGVyPWUuVmFsdWVUeXBlPWUuY3JlYXRlTm9vcE1ldGVyPWUuRGlhZ0xvZ0xldmVsPWUuRGlhZ0NvbnNvbGVMb2dnZXI9ZS5ST09UX0NPTlRFWFQ9ZS5jcmVhdGVDb250ZXh0S2V5PWUuYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nPXZvaWQgMDt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDM2OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJiYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmdcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB0LmJhZ2dhZ2VFbnRyeU1ldGFkYXRhRnJvbVN0cmluZ319KTt2YXIgbj1fX25jY3dwY2tfcmVxdWlyZV9fKDc4MCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJjcmVhdGVDb250ZXh0S2V5XCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5jcmVhdGVDb250ZXh0S2V5fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiUk9PVF9DT05URVhUXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ST09UX0NPTlRFWFR9fSk7dmFyIGE9X19uY2N3cGNrX3JlcXVpcmVfXyg5NzIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiRGlhZ0NvbnNvbGVMb2dnZXJcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBhLkRpYWdDb25zb2xlTG9nZ2VyfX0pO3ZhciBvPV9fbmNjd3Bja19yZXF1aXJlX18oOTU3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIkRpYWdMb2dMZXZlbFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uRGlhZ0xvZ0xldmVsfX0pO3ZhciBpPV9fbmNjd3Bja19yZXF1aXJlX18oMTAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImNyZWF0ZU5vb3BNZXRlclwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuY3JlYXRlTm9vcE1ldGVyfX0pO3ZhciBjPV9fbmNjd3Bja19yZXF1aXJlX18oOTAxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIlZhbHVlVHlwZVwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuVmFsdWVUeXBlfX0pO3ZhciBzPV9fbmNjd3Bja19yZXF1aXJlX18oMTk0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRUZXh0TWFwR2V0dGVyXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kZWZhdWx0VGV4dE1hcEdldHRlcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRUZXh0TWFwU2V0dGVyXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kZWZhdWx0VGV4dE1hcFNldHRlcn19KTt2YXIgdT1fX25jY3dwY2tfcmVxdWlyZV9fKDEyNSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJQcm94eVRyYWNlclwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuUHJveHlUcmFjZXJ9fSk7dmFyIGw9X19uY2N3cGNrX3JlcXVpcmVfXyg4NDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiUHJveHlUcmFjZXJQcm92aWRlclwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuUHJveHlUcmFjZXJQcm92aWRlcn19KTt2YXIgZz1fX25jY3dwY2tfcmVxdWlyZV9fKDk5Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJTYW1wbGluZ0RlY2lzaW9uXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5TYW1wbGluZ0RlY2lzaW9ufX0pO3ZhciBwPV9fbmNjd3Bja19yZXF1aXJlX18oMzU3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIlNwYW5LaW5kXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5TcGFuS2luZH19KTt2YXIgZD1fX25jY3dwY2tfcmVxdWlyZV9fKDg0Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJTcGFuU3RhdHVzQ29kZVwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQuU3BhblN0YXR1c0NvZGV9fSk7dmFyIF89X19uY2N3cGNrX3JlcXVpcmVfXyg0NzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiVHJhY2VGbGFnc1wiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uVHJhY2VGbGFnc319KTt2YXIgZj1fX25jY3dwY2tfcmVxdWlyZV9fKDk4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImNyZWF0ZVRyYWNlU3RhdGVcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBmLmNyZWF0ZVRyYWNlU3RhdGV9fSk7dmFyIGI9X19uY2N3cGNrX3JlcXVpcmVfXygxMzkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiaXNTcGFuQ29udGV4dFZhbGlkXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi5pc1NwYW5Db250ZXh0VmFsaWR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJpc1ZhbGlkVHJhY2VJZFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIuaXNWYWxpZFRyYWNlSWR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJpc1ZhbGlkU3BhbklkXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi5pc1ZhbGlkU3BhbklkfX0pO3ZhciB2PV9fbmNjd3Bja19yZXF1aXJlX18oNDc2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIklOVkFMSURfU1BBTklEXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdi5JTlZBTElEX1NQQU5JRH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIklOVkFMSURfVFJBQ0VJRFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYuSU5WQUxJRF9UUkFDRUlEfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiSU5WQUxJRF9TUEFOX0NPTlRFWFRcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB2LklOVkFMSURfU1BBTl9DT05URVhUfX0pO2NvbnN0IE89X19uY2N3cGNrX3JlcXVpcmVfXyg2Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJjb250ZXh0XCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTy5jb250ZXh0fX0pO2NvbnN0IFA9X19uY2N3cGNrX3JlcXVpcmVfXyg1MDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGlhZ1wiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuZGlhZ319KTtjb25zdCBOPV9fbmNjd3Bja19yZXF1aXJlX18oODg2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIm1ldHJpY3NcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBOLm1ldHJpY3N9fSk7Y29uc3QgUz1fX25jY3dwY2tfcmVxdWlyZV9fKDkzOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJwcm9wYWdhdGlvblwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMucHJvcGFnYXRpb259fSk7Y29uc3QgQz1fX25jY3dwY2tfcmVxdWlyZV9fKDg0NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJ0cmFjZVwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEMudHJhY2V9fSk7ZVtcImRlZmF1bHRcIl09e2NvbnRleHQ6Ty5jb250ZXh0LGRpYWc6UC5kaWFnLG1ldHJpY3M6Ti5tZXRyaWNzLHByb3BhZ2F0aW9uOlMucHJvcGFnYXRpb24sdHJhY2U6Qy50cmFjZX19KSgpO21vZHVsZS5leHBvcnRzPXJ9KSgpOyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/@opentelemetry/api/index.js\n");
|
273
|
-
|
274
|
-
/***/ }),
|
275
|
-
|
276
|
-
/***/ "./node_modules/next/dist/lib/is-error.js":
|
277
|
-
/*!************************************************!*\
|
278
|
-
!*** ./node_modules/next/dist/lib/is-error.js ***!
|
279
|
-
\************************************************/
|
280
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
281
|
-
|
282
|
-
"use strict";
|
283
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n /**\n * Checks whether the given value is a NextError.\n * This can be used to print a more detailed error message with properties like `code` & `digest`.\n */ default: function() {\n return isError;\n },\n getProperError: function() {\n return getProperError;\n }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"./node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n return typeof err === 'object' && err !== null && 'name' in err && 'message' in err;\n}\nfunction safeStringify(obj) {\n const seen = new WeakSet();\n return JSON.stringify(obj, (_key, value)=>{\n // If value is an object and already seen, replace with \"[Circular]\"\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n return value;\n });\n}\nfunction getProperError(err) {\n if (isError(err)) {\n return err;\n }\n if (true) {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === 'undefined') {\n return new Error('An undefined error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined');\n }\n if (err === null) {\n return new Error('A null error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined');\n }\n }\n return new Error((0, _isplainobject.isPlainObject)(err) ? safeStringify(err) : err + '');\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBK0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxEZXNrdG9wXFxXb3JrU3BhY2VcXHRlc3R3aWRnZXRcXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcbGliXFxpcy1lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgZ2V0UHJvcGVyRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBOZXh0RXJyb3IuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByaW50IGEgbW9yZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlIHdpdGggcHJvcGVydGllcyBsaWtlIGBjb2RlYCAmIGBkaWdlc3RgLlxuICovIGRlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNFcnJvcjtcbiAgICB9LFxuICAgIGdldFByb3BlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFByb3BlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX2lzcGxhaW5vYmplY3QgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9pcy1wbGFpbi1vYmplY3RcIik7XG5mdW5jdGlvbiBpc0Vycm9yKGVycikge1xuICAgIHJldHVybiB0eXBlb2YgZXJyID09PSAnb2JqZWN0JyAmJiBlcnIgIT09IG51bGwgJiYgJ25hbWUnIGluIGVyciAmJiAnbWVzc2FnZScgaW4gZXJyO1xufVxuZnVuY3Rpb24gc2FmZVN0cmluZ2lmeShvYmopIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCAoX2tleSwgdmFsdWUpPT57XG4gICAgICAgIC8vIElmIHZhbHVlIGlzIGFuIG9iamVjdCBhbmQgYWxyZWFkeSBzZWVuLCByZXBsYWNlIHdpdGggXCJbQ2lyY3VsYXJdXCJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlckVycm9yKGVycikge1xuICAgIGlmIChpc0Vycm9yKGVycikpIHtcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIC8vIHByb3ZpZGUgYmV0dGVyIGVycm9yIGZvciBjYXNlIHdoZXJlIGB0aHJvdyB1bmRlZmluZWRgXG4gICAgICAgIC8vIGlzIGNhbGxlZCBpbiBkZXZlbG9wbWVudFxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0FuIHVuZGVmaW5lZCBlcnJvciB3YXMgdGhyb3duLCAnICsgJ3NlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0EgbnVsbCBlcnJvciB3YXMgdGhyb3duLCAnICsgJ3NlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXJyb3IoKDAsIF9pc3BsYWlub2JqZWN0LmlzUGxhaW5PYmplY3QpKGVycikgPyBzYWZlU3RyaW5naWZ5KGVycikgOiBlcnIgKyAnJyk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/is-error.js\n");
|
284
|
-
|
285
|
-
/***/ }),
|
286
|
-
|
287
|
-
/***/ "./node_modules/next/dist/lib/pretty-bytes.js":
|
288
|
-
/*!****************************************************!*\
|
289
|
-
!*** ./node_modules/next/dist/lib/pretty-bytes.js ***!
|
290
|
-
\****************************************************/
|
291
|
-
/***/ ((__unused_webpack_module, exports) => {
|
292
|
-
|
293
|
-
"use strict";
|
294
|
-
eval("/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return prettyBytes;\n }\n}));\nconst UNITS = [\n 'B',\n 'kB',\n 'MB',\n 'GB',\n 'TB',\n 'PB',\n 'EB',\n 'ZB',\n 'YB'\n];\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/ const toLocaleString = (number, locale)=>{\n let result = number;\n if (typeof locale === 'string') {\n result = number.toLocaleString(locale);\n } else if (locale === true) {\n result = number.toLocaleString();\n }\n return result;\n};\nfunction prettyBytes(number, options) {\n if (!Number.isFinite(number)) {\n throw new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n }\n options = Object.assign({}, options);\n if (options.signed && number === 0) {\n return ' 0 B';\n }\n const isNegative = number < 0;\n const prefix = isNegative ? '-' : options.signed ? '+' : '';\n if (isNegative) {\n number = -number;\n }\n if (number < 1) {\n const numberString = toLocaleString(number, options.locale);\n return prefix + numberString + ' B';\n }\n const exponent = Math.min(Math.floor(Math.log10(number) / 3), UNITS.length - 1);\n number = Number((number / Math.pow(1000, exponent)).toPrecision(3));\n const numberString = toLocaleString(number, options.locale);\n const unit = UNITS[exponent];\n return prefix + numberString + ' ' + unit;\n}\n\n//# sourceMappingURL=pretty-bytes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9wcmV0dHktYnl0ZXMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEdBQWdCO0FBQ2hCLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDJDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGNBQWMsSUFBSSxPQUFPO0FBQ3RGO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcRGVza3RvcFxcV29ya1NwYWNlXFx0ZXN0d2lkZ2V0XFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXGxpYlxccHJldHR5LWJ5dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHByZXR0eUJ5dGVzO1xuICAgIH1cbn0pO1xuY29uc3QgVU5JVFMgPSBbXG4gICAgJ0InLFxuICAgICdrQicsXG4gICAgJ01CJyxcbiAgICAnR0InLFxuICAgICdUQicsXG4gICAgJ1BCJyxcbiAgICAnRUInLFxuICAgICdaQicsXG4gICAgJ1lCJ1xuXTtcbi8qXG5Gb3JtYXRzIHRoZSBnaXZlbiBudW1iZXIgdXNpbmcgYE51bWJlciN0b0xvY2FsZVN0cmluZ2AuXG4tIElmIGxvY2FsZSBpcyBhIHN0cmluZywgdGhlIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGEgbG9jYWxlLWtleSAoZm9yIGV4YW1wbGU6IGBkZWApLlxuLSBJZiBsb2NhbGUgaXMgdHJ1ZSwgdGhlIHN5c3RlbSBkZWZhdWx0IGxvY2FsZSBpcyB1c2VkIGZvciB0cmFuc2xhdGlvbi5cbi0gSWYgbm8gdmFsdWUgZm9yIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHRoZSBudW1iZXIgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC5cbiovIGNvbnN0IHRvTG9jYWxlU3RyaW5nID0gKG51bWJlciwgbG9jYWxlKT0+e1xuICAgIGxldCByZXN1bHQgPSBudW1iZXI7XG4gICAgaWYgKHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlc3VsdCA9IG51bWJlci50b0xvY2FsZVN0cmluZyhsb2NhbGUpO1xuICAgIH0gZWxzZSBpZiAobG9jYWxlID09PSB0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IG51bWJlci50b0xvY2FsZVN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmZ1bmN0aW9uIHByZXR0eUJ5dGVzKG51bWJlciwgb3B0aW9ucykge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyLCBnb3QgJHt0eXBlb2YgbnVtYmVyfTogJHtudW1iZXJ9YCk7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5zaWduZWQgJiYgbnVtYmVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnIDAgQic7XG4gICAgfVxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSBudW1iZXIgPCAwO1xuICAgIGNvbnN0IHByZWZpeCA9IGlzTmVnYXRpdmUgPyAnLScgOiBvcHRpb25zLnNpZ25lZCA/ICcrJyA6ICcnO1xuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgIG51bWJlciA9IC1udW1iZXI7XG4gICAgfVxuICAgIGlmIChudW1iZXIgPCAxKSB7XG4gICAgICAgIGNvbnN0IG51bWJlclN0cmluZyA9IHRvTG9jYWxlU3RyaW5nKG51bWJlciwgb3B0aW9ucy5sb2NhbGUpO1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgbnVtYmVyU3RyaW5nICsgJyBCJztcbiAgICB9XG4gICAgY29uc3QgZXhwb25lbnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKE1hdGgubG9nMTAobnVtYmVyKSAvIDMpLCBVTklUUy5sZW5ndGggLSAxKTtcbiAgICBudW1iZXIgPSBOdW1iZXIoKG51bWJlciAvIE1hdGgucG93KDEwMDAsIGV4cG9uZW50KSkudG9QcmVjaXNpb24oMykpO1xuICAgIGNvbnN0IG51bWJlclN0cmluZyA9IHRvTG9jYWxlU3RyaW5nKG51bWJlciwgb3B0aW9ucy5sb2NhbGUpO1xuICAgIGNvbnN0IHVuaXQgPSBVTklUU1tleHBvbmVudF07XG4gICAgcmV0dXJuIHByZWZpeCArIG51bWJlclN0cmluZyArICcgJyArIHVuaXQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZXR0eS1ieXRlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/pretty-bytes.js\n");
|
295
|
-
|
296
|
-
/***/ }),
|
297
|
-
|
298
|
-
/***/ "./node_modules/next/dist/server/get-page-files.js":
|
299
|
-
/*!*********************************************************!*\
|
300
|
-
!*** ./node_modules/next/dist/server/get-page-files.js ***!
|
301
|
-
\*********************************************************/
|
302
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
303
|
-
|
304
|
-
"use strict";
|
305
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getPageFiles\", ({\n enumerable: true,\n get: function() {\n return getPageFiles;\n }\n}));\nconst _denormalizepagepath = __webpack_require__(/*! ../shared/lib/page-path/denormalize-page-path */ \"./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizepagepath = __webpack_require__(/*! ../shared/lib/page-path/normalize-page-path */ \"./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js\");\nfunction getPageFiles(buildManifest, page) {\n const normalizedPage = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(page));\n let files = buildManifest.pages[normalizedPage];\n if (!files) {\n console.warn(`Could not find files for ${normalizedPage} in .next/build-manifest.json`);\n return [];\n }\n return files;\n}\n\n//# sourceMappingURL=get-page-files.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9nZXQtcGFnZS1maWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGdEQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLDZCQUE2QixtQkFBTyxDQUFDLDZIQUErQztBQUNwRiwyQkFBMkIsbUJBQU8sQ0FBQyx5SEFBNkM7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsZ0JBQWdCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxEZXNrdG9wXFxXb3JrU3BhY2VcXHRlc3R3aWRnZXRcXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcc2VydmVyXFxnZXQtcGFnZS1maWxlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFBhZ2VGaWxlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFnZUZpbGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX2Rlbm9ybWFsaXplcGFnZXBhdGggPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9wYWdlLXBhdGgvZGVub3JtYWxpemUtcGFnZS1wYXRoXCIpO1xuY29uc3QgX25vcm1hbGl6ZXBhZ2VwYXRoID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYWdlLXBhdGhcIik7XG5mdW5jdGlvbiBnZXRQYWdlRmlsZXMoYnVpbGRNYW5pZmVzdCwgcGFnZSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYWdlID0gKDAsIF9kZW5vcm1hbGl6ZXBhZ2VwYXRoLmRlbm9ybWFsaXplUGFnZVBhdGgpKCgwLCBfbm9ybWFsaXplcGFnZXBhdGgubm9ybWFsaXplUGFnZVBhdGgpKHBhZ2UpKTtcbiAgICBsZXQgZmlsZXMgPSBidWlsZE1hbmlmZXN0LnBhZ2VzW25vcm1hbGl6ZWRQYWdlXTtcbiAgICBpZiAoIWZpbGVzKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IGZpbmQgZmlsZXMgZm9yICR7bm9ybWFsaXplZFBhZ2V9IGluIC5uZXh0L2J1aWxkLW1hbmlmZXN0Lmpzb25gKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1wYWdlLWZpbGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/get-page-files.js\n");
|
306
|
-
|
307
|
-
/***/ }),
|
308
|
-
|
309
|
-
/***/ "./node_modules/next/dist/server/htmlescape.js":
|
310
|
-
/*!*****************************************************!*\
|
311
|
-
!*** ./node_modules/next/dist/server/htmlescape.js ***!
|
312
|
-
\*****************************************************/
|
313
|
-
/***/ ((__unused_webpack_module, exports) => {
|
314
|
-
|
315
|
-
"use strict";
|
316
|
-
eval("// This utility is based on https://github.com/zertosh/htmlescape\n// License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ESCAPE_REGEX: function() {\n return ESCAPE_REGEX;\n },\n htmlEscapeJsonString: function() {\n return htmlEscapeJsonString;\n }\n});\nconst ESCAPE_LOOKUP = {\n '&': '\\\\u0026',\n '>': '\\\\u003e',\n '<': '\\\\u003c',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029'\n};\nconst ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\nfunction htmlEscapeJsonString(str) {\n return str.replace(ESCAPE_REGEX, (match)=>ESCAPE_LOOKUP[match]);\n}\n\n//# sourceMappingURL=htmlescape.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9odG1sZXNjYXBlLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxEZXNrdG9wXFxXb3JrU3BhY2VcXHRlc3R3aWRnZXRcXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcc2VydmVyXFxodG1sZXNjYXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgdXRpbGl0eSBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vemVydG9zaC9odG1sZXNjYXBlXG4vLyBMaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vemVydG9zaC9odG1sZXNjYXBlL2Jsb2IvMDUyN2NhNzE1NmE1MjRkMjU2MTAxYmIzMTBhOWY5NzBmNjMwNzhhZC9MSUNFTlNFXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEVTQ0FQRV9SRUdFWDogbnVsbCxcbiAgICBodG1sRXNjYXBlSnNvblN0cmluZzogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBFU0NBUEVfUkVHRVg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRVNDQVBFX1JFR0VYO1xuICAgIH0sXG4gICAgaHRtbEVzY2FwZUpzb25TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaHRtbEVzY2FwZUpzb25TdHJpbmc7XG4gICAgfVxufSk7XG5jb25zdCBFU0NBUEVfTE9PS1VQID0ge1xuICAgICcmJzogJ1xcXFx1MDAyNicsXG4gICAgJz4nOiAnXFxcXHUwMDNlJyxcbiAgICAnPCc6ICdcXFxcdTAwM2MnLFxuICAgICdcXHUyMDI4JzogJ1xcXFx1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAnXFxcXHUyMDI5J1xufTtcbmNvbnN0IEVTQ0FQRV9SRUdFWCA9IC9bJj48XFx1MjAyOFxcdTIwMjldL2c7XG5mdW5jdGlvbiBodG1sRXNjYXBlSnNvblN0cmluZyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCAobWF0Y2gpPT5FU0NBUEVfTE9PS1VQW21hdGNoXSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0bWxlc2NhcGUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/htmlescape.js\n");
|
317
|
-
|
318
|
-
/***/ }),
|
319
|
-
|
320
|
-
/***/ "./node_modules/next/dist/server/lib/interception-routes.js":
|
321
|
-
/*!******************************************************************!*\
|
322
|
-
!*** ./node_modules/next/dist/server/lib/interception-routes.js ***!
|
323
|
-
\******************************************************************/
|
324
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
325
|
-
|
326
|
-
"use strict";
|
327
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n }\n});\nconst _apppaths = __webpack_require__(/*! ../../shared/lib/router/utils/app-paths */ \"./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)'\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split('/')){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`);\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`;\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute;\n }\n break;\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`);\n }\n interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/');\n break;\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute;\n break;\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split('/');\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`);\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/');\n break;\n default:\n throw new Error('Invariant: unexpected marker');\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n}\n\n//# sourceMappingURL=interception-routes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvaW50ZXJjZXB0aW9uLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FJTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELGtCQUFrQixtQkFBTyxDQUFDLDhHQUF5QztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELEtBQUs7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsaUJBQWlCO0FBQ3hELGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsS0FBSztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELEtBQUs7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcRGVza3RvcFxcV29ya1NwYWNlXFx0ZXN0d2lkZ2V0XFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXHNlcnZlclxcbGliXFxpbnRlcmNlcHRpb24tcm91dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlM6IG51bGwsXG4gICAgZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb246IG51bGwsXG4gICAgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlM7XG4gICAgfSxcbiAgICBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjtcbiAgICB9LFxuICAgIGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoO1xuICAgIH1cbn0pO1xuY29uc3QgX2FwcHBhdGhzID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRoc1wiKTtcbmNvbnN0IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTID0gW1xuICAgICcoLi4pKC4uKScsXG4gICAgJyguKScsXG4gICAgJyguLiknLFxuICAgICcoLi4uKSdcbl07XG5mdW5jdGlvbiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChwYXRoKSB7XG4gICAgLy8gVE9ETy1BUFA6IGFkZCBtb3JlIHNlcmlvdXMgdmFsaWRhdGlvblxuICAgIHJldHVybiBwYXRoLnNwbGl0KCcvJykuZmluZCgoc2VnbWVudCk9PklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pPT5zZWdtZW50LnN0YXJ0c1dpdGgobSkpKSAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24ocGF0aCkge1xuICAgIGxldCBpbnRlcmNlcHRpbmdSb3V0ZSwgbWFya2VyLCBpbnRlcmNlcHRlZFJvdXRlO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXRoLnNwbGl0KCcvJykpe1xuICAgICAgICBtYXJrZXIgPSBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5maW5kKChtKT0+c2VnbWVudC5zdGFydHNXaXRoKG0pKTtcbiAgICAgICAgaWYgKG1hcmtlcikge1xuICAgICAgICAgICAgW2ludGVyY2VwdGluZ1JvdXRlLCBpbnRlcmNlcHRlZFJvdXRlXSA9IHBhdGguc3BsaXQobWFya2VyLCAyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaW50ZXJjZXB0aW5nUm91dGUgfHwgIW1hcmtlciB8fCAhaW50ZXJjZXB0ZWRSb3V0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBNdXN0IGJlIGluIHRoZSBmb3JtYXQgLzxpbnRlcmNlcHRpbmcgcm91dGU+LyguLnwuLi58Li4pKC4uKS88aW50ZXJjZXB0ZWQgcm91dGU+YCk7XG4gICAgfVxuICAgIGludGVyY2VwdGluZ1JvdXRlID0gKDAsIF9hcHBwYXRocy5ub3JtYWxpemVBcHBQYXRoKShpbnRlcmNlcHRpbmdSb3V0ZSkgLy8gbm9ybWFsaXplIHRoZSBwYXRoLCBlLmcuIC8oYmxvZykvZmVlZCAtPiAvZmVlZFxuICAgIDtcbiAgICBzd2l0Y2gobWFya2VyKXtcbiAgICAgICAgY2FzZSAnKC4pJzpcbiAgICAgICAgICAgIC8vICguKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBzaWJsaW5nIHJvdXRlcywgc28gd2UganVzdCBuZWVkIHRvIGFwcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUgdG8gdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gYC8ke2ludGVyY2VwdGVkUm91dGV9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlICsgJy8nICsgaW50ZXJjZXB0ZWRSb3V0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcoLi4pJzpcbiAgICAgICAgICAgIC8vICguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IG9uZSBsZXZlbCB1cCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7cGF0aH0uIENhbm5vdCB1c2UgKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwsIHVzZSAoLikgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBpbnRlcmNlcHRpbmdSb3V0ZS5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5jb25jYXQoaW50ZXJjZXB0ZWRSb3V0ZSkuam9pbignLycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJyguLi4pJzpcbiAgICAgICAgICAgIC8vICguLi4pIHdpbGwgbWF0Y2ggdGhlIHJvdXRlIHNlZ21lbnQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LCBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJlcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGVcbiAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSAnLycgKyBpbnRlcmNlcHRlZFJvdXRlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJyguLikoLi4pJzpcbiAgICAgICAgICAgIC8vICguLikoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCB0d28gbGV2ZWxzIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgY29uc3Qgc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBpZiAoc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZS5sZW5ndGggPD0gMikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7cGF0aH0uIENhbm5vdCB1c2UgKC4uKSguLikgbWFya2VyIGF0IHRoZSByb290IGxldmVsIG9yIG9uZSBsZXZlbCB1cC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBzcGxpdEludGVyY2VwdGluZ1JvdXRlLnNsaWNlKDAsIC0yKS5jb25jYXQoaW50ZXJjZXB0ZWRSb3V0ZSkuam9pbignLycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFyaWFudDogdW5leHBlY3RlZCBtYXJrZXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZXJjZXB0aW5nUm91dGUsXG4gICAgICAgIGludGVyY2VwdGVkUm91dGVcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmNlcHRpb24tcm91dGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/lib/interception-routes.js\n");
|
328
|
-
|
329
|
-
/***/ }),
|
330
|
-
|
331
|
-
/***/ "./node_modules/next/dist/server/lib/trace/constants.js":
|
332
|
-
/*!**************************************************************!*\
|
333
|
-
!*** ./node_modules/next/dist/server/lib/trace/constants.js ***!
|
334
|
-
\**************************************************************/
|
335
|
-
/***/ ((__unused_webpack_module, exports) => {
|
336
|
-
|
337
|
-
"use strict";
|
338
|
-
eval("/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/ // eslint typescript has a bug with TS enums\n/* eslint-disable no-shadow */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n AppRenderSpan: function() {\n return AppRenderSpan;\n },\n AppRouteRouteHandlersSpan: function() {\n return AppRouteRouteHandlersSpan;\n },\n BaseServerSpan: function() {\n return BaseServerSpan;\n },\n LoadComponentsSpan: function() {\n return LoadComponentsSpan;\n },\n LogSpanAllowList: function() {\n return LogSpanAllowList;\n },\n MiddlewareSpan: function() {\n return MiddlewareSpan;\n },\n NextNodeServerSpan: function() {\n return NextNodeServerSpan;\n },\n NextServerSpan: function() {\n return NextServerSpan;\n },\n NextVanillaSpanAllowlist: function() {\n return NextVanillaSpanAllowlist;\n },\n NodeSpan: function() {\n return NodeSpan;\n },\n RenderSpan: function() {\n return RenderSpan;\n },\n ResolveMetadataSpan: function() {\n return ResolveMetadataSpan;\n },\n RouterSpan: function() {\n return RouterSpan;\n },\n StartServerSpan: function() {\n return StartServerSpan;\n }\n});\nvar BaseServerSpan;\n(function(BaseServerSpan) {\n BaseServerSpan[\"handleRequest\"] = \"BaseServer.handleRequest\";\n BaseServerSpan[\"run\"] = \"BaseServer.run\";\n BaseServerSpan[\"pipe\"] = \"BaseServer.pipe\";\n BaseServerSpan[\"getStaticHTML\"] = \"BaseServer.getStaticHTML\";\n BaseServerSpan[\"render\"] = \"BaseServer.render\";\n BaseServerSpan[\"renderToResponseWithComponents\"] = \"BaseServer.renderToResponseWithComponents\";\n BaseServerSpan[\"renderToResponse\"] = \"BaseServer.renderToResponse\";\n BaseServerSpan[\"renderToHTML\"] = \"BaseServer.renderToHTML\";\n BaseServerSpan[\"renderError\"] = \"BaseServer.renderError\";\n BaseServerSpan[\"renderErrorToResponse\"] = \"BaseServer.renderErrorToResponse\";\n BaseServerSpan[\"renderErrorToHTML\"] = \"BaseServer.renderErrorToHTML\";\n BaseServerSpan[\"render404\"] = \"BaseServer.render404\";\n})(BaseServerSpan || (BaseServerSpan = {}));\nvar LoadComponentsSpan;\n(function(LoadComponentsSpan) {\n LoadComponentsSpan[\"loadDefaultErrorComponents\"] = \"LoadComponents.loadDefaultErrorComponents\";\n LoadComponentsSpan[\"loadComponents\"] = \"LoadComponents.loadComponents\";\n})(LoadComponentsSpan || (LoadComponentsSpan = {}));\nvar NextServerSpan;\n(function(NextServerSpan) {\n NextServerSpan[\"getRequestHandler\"] = \"NextServer.getRequestHandler\";\n NextServerSpan[\"getServer\"] = \"NextServer.getServer\";\n NextServerSpan[\"getServerRequestHandler\"] = \"NextServer.getServerRequestHandler\";\n NextServerSpan[\"createServer\"] = \"createServer.createServer\";\n})(NextServerSpan || (NextServerSpan = {}));\nvar NextNodeServerSpan;\n(function(NextNodeServerSpan) {\n NextNodeServerSpan[\"compression\"] = \"NextNodeServer.compression\";\n NextNodeServerSpan[\"getBuildId\"] = \"NextNodeServer.getBuildId\";\n NextNodeServerSpan[\"createComponentTree\"] = \"NextNodeServer.createComponentTree\";\n NextNodeServerSpan[\"clientComponentLoading\"] = \"NextNodeServer.clientComponentLoading\";\n NextNodeServerSpan[\"getLayoutOrPageModule\"] = \"NextNodeServer.getLayoutOrPageModule\";\n NextNodeServerSpan[\"generateStaticRoutes\"] = \"NextNodeServer.generateStaticRoutes\";\n NextNodeServerSpan[\"generateFsStaticRoutes\"] = \"NextNodeServer.generateFsStaticRoutes\";\n NextNodeServerSpan[\"generatePublicRoutes\"] = \"NextNodeServer.generatePublicRoutes\";\n NextNodeServerSpan[\"generateImageRoutes\"] = \"NextNodeServer.generateImageRoutes.route\";\n NextNodeServerSpan[\"sendRenderResult\"] = \"NextNodeServer.sendRenderResult\";\n NextNodeServerSpan[\"proxyRequest\"] = \"NextNodeServer.proxyRequest\";\n NextNodeServerSpan[\"runApi\"] = \"NextNodeServer.runApi\";\n NextNodeServerSpan[\"render\"] = \"NextNodeServer.render\";\n NextNodeServerSpan[\"renderHTML\"] = \"NextNodeServer.renderHTML\";\n NextNodeServerSpan[\"imageOptimizer\"] = \"NextNodeServer.imageOptimizer\";\n NextNodeServerSpan[\"getPagePath\"] = \"NextNodeServer.getPagePath\";\n NextNodeServerSpan[\"getRoutesManifest\"] = \"NextNodeServer.getRoutesManifest\";\n NextNodeServerSpan[\"findPageComponents\"] = \"NextNodeServer.findPageComponents\";\n NextNodeServerSpan[\"getFontManifest\"] = \"NextNodeServer.getFontManifest\";\n NextNodeServerSpan[\"getServerComponentManifest\"] = \"NextNodeServer.getServerComponentManifest\";\n NextNodeServerSpan[\"getRequestHandler\"] = \"NextNodeServer.getRequestHandler\";\n NextNodeServerSpan[\"renderToHTML\"] = \"NextNodeServer.renderToHTML\";\n NextNodeServerSpan[\"renderError\"] = \"NextNodeServer.renderError\";\n NextNodeServerSpan[\"renderErrorToHTML\"] = \"NextNodeServer.renderErrorToHTML\";\n NextNodeServerSpan[\"render404\"] = \"NextNodeServer.render404\";\n NextNodeServerSpan[\"startResponse\"] = \"NextNodeServer.startResponse\";\n // nested inner span, does not require parent scope name\n NextNodeServerSpan[\"route\"] = \"route\";\n NextNodeServerSpan[\"onProxyReq\"] = \"onProxyReq\";\n NextNodeServerSpan[\"apiResolver\"] = \"apiResolver\";\n NextNodeServerSpan[\"internalFetch\"] = \"internalFetch\";\n})(NextNodeServerSpan || (NextNodeServerSpan = {}));\nvar StartServerSpan;\n(function(StartServerSpan) {\n StartServerSpan[\"startServer\"] = \"startServer.startServer\";\n})(StartServerSpan || (StartServerSpan = {}));\nvar RenderSpan;\n(function(RenderSpan) {\n RenderSpan[\"getServerSideProps\"] = \"Render.getServerSideProps\";\n RenderSpan[\"getStaticProps\"] = \"Render.getStaticProps\";\n RenderSpan[\"renderToString\"] = \"Render.renderToString\";\n RenderSpan[\"renderDocument\"] = \"Render.renderDocument\";\n RenderSpan[\"createBodyResult\"] = \"Render.createBodyResult\";\n})(RenderSpan || (RenderSpan = {}));\nvar AppRenderSpan;\n(function(AppRenderSpan) {\n AppRenderSpan[\"renderToString\"] = \"AppRender.renderToString\";\n AppRenderSpan[\"renderToReadableStream\"] = \"AppRender.renderToReadableStream\";\n AppRenderSpan[\"getBodyResult\"] = \"AppRender.getBodyResult\";\n AppRenderSpan[\"fetch\"] = \"AppRender.fetch\";\n})(AppRenderSpan || (AppRenderSpan = {}));\nvar RouterSpan;\n(function(RouterSpan) {\n RouterSpan[\"executeRoute\"] = \"Router.executeRoute\";\n})(RouterSpan || (RouterSpan = {}));\nvar NodeSpan;\n(function(NodeSpan) {\n NodeSpan[\"runHandler\"] = \"Node.runHandler\";\n})(NodeSpan || (NodeSpan = {}));\nvar AppRouteRouteHandlersSpan;\n(function(AppRouteRouteHandlersSpan) {\n AppRouteRouteHandlersSpan[\"runHandler\"] = \"AppRouteRouteHandlers.runHandler\";\n})(AppRouteRouteHandlersSpan || (AppRouteRouteHandlersSpan = {}));\nvar ResolveMetadataSpan;\n(function(ResolveMetadataSpan) {\n ResolveMetadataSpan[\"generateMetadata\"] = \"ResolveMetadata.generateMetadata\";\n ResolveMetadataSpan[\"generateViewport\"] = \"ResolveMetadata.generateViewport\";\n})(ResolveMetadataSpan || (ResolveMetadataSpan = {}));\nvar MiddlewareSpan;\n(function(MiddlewareSpan) {\n MiddlewareSpan[\"execute\"] = \"Middleware.execute\";\n})(MiddlewareSpan || (MiddlewareSpan = {}));\nconst NextVanillaSpanAllowlist = [\n \"Middleware.execute\",\n \"BaseServer.handleRequest\",\n \"Render.getServerSideProps\",\n \"Render.getStaticProps\",\n \"AppRender.fetch\",\n \"AppRender.getBodyResult\",\n \"Render.renderDocument\",\n \"Node.runHandler\",\n \"AppRouteRouteHandlers.runHandler\",\n \"ResolveMetadata.generateMetadata\",\n \"ResolveMetadata.generateViewport\",\n \"NextNodeServer.createComponentTree\",\n \"NextNodeServer.findPageComponents\",\n \"NextNodeServer.getLayoutOrPageModule\",\n \"NextNodeServer.startResponse\",\n \"NextNodeServer.clientComponentLoading\"\n];\nconst LogSpanAllowList = [\n \"NextNodeServer.findPageComponents\",\n \"NextNodeServer.createComponentTree\",\n \"NextNodeServer.clientComponentLoading\"\n];\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvdHJhY2UvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUE0QztBQUM1Qyw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBZUw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0NBQXdDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxnREFBZ0Q7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3Q0FBd0M7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxnREFBZ0Q7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQywwQ0FBMEM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFnQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHNDQUFzQztBQUN2QztBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFnQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxDQUFDLDRCQUE0QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxDQUFDLDhEQUE4RDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsa0RBQWtEO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0NBQXdDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXERlc2t0b3BcXFdvcmtTcGFjZVxcdGVzdHdpZGdldFxcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxzZXJ2ZXJcXGxpYlxcdHJhY2VcXGNvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRhaW5zIHByZWRlZmluZWQgY29uc3RhbnRzIGZvciB0aGUgdHJhY2Ugc3BhbiBuYW1lIGluIG5leHQvc2VydmVyLlxuICpcbiAqIEN1cnJlbnRseSwgbmV4dC9zZXJ2ZXIvdHJhY2VyIGlzIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9ubHkgZm9yIHRyYWNraW5nXG4gKiBuZXh0LmpzJ3MgaW1wbGVtZW50YXRpb24gb25seSB3aXRoIGtub3duIHNwYW4gbmFtZXMgZGVmaW5lZCBoZXJlLlxuICoqLyAvLyBlc2xpbnQgdHlwZXNjcmlwdCBoYXMgYSBidWcgd2l0aCBUUyBlbnVtc1xuLyogZXNsaW50LWRpc2FibGUgbm8tc2hhZG93ICovIFwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXBwUmVuZGVyU3BhbjogbnVsbCxcbiAgICBBcHBSb3V0ZVJvdXRlSGFuZGxlcnNTcGFuOiBudWxsLFxuICAgIEJhc2VTZXJ2ZXJTcGFuOiBudWxsLFxuICAgIExvYWRDb21wb25lbnRzU3BhbjogbnVsbCxcbiAgICBMb2dTcGFuQWxsb3dMaXN0OiBudWxsLFxuICAgIE1pZGRsZXdhcmVTcGFuOiBudWxsLFxuICAgIE5leHROb2RlU2VydmVyU3BhbjogbnVsbCxcbiAgICBOZXh0U2VydmVyU3BhbjogbnVsbCxcbiAgICBOZXh0VmFuaWxsYVNwYW5BbGxvd2xpc3Q6IG51bGwsXG4gICAgTm9kZVNwYW46IG51bGwsXG4gICAgUmVuZGVyU3BhbjogbnVsbCxcbiAgICBSZXNvbHZlTWV0YWRhdGFTcGFuOiBudWxsLFxuICAgIFJvdXRlclNwYW46IG51bGwsXG4gICAgU3RhcnRTZXJ2ZXJTcGFuOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEFwcFJlbmRlclNwYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQXBwUmVuZGVyU3BhbjtcbiAgICB9LFxuICAgIEFwcFJvdXRlUm91dGVIYW5kbGVyc1NwYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3BhbjtcbiAgICB9LFxuICAgIEJhc2VTZXJ2ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJhc2VTZXJ2ZXJTcGFuO1xuICAgIH0sXG4gICAgTG9hZENvbXBvbmVudHNTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIExvYWRDb21wb25lbnRzU3BhbjtcbiAgICB9LFxuICAgIExvZ1NwYW5BbGxvd0xpc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTG9nU3BhbkFsbG93TGlzdDtcbiAgICB9LFxuICAgIE1pZGRsZXdhcmVTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1pZGRsZXdhcmVTcGFuO1xuICAgIH0sXG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5leHROb2RlU2VydmVyU3BhbjtcbiAgICB9LFxuICAgIE5leHRTZXJ2ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5leHRTZXJ2ZXJTcGFuO1xuICAgIH0sXG4gICAgTmV4dFZhbmlsbGFTcGFuQWxsb3dsaXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5leHRWYW5pbGxhU3BhbkFsbG93bGlzdDtcbiAgICB9LFxuICAgIE5vZGVTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVTcGFuO1xuICAgIH0sXG4gICAgUmVuZGVyU3BhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSZW5kZXJTcGFuO1xuICAgIH0sXG4gICAgUmVzb2x2ZU1ldGFkYXRhU3BhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSZXNvbHZlTWV0YWRhdGFTcGFuO1xuICAgIH0sXG4gICAgUm91dGVyU3BhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb3V0ZXJTcGFuO1xuICAgIH0sXG4gICAgU3RhcnRTZXJ2ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFN0YXJ0U2VydmVyU3BhbjtcbiAgICB9XG59KTtcbnZhciBCYXNlU2VydmVyU3BhbjtcbihmdW5jdGlvbihCYXNlU2VydmVyU3Bhbikge1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wiaGFuZGxlUmVxdWVzdFwiXSA9IFwiQmFzZVNlcnZlci5oYW5kbGVSZXF1ZXN0XCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJydW5cIl0gPSBcIkJhc2VTZXJ2ZXIucnVuXCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJwaXBlXCJdID0gXCJCYXNlU2VydmVyLnBpcGVcIjtcbiAgICBCYXNlU2VydmVyU3BhbltcImdldFN0YXRpY0hUTUxcIl0gPSBcIkJhc2VTZXJ2ZXIuZ2V0U3RhdGljSFRNTFwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyXCJdID0gXCJCYXNlU2VydmVyLnJlbmRlclwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyVG9SZXNwb25zZVdpdGhDb21wb25lbnRzXCJdID0gXCJCYXNlU2VydmVyLnJlbmRlclRvUmVzcG9uc2VXaXRoQ29tcG9uZW50c1wiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyVG9SZXNwb25zZVwiXSA9IFwiQmFzZVNlcnZlci5yZW5kZXJUb1Jlc3BvbnNlXCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJyZW5kZXJUb0hUTUxcIl0gPSBcIkJhc2VTZXJ2ZXIucmVuZGVyVG9IVE1MXCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJyZW5kZXJFcnJvclwiXSA9IFwiQmFzZVNlcnZlci5yZW5kZXJFcnJvclwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyRXJyb3JUb1Jlc3BvbnNlXCJdID0gXCJCYXNlU2VydmVyLnJlbmRlckVycm9yVG9SZXNwb25zZVwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyRXJyb3JUb0hUTUxcIl0gPSBcIkJhc2VTZXJ2ZXIucmVuZGVyRXJyb3JUb0hUTUxcIjtcbiAgICBCYXNlU2VydmVyU3BhbltcInJlbmRlcjQwNFwiXSA9IFwiQmFzZVNlcnZlci5yZW5kZXI0MDRcIjtcbn0pKEJhc2VTZXJ2ZXJTcGFuIHx8IChCYXNlU2VydmVyU3BhbiA9IHt9KSk7XG52YXIgTG9hZENvbXBvbmVudHNTcGFuO1xuKGZ1bmN0aW9uKExvYWRDb21wb25lbnRzU3Bhbikge1xuICAgIExvYWRDb21wb25lbnRzU3BhbltcImxvYWREZWZhdWx0RXJyb3JDb21wb25lbnRzXCJdID0gXCJMb2FkQ29tcG9uZW50cy5sb2FkRGVmYXVsdEVycm9yQ29tcG9uZW50c1wiO1xuICAgIExvYWRDb21wb25lbnRzU3BhbltcImxvYWRDb21wb25lbnRzXCJdID0gXCJMb2FkQ29tcG9uZW50cy5sb2FkQ29tcG9uZW50c1wiO1xufSkoTG9hZENvbXBvbmVudHNTcGFuIHx8IChMb2FkQ29tcG9uZW50c1NwYW4gPSB7fSkpO1xudmFyIE5leHRTZXJ2ZXJTcGFuO1xuKGZ1bmN0aW9uKE5leHRTZXJ2ZXJTcGFuKSB7XG4gICAgTmV4dFNlcnZlclNwYW5bXCJnZXRSZXF1ZXN0SGFuZGxlclwiXSA9IFwiTmV4dFNlcnZlci5nZXRSZXF1ZXN0SGFuZGxlclwiO1xuICAgIE5leHRTZXJ2ZXJTcGFuW1wiZ2V0U2VydmVyXCJdID0gXCJOZXh0U2VydmVyLmdldFNlcnZlclwiO1xuICAgIE5leHRTZXJ2ZXJTcGFuW1wiZ2V0U2VydmVyUmVxdWVzdEhhbmRsZXJcIl0gPSBcIk5leHRTZXJ2ZXIuZ2V0U2VydmVyUmVxdWVzdEhhbmRsZXJcIjtcbiAgICBOZXh0U2VydmVyU3BhbltcImNyZWF0ZVNlcnZlclwiXSA9IFwiY3JlYXRlU2VydmVyLmNyZWF0ZVNlcnZlclwiO1xufSkoTmV4dFNlcnZlclNwYW4gfHwgKE5leHRTZXJ2ZXJTcGFuID0ge30pKTtcbnZhciBOZXh0Tm9kZVNlcnZlclNwYW47XG4oZnVuY3Rpb24oTmV4dE5vZGVTZXJ2ZXJTcGFuKSB7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiY29tcHJlc3Npb25cIl0gPSBcIk5leHROb2RlU2VydmVyLmNvbXByZXNzaW9uXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2V0QnVpbGRJZFwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2V0QnVpbGRJZFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImNyZWF0ZUNvbXBvbmVudFRyZWVcIl0gPSBcIk5leHROb2RlU2VydmVyLmNyZWF0ZUNvbXBvbmVudFRyZWVcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJjbGllbnRDb21wb25lbnRMb2FkaW5nXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5jbGllbnRDb21wb25lbnRMb2FkaW5nXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2V0TGF5b3V0T3JQYWdlTW9kdWxlXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZXRMYXlvdXRPclBhZ2VNb2R1bGVcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJnZW5lcmF0ZVN0YXRpY1JvdXRlc1wiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2VuZXJhdGVTdGF0aWNSb3V0ZXNcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJnZW5lcmF0ZUZzU3RhdGljUm91dGVzXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZW5lcmF0ZUZzU3RhdGljUm91dGVzXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2VuZXJhdGVQdWJsaWNSb3V0ZXNcIl0gPSBcIk5leHROb2RlU2VydmVyLmdlbmVyYXRlUHVibGljUm91dGVzXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2VuZXJhdGVJbWFnZVJvdXRlc1wiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2VuZXJhdGVJbWFnZVJvdXRlcy5yb3V0ZVwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcInNlbmRSZW5kZXJSZXN1bHRcIl0gPSBcIk5leHROb2RlU2VydmVyLnNlbmRSZW5kZXJSZXN1bHRcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJwcm94eVJlcXVlc3RcIl0gPSBcIk5leHROb2RlU2VydmVyLnByb3h5UmVxdWVzdFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcInJ1bkFwaVwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIucnVuQXBpXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wicmVuZGVyXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5yZW5kZXJcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJyZW5kZXJIVE1MXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5yZW5kZXJIVE1MXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiaW1hZ2VPcHRpbWl6ZXJcIl0gPSBcIk5leHROb2RlU2VydmVyLmltYWdlT3B0aW1pemVyXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2V0UGFnZVBhdGhcIl0gPSBcIk5leHROb2RlU2VydmVyLmdldFBhZ2VQYXRoXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2V0Um91dGVzTWFuaWZlc3RcIl0gPSBcIk5leHROb2RlU2VydmVyLmdldFJvdXRlc01hbmlmZXN0XCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZmluZFBhZ2VDb21wb25lbnRzXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5maW5kUGFnZUNvbXBvbmVudHNcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJnZXRGb250TWFuaWZlc3RcIl0gPSBcIk5leHROb2RlU2VydmVyLmdldEZvbnRNYW5pZmVzdFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImdldFNlcnZlckNvbXBvbmVudE1hbmlmZXN0XCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZXRTZXJ2ZXJDb21wb25lbnRNYW5pZmVzdFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImdldFJlcXVlc3RIYW5kbGVyXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZXRSZXF1ZXN0SGFuZGxlclwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcInJlbmRlclRvSFRNTFwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIucmVuZGVyVG9IVE1MXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wicmVuZGVyRXJyb3JcIl0gPSBcIk5leHROb2RlU2VydmVyLnJlbmRlckVycm9yXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wicmVuZGVyRXJyb3JUb0hUTUxcIl0gPSBcIk5leHROb2RlU2VydmVyLnJlbmRlckVycm9yVG9IVE1MXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wicmVuZGVyNDA0XCJdID0gXCJOZXh0Tm9kZVNlcnZlci5yZW5kZXI0MDRcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJzdGFydFJlc3BvbnNlXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5zdGFydFJlc3BvbnNlXCI7XG4gICAgLy8gbmVzdGVkIGlubmVyIHNwYW4sIGRvZXMgbm90IHJlcXVpcmUgcGFyZW50IHNjb3BlIG5hbWVcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJyb3V0ZVwiXSA9IFwicm91dGVcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJvblByb3h5UmVxXCJdID0gXCJvblByb3h5UmVxXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiYXBpUmVzb2x2ZXJcIl0gPSBcImFwaVJlc29sdmVyXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiaW50ZXJuYWxGZXRjaFwiXSA9IFwiaW50ZXJuYWxGZXRjaFwiO1xufSkoTmV4dE5vZGVTZXJ2ZXJTcGFuIHx8IChOZXh0Tm9kZVNlcnZlclNwYW4gPSB7fSkpO1xudmFyIFN0YXJ0U2VydmVyU3BhbjtcbihmdW5jdGlvbihTdGFydFNlcnZlclNwYW4pIHtcbiAgICBTdGFydFNlcnZlclNwYW5bXCJzdGFydFNlcnZlclwiXSA9IFwic3RhcnRTZXJ2ZXIuc3RhcnRTZXJ2ZXJcIjtcbn0pKFN0YXJ0U2VydmVyU3BhbiB8fCAoU3RhcnRTZXJ2ZXJTcGFuID0ge30pKTtcbnZhciBSZW5kZXJTcGFuO1xuKGZ1bmN0aW9uKFJlbmRlclNwYW4pIHtcbiAgICBSZW5kZXJTcGFuW1wiZ2V0U2VydmVyU2lkZVByb3BzXCJdID0gXCJSZW5kZXIuZ2V0U2VydmVyU2lkZVByb3BzXCI7XG4gICAgUmVuZGVyU3BhbltcImdldFN0YXRpY1Byb3BzXCJdID0gXCJSZW5kZXIuZ2V0U3RhdGljUHJvcHNcIjtcbiAgICBSZW5kZXJTcGFuW1wicmVuZGVyVG9TdHJpbmdcIl0gPSBcIlJlbmRlci5yZW5kZXJUb1N0cmluZ1wiO1xuICAgIFJlbmRlclNwYW5bXCJyZW5kZXJEb2N1bWVudFwiXSA9IFwiUmVuZGVyLnJlbmRlckRvY3VtZW50XCI7XG4gICAgUmVuZGVyU3BhbltcImNyZWF0ZUJvZHlSZXN1bHRcIl0gPSBcIlJlbmRlci5jcmVhdGVCb2R5UmVzdWx0XCI7XG59KShSZW5kZXJTcGFuIHx8IChSZW5kZXJTcGFuID0ge30pKTtcbnZhciBBcHBSZW5kZXJTcGFuO1xuKGZ1bmN0aW9uKEFwcFJlbmRlclNwYW4pIHtcbiAgICBBcHBSZW5kZXJTcGFuW1wicmVuZGVyVG9TdHJpbmdcIl0gPSBcIkFwcFJlbmRlci5yZW5kZXJUb1N0cmluZ1wiO1xuICAgIEFwcFJlbmRlclNwYW5bXCJyZW5kZXJUb1JlYWRhYmxlU3RyZWFtXCJdID0gXCJBcHBSZW5kZXIucmVuZGVyVG9SZWFkYWJsZVN0cmVhbVwiO1xuICAgIEFwcFJlbmRlclNwYW5bXCJnZXRCb2R5UmVzdWx0XCJdID0gXCJBcHBSZW5kZXIuZ2V0Qm9keVJlc3VsdFwiO1xuICAgIEFwcFJlbmRlclNwYW5bXCJmZXRjaFwiXSA9IFwiQXBwUmVuZGVyLmZldGNoXCI7XG59KShBcHBSZW5kZXJTcGFuIHx8IChBcHBSZW5kZXJTcGFuID0ge30pKTtcbnZhciBSb3V0ZXJTcGFuO1xuKGZ1bmN0aW9uKFJvdXRlclNwYW4pIHtcbiAgICBSb3V0ZXJTcGFuW1wiZXhlY3V0ZVJvdXRlXCJdID0gXCJSb3V0ZXIuZXhlY3V0ZVJvdXRlXCI7XG59KShSb3V0ZXJTcGFuIHx8IChSb3V0ZXJTcGFuID0ge30pKTtcbnZhciBOb2RlU3BhbjtcbihmdW5jdGlvbihOb2RlU3Bhbikge1xuICAgIE5vZGVTcGFuW1wicnVuSGFuZGxlclwiXSA9IFwiTm9kZS5ydW5IYW5kbGVyXCI7XG59KShOb2RlU3BhbiB8fCAoTm9kZVNwYW4gPSB7fSkpO1xudmFyIEFwcFJvdXRlUm91dGVIYW5kbGVyc1NwYW47XG4oZnVuY3Rpb24oQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3Bhbikge1xuICAgIEFwcFJvdXRlUm91dGVIYW5kbGVyc1NwYW5bXCJydW5IYW5kbGVyXCJdID0gXCJBcHBSb3V0ZVJvdXRlSGFuZGxlcnMucnVuSGFuZGxlclwiO1xufSkoQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3BhbiB8fCAoQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3BhbiA9IHt9KSk7XG52YXIgUmVzb2x2ZU1ldGFkYXRhU3BhbjtcbihmdW5jdGlvbihSZXNvbHZlTWV0YWRhdGFTcGFuKSB7XG4gICAgUmVzb2x2ZU1ldGFkYXRhU3BhbltcImdlbmVyYXRlTWV0YWRhdGFcIl0gPSBcIlJlc29sdmVNZXRhZGF0YS5nZW5lcmF0ZU1ldGFkYXRhXCI7XG4gICAgUmVzb2x2ZU1ldGFkYXRhU3BhbltcImdlbmVyYXRlVmlld3BvcnRcIl0gPSBcIlJlc29sdmVNZXRhZGF0YS5nZW5lcmF0ZVZpZXdwb3J0XCI7XG59KShSZXNvbHZlTWV0YWRhdGFTcGFuIHx8IChSZXNvbHZlTWV0YWRhdGFTcGFuID0ge30pKTtcbnZhciBNaWRkbGV3YXJlU3BhbjtcbihmdW5jdGlvbihNaWRkbGV3YXJlU3Bhbikge1xuICAgIE1pZGRsZXdhcmVTcGFuW1wiZXhlY3V0ZVwiXSA9IFwiTWlkZGxld2FyZS5leGVjdXRlXCI7XG59KShNaWRkbGV3YXJlU3BhbiB8fCAoTWlkZGxld2FyZVNwYW4gPSB7fSkpO1xuY29uc3QgTmV4dFZhbmlsbGFTcGFuQWxsb3dsaXN0ID0gW1xuICAgIFwiTWlkZGxld2FyZS5leGVjdXRlXCIsXG4gICAgXCJCYXNlU2VydmVyLmhhbmRsZVJlcXVlc3RcIixcbiAgICBcIlJlbmRlci5nZXRTZXJ2ZXJTaWRlUHJvcHNcIixcbiAgICBcIlJlbmRlci5nZXRTdGF0aWNQcm9wc1wiLFxuICAgIFwiQXBwUmVuZGVyLmZldGNoXCIsXG4gICAgXCJBcHBSZW5kZXIuZ2V0Qm9keVJlc3VsdFwiLFxuICAgIFwiUmVuZGVyLnJlbmRlckRvY3VtZW50XCIsXG4gICAgXCJOb2RlLnJ1bkhhbmRsZXJcIixcbiAgICBcIkFwcFJvdXRlUm91dGVIYW5kbGVycy5ydW5IYW5kbGVyXCIsXG4gICAgXCJSZXNvbHZlTWV0YWRhdGEuZ2VuZXJhdGVNZXRhZGF0YVwiLFxuICAgIFwiUmVzb2x2ZU1ldGFkYXRhLmdlbmVyYXRlVmlld3BvcnRcIixcbiAgICBcIk5leHROb2RlU2VydmVyLmNyZWF0ZUNvbXBvbmVudFRyZWVcIixcbiAgICBcIk5leHROb2RlU2VydmVyLmZpbmRQYWdlQ29tcG9uZW50c1wiLFxuICAgIFwiTmV4dE5vZGVTZXJ2ZXIuZ2V0TGF5b3V0T3JQYWdlTW9kdWxlXCIsXG4gICAgXCJOZXh0Tm9kZVNlcnZlci5zdGFydFJlc3BvbnNlXCIsXG4gICAgXCJOZXh0Tm9kZVNlcnZlci5jbGllbnRDb21wb25lbnRMb2FkaW5nXCJcbl07XG5jb25zdCBMb2dTcGFuQWxsb3dMaXN0ID0gW1xuICAgIFwiTmV4dE5vZGVTZXJ2ZXIuZmluZFBhZ2VDb21wb25lbnRzXCIsXG4gICAgXCJOZXh0Tm9kZVNlcnZlci5jcmVhdGVDb21wb25lbnRUcmVlXCIsXG4gICAgXCJOZXh0Tm9kZVNlcnZlci5jbGllbnRDb21wb25lbnRMb2FkaW5nXCJcbl07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/lib/trace/constants.js\n");
|
339
|
-
|
340
|
-
/***/ }),
|
341
|
-
|
342
|
-
/***/ "./node_modules/next/dist/server/lib/trace/tracer.js":
|
343
|
-
/*!***********************************************************!*\
|
344
|
-
!*** ./node_modules/next/dist/server/lib/trace/tracer.js ***!
|
345
|
-
\***********************************************************/
|
346
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
347
|
-
|
348
|
-
"use strict";
|
349
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BubbledError: function() {\n return BubbledError;\n },\n SpanKind: function() {\n return SpanKind;\n },\n SpanStatusCode: function() {\n return SpanStatusCode;\n },\n getTracer: function() {\n return getTracer;\n },\n isBubbledError: function() {\n return isBubbledError;\n }\n});\nconst _constants = __webpack_require__(/*! ./constants */ \"./node_modules/next/dist/server/lib/trace/constants.js\");\nconst _isthenable = __webpack_require__(/*! ../../../shared/lib/is-thenable */ \"./node_modules/next/dist/shared/lib/is-thenable.js\");\nlet api;\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (false) {} else {\n try {\n api = __webpack_require__(/*! @opentelemetry/api */ \"./node_modules/next/dist/compiled/@opentelemetry/api/index.js\");\n } catch (err) {\n api = __webpack_require__(/*! next/dist/compiled/@opentelemetry/api */ \"./node_modules/next/dist/compiled/@opentelemetry/api/index.js\");\n }\n}\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api;\nclass BubbledError extends Error {\n constructor(bubble, result){\n super();\n this.bubble = bubble;\n this.result = result;\n }\n}\nfunction isBubbledError(error) {\n if (typeof error !== 'object' || error === null) return false;\n return error instanceof BubbledError;\n}\nconst closeSpanWithError = (span, error)=>{\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true);\n } else {\n if (error) {\n span.recordException(error);\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error == null ? void 0 : error.message\n });\n }\n span.end();\n};\n/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map();\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId');\nlet lastSpanId = 0;\nconst getSpanId = ()=>lastSpanId++;\nconst clientTraceDataSetter = {\n set (carrier, key, value) {\n carrier.push({\n key,\n value\n });\n }\n};\nclass NextTracerImpl {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */ getTracerInstance() {\n return trace.getTracer('next.js', '0.0.1');\n }\n getContext() {\n return context;\n }\n getTracePropagationData() {\n const activeContext = context.active();\n const entries = [];\n propagation.inject(activeContext, entries, clientTraceDataSetter);\n return entries;\n }\n getActiveScopeSpan() {\n return trace.getSpan(context == null ? void 0 : context.active());\n }\n withPropagatedContext(carrier, fn, getter) {\n const activeContext = context.active();\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn();\n }\n const remoteContext = propagation.extract(activeContext, carrier, getter);\n return context.with(remoteContext, fn);\n }\n trace(...args) {\n var _trace_getSpanContext;\n const [type, fnOrOptions, fnOrEmpty] = args;\n // coerce options form overload\n const { fn, options } = typeof fnOrOptions === 'function' ? {\n fn: fnOrOptions,\n options: {}\n } : {\n fn: fnOrEmpty,\n options: {\n ...fnOrOptions\n }\n };\n const spanName = options.spanName ?? type;\n if (!_constants.NextVanillaSpanAllowlist.includes(type) && process.env.NEXT_OTEL_VERBOSE !== '1' || options.hideSpan) {\n return fn();\n }\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan());\n let isRootSpan = false;\n if (!spanContext) {\n spanContext = (context == null ? void 0 : context.active()) ?? ROOT_CONTEXT;\n isRootSpan = true;\n } else if ((_trace_getSpanContext = trace.getSpanContext(spanContext)) == null ? void 0 : _trace_getSpanContext.isRemote) {\n isRootSpan = true;\n }\n const spanId = getSpanId();\n options.attributes = {\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes\n };\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.getTracerInstance().startActiveSpan(spanName, options, (span)=>{\n const startTime = 'performance' in globalThis && 'measure' in performance ? globalThis.performance.now() : undefined;\n const onCleanup = ()=>{\n rootSpanAttributesStore.delete(spanId);\n if (startTime && process.env.NEXT_OTEL_PERFORMANCE_PREFIX && _constants.LogSpanAllowList.includes(type || '')) {\n performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(type.split('.').pop() || '').replace(/[A-Z]/g, (match)=>'-' + match.toLowerCase())}`, {\n start: startTime,\n end: performance.now()\n });\n }\n };\n if (isRootSpan) {\n rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {})));\n }\n try {\n if (fn.length > 1) {\n return fn(span, (err)=>closeSpanWithError(span, err));\n }\n const result = fn(span);\n if ((0, _isthenable.isThenable)(result)) {\n // If there's error make sure it throws\n return result.then((res)=>{\n span.end();\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res;\n }).catch((err)=>{\n closeSpanWithError(span, err);\n throw err;\n }).finally(onCleanup);\n } else {\n span.end();\n onCleanup();\n }\n return result;\n } catch (err) {\n closeSpanWithError(span, err);\n onCleanup();\n throw err;\n }\n }));\n }\n wrap(...args) {\n const tracer = this;\n const [name, options, fn] = args.length === 3 ? args : [\n args[0],\n {},\n args[1]\n ];\n if (!_constants.NextVanillaSpanAllowlist.includes(name) && process.env.NEXT_OTEL_VERBOSE !== '1') {\n return fn;\n }\n return function() {\n let optionsObj = options;\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments);\n }\n const lastArgId = arguments.length - 1;\n const cb = arguments[lastArgId];\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb);\n return tracer.trace(name, optionsObj, (_span, done)=>{\n arguments[lastArgId] = function(err) {\n done == null ? void 0 : done(err);\n return scopeBoundCb.apply(this, arguments);\n };\n return fn.apply(this, arguments);\n });\n } else {\n return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments));\n }\n };\n }\n startSpan(...args) {\n const [type, options] = args;\n const spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan());\n return this.getTracerInstance().startSpan(type, options, spanContext);\n }\n getSpanContext(parentSpan) {\n const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined;\n return spanContext;\n }\n getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey);\n return rootSpanAttributesStore.get(spanId);\n }\n setRootSpanAttribute(key, value) {\n const spanId = context.active().getValue(rootSpanIdKey);\n const attributes = rootSpanAttributesStore.get(spanId);\n if (attributes) {\n attributes.set(key, value);\n }\n }\n}\nconst getTracer = (()=>{\n const tracer = new NextTracerImpl();\n return ()=>tracer;\n})();\n\n//# sourceMappingURL=tracer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvdHJhY2UvdHJhY2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQU1MO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLDJFQUFhO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLDJGQUFpQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFtQyxFQUFFLEVBRXhDLENBQUM7QUFDRjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyx5RkFBb0I7QUFDMUMsTUFBTTtBQUNOLGNBQWMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDN0Q7QUFDQTtBQUNBLFFBQVEsc0VBQXNFO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MseUNBQXlDLFFBQVEsb0ZBQW9GO0FBQ3BMO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsdUdBQXVHO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXERlc2t0b3BcXFdvcmtTcGFjZVxcdGVzdHdpZGdldFxcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxzZXJ2ZXJcXGxpYlxcdHJhY2VcXHRyYWNlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEJ1YmJsZWRFcnJvcjogbnVsbCxcbiAgICBTcGFuS2luZDogbnVsbCxcbiAgICBTcGFuU3RhdHVzQ29kZTogbnVsbCxcbiAgICBnZXRUcmFjZXI6IG51bGwsXG4gICAgaXNCdWJibGVkRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgQnViYmxlZEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJ1YmJsZWRFcnJvcjtcbiAgICB9LFxuICAgIFNwYW5LaW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNwYW5LaW5kO1xuICAgIH0sXG4gICAgU3BhblN0YXR1c0NvZGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU3BhblN0YXR1c0NvZGU7XG4gICAgfSxcbiAgICBnZXRUcmFjZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0VHJhY2VyO1xuICAgIH0sXG4gICAgaXNCdWJibGVkRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNCdWJibGVkRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgX2lzdGhlbmFibGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2hhcmVkL2xpYi9pcy10aGVuYWJsZVwiKTtcbmxldCBhcGk7XG4vLyB3ZSB3YW50IHRvIGFsbG93IHVzZXJzIHRvIHVzZSB0aGVpciBvd24gdmVyc2lvbiBvZiBAb3BlbnRlbGVtZXRyeS9hcGkgaWYgdGhleVxuLy8gd2FudCB0bywgc28gd2UgdHJ5IHRvIHJlcXVpcmUgaXQgZmlyc3QsIGFuZCBpZiBpdCBmYWlscyB3ZSBmYWxsIGJhY2sgdG8gdGhlXG4vLyB2ZXJzaW9uIHRoYXQgaXMgYnVuZGxlZCB3aXRoIE5leHQuanNcbi8vIHRoaXMgaXMgYmVjYXVzZSBAb3BlbnRlbGVtZXRyeS9hcGkgaGFzIHRvIGJlIHN5bmNlZCB3aXRoIHRoZSB2ZXJzaW9uIG9mXG4vLyBAb3BlbnRlbGVtZXRyeS90cmFjaW5nIHRoYXQgaXMgdXNlZCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gZm9yY2UgdXNlcnMgdG8gdXNlXG4vLyB0aGUgdmVyc2lvbiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCBOZXh0LmpzLlxuLy8gdGhlIEFQSSBpcyB+c3RhYmxlLCBzbyB0aGlzIHNob3VsZCBiZSBmaW5lXG5pZiAocHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSAnZWRnZScpIHtcbiAgICBhcGkgPSByZXF1aXJlKCdAb3BlbnRlbGVtZXRyeS9hcGknKTtcbn0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXBpID0gcmVxdWlyZSgnQG9wZW50ZWxlbWV0cnkvYXBpJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGFwaSA9IHJlcXVpcmUoJ25leHQvZGlzdC9jb21waWxlZC9Ab3BlbnRlbGVtZXRyeS9hcGknKTtcbiAgICB9XG59XG5jb25zdCB7IGNvbnRleHQsIHByb3BhZ2F0aW9uLCB0cmFjZSwgU3BhblN0YXR1c0NvZGUsIFNwYW5LaW5kLCBST09UX0NPTlRFWFQgfSA9IGFwaTtcbmNsYXNzIEJ1YmJsZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihidWJibGUsIHJlc3VsdCl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYnViYmxlID0gYnViYmxlO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICB9XG59XG5mdW5jdGlvbiBpc0J1YmJsZWRFcnJvcihlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnIHx8IGVycm9yID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgQnViYmxlZEVycm9yO1xufVxuY29uc3QgY2xvc2VTcGFuV2l0aEVycm9yID0gKHNwYW4sIGVycm9yKT0+e1xuICAgIGlmIChpc0J1YmJsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IuYnViYmxlKSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCduZXh0LmJ1YmJsZScsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNwYW4uZW5kKCk7XG59O1xuLyoqIHdlIHVzZSB0aGlzIG1hcCB0byBwcm9wYWdhdGUgYXR0cmlidXRlcyBmcm9tIG5lc3RlZCBzcGFucyB0byB0aGUgdG9wIHNwYW4gKi8gY29uc3Qgcm9vdFNwYW5BdHRyaWJ1dGVzU3RvcmUgPSBuZXcgTWFwKCk7XG5jb25zdCByb290U3BhbklkS2V5ID0gYXBpLmNyZWF0ZUNvbnRleHRLZXkoJ25leHQucm9vdFNwYW5JZCcpO1xubGV0IGxhc3RTcGFuSWQgPSAwO1xuY29uc3QgZ2V0U3BhbklkID0gKCk9Pmxhc3RTcGFuSWQrKztcbmNvbnN0IGNsaWVudFRyYWNlRGF0YVNldHRlciA9IHtcbiAgICBzZXQgKGNhcnJpZXIsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgY2Fycmllci5wdXNoKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5jbGFzcyBOZXh0VHJhY2VySW1wbCB7XG4gICAgLyoqXG4gICAqIFJldHVybnMgYW4gaW5zdGFuY2UgdG8gdGhlIHRyYWNlIHdpdGggY29uZmlndXJlZCBuYW1lLlxuICAgKiBTaW5jZSB3cmFwIC8gdHJhY2UgY2FuIGJlIGRlZmluZWQgaW4gYW55IHBsYWNlIHByaW9yIHRvIGFjdHVhbCB0cmFjZSBzdWJzY3JpYmVyIGluaXRpYWxpemF0aW9uLFxuICAgKiBUaGlzIHNob3VsZCBiZSBsYXppbHkgZXZhbHVhdGVkLlxuICAgKi8gZ2V0VHJhY2VySW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0cmFjZS5nZXRUcmFjZXIoJ25leHQuanMnLCAnMC4wLjEnKTtcbiAgICB9XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICAgIGdldFRyYWNlUHJvcGFnYXRpb25EYXRhKCkge1xuICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBwcm9wYWdhdGlvbi5pbmplY3QoYWN0aXZlQ29udGV4dCwgZW50cmllcywgY2xpZW50VHJhY2VEYXRhU2V0dGVyKTtcbiAgICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIGdldEFjdGl2ZVNjb3BlU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRyYWNlLmdldFNwYW4oY29udGV4dCA9PSBudWxsID8gdm9pZCAwIDogY29udGV4dC5hY3RpdmUoKSk7XG4gICAgfVxuICAgIHdpdGhQcm9wYWdhdGVkQ29udGV4dChjYXJyaWVyLCBmbiwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICAgICAgICBpZiAodHJhY2UuZ2V0U3BhbkNvbnRleHQoYWN0aXZlQ29udGV4dCkpIHtcbiAgICAgICAgICAgIC8vIEFjdGl2ZSBzcGFuIGlzIGFscmVhZHkgc2V0LCB0b28gbGF0ZSB0byBwcm9wYWdhdGUuXG4gICAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW1vdGVDb250ZXh0ID0gcHJvcGFnYXRpb24uZXh0cmFjdChhY3RpdmVDb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpO1xuICAgICAgICByZXR1cm4gY29udGV4dC53aXRoKHJlbW90ZUNvbnRleHQsIGZuKTtcbiAgICB9XG4gICAgdHJhY2UoLi4uYXJncykge1xuICAgICAgICB2YXIgX3RyYWNlX2dldFNwYW5Db250ZXh0O1xuICAgICAgICBjb25zdCBbdHlwZSwgZm5Pck9wdGlvbnMsIGZuT3JFbXB0eV0gPSBhcmdzO1xuICAgICAgICAvLyBjb2VyY2Ugb3B0aW9ucyBmb3JtIG92ZXJsb2FkXG4gICAgICAgIGNvbnN0IHsgZm4sIG9wdGlvbnMgfSA9IHR5cGVvZiBmbk9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IHtcbiAgICAgICAgICAgIGZuOiBmbk9yT3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHt9XG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBmbjogZm5PckVtcHR5LFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIC4uLmZuT3JPcHRpb25zXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNwYW5OYW1lID0gb3B0aW9ucy5zcGFuTmFtZSA/PyB0eXBlO1xuICAgICAgICBpZiAoIV9jb25zdGFudHMuTmV4dFZhbmlsbGFTcGFuQWxsb3dsaXN0LmluY2x1ZGVzKHR5cGUpICYmIHByb2Nlc3MuZW52Lk5FWFRfT1RFTF9WRVJCT1NFICE9PSAnMScgfHwgb3B0aW9ucy5oaWRlU3Bhbikge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJ5aW5nIHRvIGdldCBhY3RpdmUgc2NvcGVkIHNwYW4gdG8gYXNzaWduIHBhcmVudC4gSWYgb3B0aW9uIHNwZWNpZmllcyBwYXJlbnQgc3BhbiBtYW51YWxseSwgd2lsbCB0cnkgdG8gdXNlIGl0LlxuICAgICAgICBsZXQgc3BhbkNvbnRleHQgPSB0aGlzLmdldFNwYW5Db250ZXh0KChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnBhcmVudFNwYW4pID8/IHRoaXMuZ2V0QWN0aXZlU2NvcGVTcGFuKCkpO1xuICAgICAgICBsZXQgaXNSb290U3BhbiA9IGZhbHNlO1xuICAgICAgICBpZiAoIXNwYW5Db250ZXh0KSB7XG4gICAgICAgICAgICBzcGFuQ29udGV4dCA9IChjb250ZXh0ID09IG51bGwgPyB2b2lkIDAgOiBjb250ZXh0LmFjdGl2ZSgpKSA/PyBST09UX0NPTlRFWFQ7XG4gICAgICAgICAgICBpc1Jvb3RTcGFuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoX3RyYWNlX2dldFNwYW5Db250ZXh0ID0gdHJhY2UuZ2V0U3BhbkNvbnRleHQoc3BhbkNvbnRleHQpKSA9PSBudWxsID8gdm9pZCAwIDogX3RyYWNlX2dldFNwYW5Db250ZXh0LmlzUmVtb3RlKSB7XG4gICAgICAgICAgICBpc1Jvb3RTcGFuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGFuSWQgPSBnZXRTcGFuSWQoKTtcbiAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgJ25leHQuc3Bhbl9uYW1lJzogc3Bhbk5hbWUsXG4gICAgICAgICAgICAnbmV4dC5zcGFuX3R5cGUnOiB0eXBlLFxuICAgICAgICAgICAgLi4ub3B0aW9ucy5hdHRyaWJ1dGVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjb250ZXh0LndpdGgoc3BhbkNvbnRleHQuc2V0VmFsdWUocm9vdFNwYW5JZEtleSwgc3BhbklkKSwgKCk9PnRoaXMuZ2V0VHJhY2VySW5zdGFuY2UoKS5zdGFydEFjdGl2ZVNwYW4oc3Bhbk5hbWUsIG9wdGlvbnMsIChzcGFuKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9ICdwZXJmb3JtYW5jZScgaW4gZ2xvYmFsVGhpcyAmJiAnbWVhc3VyZScgaW4gcGVyZm9ybWFuY2UgPyBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdygpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uQ2xlYW51cCA9ICgpPT57XG4gICAgICAgICAgICAgICAgICAgIHJvb3RTcGFuQXR0cmlidXRlc1N0b3JlLmRlbGV0ZShzcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRUaW1lICYmIHByb2Nlc3MuZW52Lk5FWFRfT1RFTF9QRVJGT1JNQU5DRV9QUkVGSVggJiYgX2NvbnN0YW50cy5Mb2dTcGFuQWxsb3dMaXN0LmluY2x1ZGVzKHR5cGUgfHwgJycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZS5tZWFzdXJlKGAke3Byb2Nlc3MuZW52Lk5FWFRfT1RFTF9QRVJGT1JNQU5DRV9QUkVGSVh9Om5leHQtJHsodHlwZS5zcGxpdCgnLicpLnBvcCgpIHx8ICcnKS5yZXBsYWNlKC9bQS1aXS9nLCAobWF0Y2gpPT4nLScgKyBtYXRjaC50b0xvd2VyQ2FzZSgpKX1gLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGlzUm9vdFNwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdFNwYW5BdHRyaWJ1dGVzU3RvcmUuc2V0KHNwYW5JZCwgbmV3IE1hcChPYmplY3QuZW50cmllcyhvcHRpb25zLmF0dHJpYnV0ZXMgPz8ge30pKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oc3BhbiwgKGVycik9PmNsb3NlU3BhbldpdGhFcnJvcihzcGFuLCBlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbihzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfaXN0aGVuYWJsZS5pc1RoZW5hYmxlKShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGVycm9yIG1ha2Ugc3VyZSBpdCB0aHJvd3NcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBwYXNzIGRvd24gdGhlIHByb21pc2UgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGNvdWxkIGJlIHJlYWN0IHN0cmVhbSByZXNwb25zZSB3aXRoIGVycm9yIHsgZXJyb3IsIHN0cmVhbSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VTcGFuV2l0aEVycm9yKHNwYW4sIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZmluYWxseShvbkNsZWFudXApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3NlU3BhbldpdGhFcnJvcihzcGFuLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICBvbkNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gICAgd3JhcCguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHRyYWNlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IFtuYW1lLCBvcHRpb25zLCBmbl0gPSBhcmdzLmxlbmd0aCA9PT0gMyA/IGFyZ3MgOiBbXG4gICAgICAgICAgICBhcmdzWzBdLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBhcmdzWzFdXG4gICAgICAgIF07XG4gICAgICAgIGlmICghX2NvbnN0YW50cy5OZXh0VmFuaWxsYVNwYW5BbGxvd2xpc3QuaW5jbHVkZXMobmFtZSkgJiYgcHJvY2Vzcy5lbnYuTkVYVF9PVEVMX1ZFUkJPU0UgIT09ICcxJykge1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zT2JqID0gb3B0aW9ucztcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09iaiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zT2JqID0gb3B0aW9uc09iai5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdEFyZ0lkID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb25zdCBjYiA9IGFyZ3VtZW50c1tsYXN0QXJnSWRdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlQm91bmRDYiA9IHRyYWNlci5nZXRDb250ZXh0KCkuYmluZChjb250ZXh0LmFjdGl2ZSgpLCBjYik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNlci50cmFjZShuYW1lLCBvcHRpb25zT2JqLCAoX3NwYW4sIGRvbmUpPT57XG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tsYXN0QXJnSWRdID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID09IG51bGwgPyB2b2lkIDAgOiBkb25lKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGVCb3VuZENiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhY2VyLnRyYWNlKG5hbWUsIG9wdGlvbnNPYmosICgpPT5mbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhcnRTcGFuKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgW3R5cGUsIG9wdGlvbnNdID0gYXJncztcbiAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSB0aGlzLmdldFNwYW5Db250ZXh0KChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnBhcmVudFNwYW4pID8/IHRoaXMuZ2V0QWN0aXZlU2NvcGVTcGFuKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJJbnN0YW5jZSgpLnN0YXJ0U3Bhbih0eXBlLCBvcHRpb25zLCBzcGFuQ29udGV4dCk7XG4gICAgfVxuICAgIGdldFNwYW5Db250ZXh0KHBhcmVudFNwYW4pIHtcbiAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBwYXJlbnRTcGFuID8gdHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBwYXJlbnRTcGFuKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHNwYW5Db250ZXh0O1xuICAgIH1cbiAgICBnZXRSb290U3BhbkF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGNvbnN0IHNwYW5JZCA9IGNvbnRleHQuYWN0aXZlKCkuZ2V0VmFsdWUocm9vdFNwYW5JZEtleSk7XG4gICAgICAgIHJldHVybiByb290U3BhbkF0dHJpYnV0ZXNTdG9yZS5nZXQoc3BhbklkKTtcbiAgICB9XG4gICAgc2V0Um9vdFNwYW5BdHRyaWJ1dGUoa2V5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBzcGFuSWQgPSBjb250ZXh0LmFjdGl2ZSgpLmdldFZhbHVlKHJvb3RTcGFuSWRLZXkpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gcm9vdFNwYW5BdHRyaWJ1dGVzU3RvcmUuZ2V0KHNwYW5JZCk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNvbnN0IGdldFRyYWNlciA9ICgoKT0+e1xuICAgIGNvbnN0IHRyYWNlciA9IG5ldyBOZXh0VHJhY2VySW1wbCgpO1xuICAgIHJldHVybiAoKT0+dHJhY2VyO1xufSkoKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2VyLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/lib/trace/tracer.js\n");
|
350
|
-
|
351
|
-
/***/ }),
|
352
|
-
|
353
|
-
/***/ "./node_modules/next/dist/server/lib/trace/utils.js":
|
354
|
-
/*!**********************************************************!*\
|
355
|
-
!*** ./node_modules/next/dist/server/lib/trace/utils.js ***!
|
356
|
-
\**********************************************************/
|
357
|
-
/***/ ((__unused_webpack_module, exports) => {
|
358
|
-
|
359
|
-
"use strict";
|
360
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getTracedMetadata\", ({\n enumerable: true,\n get: function() {\n return getTracedMetadata;\n }\n}));\nfunction getTracedMetadata(traceData, clientTraceMetadata) {\n if (!clientTraceMetadata) return undefined;\n return traceData.filter(({ key })=>clientTraceMetadata.includes(key));\n}\n\n//# sourceMappingURL=utils.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvdHJhY2UvdXRpbHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixxREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0EsK0JBQStCLEtBQUs7QUFDcEM7O0FBRUEiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXERlc2t0b3BcXFdvcmtTcGFjZVxcdGVzdHdpZGdldFxcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxzZXJ2ZXJcXGxpYlxcdHJhY2VcXHV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0VHJhY2VkTWV0YWRhdGFcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFRyYWNlZE1ldGFkYXRhO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZ2V0VHJhY2VkTWV0YWRhdGEodHJhY2VEYXRhLCBjbGllbnRUcmFjZU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjbGllbnRUcmFjZU1ldGFkYXRhKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0cmFjZURhdGEuZmlsdGVyKCh7IGtleSB9KT0+Y2xpZW50VHJhY2VNZXRhZGF0YS5pbmNsdWRlcyhrZXkpKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/lib/trace/utils.js\n");
|
361
|
-
|
362
|
-
/***/ }),
|
363
|
-
|
364
|
-
/***/ "./node_modules/next/dist/server/route-kind.js":
|
365
|
-
/*!*****************************************************!*\
|
366
|
-
!*** ./node_modules/next/dist/server/route-kind.js ***!
|
367
|
-
\*****************************************************/
|
368
|
-
/***/ ((__unused_webpack_module, exports) => {
|
369
|
-
|
370
|
-
"use strict";
|
371
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouteKind\", ({\n enumerable: true,\n get: function() {\n return RouteKind;\n }\n}));\nvar RouteKind;\n(function(RouteKind) {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */ RouteKind[\"PAGES\"] = \"PAGES\";\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */ RouteKind[\"PAGES_API\"] = \"PAGES_API\";\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */ RouteKind[\"APP_PAGE\"] = \"APP_PAGE\";\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */ RouteKind[\"APP_ROUTE\"] = \"APP_ROUTE\";\n /**\n * `IMAGE` represents all the images that are generated by `next/image`.\n */ RouteKind[\"IMAGE\"] = \"IMAGE\";\n})(RouteKind || (RouteKind = {}));\n\n//# sourceMappingURL=route-kind.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1raW5kLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsNkNBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsSUFBSSxFQUFFLEdBQUc7QUFDakM7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLElBQUksRUFBRSxHQUFHO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw4QkFBOEI7O0FBRS9CIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxEZXNrdG9wXFxXb3JrU3BhY2VcXHRlc3R3aWRnZXRcXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcc2VydmVyXFxyb3V0ZS1raW5kLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUm91dGVLaW5kXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb3V0ZUtpbmQ7XG4gICAgfVxufSk7XG52YXIgUm91dGVLaW5kO1xuKGZ1bmN0aW9uKFJvdXRlS2luZCkge1xuICAgIC8qKlxuICAgKiBgUEFHRVNgIHJlcHJlc2VudHMgYWxsIHRoZSBSZWFjdCBwYWdlcyB0aGF0IGFyZSB1bmRlciBgcGFnZXMvYC5cbiAgICovIFJvdXRlS2luZFtcIlBBR0VTXCJdID0gXCJQQUdFU1wiO1xuICAgIC8qKlxuICAgKiBgUEFHRVNfQVBJYCByZXByZXNlbnRzIGFsbCB0aGUgQVBJIHJvdXRlcyB1bmRlciBgcGFnZXMvYXBpL2AuXG4gICAqLyBSb3V0ZUtpbmRbXCJQQUdFU19BUElcIl0gPSBcIlBBR0VTX0FQSVwiO1xuICAgIC8qKlxuICAgKiBgQVBQX1BBR0VgIHJlcHJlc2VudHMgYWxsIHRoZSBSZWFjdCBwYWdlcyB0aGF0IGFyZSB1bmRlciBgYXBwL2Agd2l0aCB0aGVcbiAgICogZmlsZW5hbWUgb2YgYHBhZ2Uue2osdH1zeyx4fWAuXG4gICAqLyBSb3V0ZUtpbmRbXCJBUFBfUEFHRVwiXSA9IFwiQVBQX1BBR0VcIjtcbiAgICAvKipcbiAgICogYEFQUF9ST1VURWAgcmVwcmVzZW50cyBhbGwgdGhlIEFQSSByb3V0ZXMgYW5kIG1ldGFkYXRhIHJvdXRlcyB0aGF0IGFyZSB1bmRlciBgYXBwL2Agd2l0aCB0aGVcbiAgICogZmlsZW5hbWUgb2YgYHJvdXRlLntqLHR9c3sseH1gLlxuICAgKi8gUm91dGVLaW5kW1wiQVBQX1JPVVRFXCJdID0gXCJBUFBfUk9VVEVcIjtcbiAgICAvKipcbiAgICogYElNQUdFYCByZXByZXNlbnRzIGFsbCB0aGUgaW1hZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCBieSBgbmV4dC9pbWFnZWAuXG4gICAqLyBSb3V0ZUtpbmRbXCJJTUFHRVwiXSA9IFwiSU1BR0VcIjtcbn0pKFJvdXRlS2luZCB8fCAoUm91dGVLaW5kID0ge30pKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGUta2luZC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/route-kind.js\n");
|
372
|
-
|
373
|
-
/***/ }),
|
374
|
-
|
375
|
-
/***/ "./node_modules/next/dist/server/route-modules/pages/module.compiled.js":
|
376
|
-
/*!******************************************************************************!*\
|
377
|
-
!*** ./node_modules/next/dist/server/route-modules/pages/module.compiled.js ***!
|
378
|
-
\******************************************************************************/
|
379
|
-
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
380
|
-
|
381
|
-
"use strict";
|
382
|
-
eval("\nif (false) {} else {\n if (true) {\n module.exports = __webpack_require__(/*! next/dist/compiled/next-server/pages.runtime.dev.js */ \"next/dist/compiled/next-server/pages.runtime.dev.js\");\n } else {}\n}\n\n//# sourceMappingURL=module.compiled.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1tb2R1bGVzL3BhZ2VzL21vZHVsZS5jb21waWxlZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksS0FBbUMsRUFBRSxFQUV4QyxDQUFDO0FBQ0YsUUFBUSxJQUFzQztBQUM5QyxRQUFRLHNKQUErRTtBQUN2RixNQUFNLEtBQUssRUFJTjtBQUNMOztBQUVBIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxEZXNrdG9wXFxXb3JrU3BhY2VcXHRlc3R3aWRnZXRcXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcc2VydmVyXFxyb3V0ZS1tb2R1bGVzXFxwYWdlc1xcbW9kdWxlLmNvbXBpbGVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuaWYgKHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSA9PT0gJ2VkZ2UnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCduZXh0L2Rpc3Qvc2VydmVyL3JvdXRlLW1vZHVsZXMvcGFnZXMvbW9kdWxlLmpzJyk7XG59IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ25leHQvZGlzdC9jb21waWxlZC9uZXh0LXNlcnZlci9wYWdlcy5ydW50aW1lLmRldi5qcycpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtc2VydmVyL3BhZ2VzLXR1cmJvLnJ1bnRpbWUucHJvZC5qcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtc2VydmVyL3BhZ2VzLnJ1bnRpbWUucHJvZC5qcycpO1xuICAgIH1cbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kdWxlLmNvbXBpbGVkLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/route-modules/pages/module.compiled.js\n");
|
383
|
-
|
384
|
-
/***/ }),
|
385
|
-
|
386
|
-
/***/ "./node_modules/next/dist/server/route-modules/pages/vendored/contexts/amp-context.js":
|
387
|
-
/*!********************************************************************************************!*\
|
388
|
-
!*** ./node_modules/next/dist/server/route-modules/pages/vendored/contexts/amp-context.js ***!
|
389
|
-
\********************************************************************************************/
|
390
|
-
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
391
|
-
|
392
|
-
"use strict";
|
393
|
-
eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"./node_modules/next/dist/server/route-modules/pages/module.compiled.js\").vendored.contexts.AmpContext;\n\n//# sourceMappingURL=amp-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1tb2R1bGVzL3BhZ2VzL3ZlbmRvcmVkL2NvbnRleHRzL2FtcC1jb250ZXh0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isd0tBQWlGOztBQUVqRiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcRGVza3RvcFxcV29ya1NwYWNlXFx0ZXN0d2lkZ2V0XFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXHNlcnZlclxccm91dGUtbW9kdWxlc1xccGFnZXNcXHZlbmRvcmVkXFxjb250ZXh0c1xcYW1wLWNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZS5jb21waWxlZCcpLnZlbmRvcmVkWydjb250ZXh0cyddLkFtcENvbnRleHQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFtcC1jb250ZXh0LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/route-modules/pages/vendored/contexts/amp-context.js\n");
|
394
|
-
|
395
|
-
/***/ }),
|
396
|
-
|
397
|
-
/***/ "./node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js":
|
398
|
-
/*!*****************************************************************************************************!*\
|
399
|
-
!*** ./node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js ***!
|
400
|
-
\*****************************************************************************************************/
|
401
|
-
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
402
|
-
|
403
|
-
"use strict";
|
404
|
-
eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"./node_modules/next/dist/server/route-modules/pages/module.compiled.js\").vendored.contexts.HeadManagerContext;\n\n//# sourceMappingURL=head-manager-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1tb2R1bGVzL3BhZ2VzL3ZlbmRvcmVkL2NvbnRleHRzL2hlYWQtbWFuYWdlci1jb250ZXh0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0xBQXlGOztBQUV6RiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcRGVza3RvcFxcV29ya1NwYWNlXFx0ZXN0d2lkZ2V0XFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXHNlcnZlclxccm91dGUtbW9kdWxlc1xccGFnZXNcXHZlbmRvcmVkXFxjb250ZXh0c1xcaGVhZC1tYW5hZ2VyLWNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZS5jb21waWxlZCcpLnZlbmRvcmVkWydjb250ZXh0cyddLkhlYWRNYW5hZ2VyQ29udGV4dDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVhZC1tYW5hZ2VyLWNvbnRleHQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js\n");
|
405
|
-
|
406
|
-
/***/ }),
|
407
|
-
|
408
|
-
/***/ "./node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js":
|
409
|
-
/*!*********************************************************************************************!*\
|
410
|
-
!*** ./node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js ***!
|
411
|
-
\*********************************************************************************************/
|
412
|
-
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
413
|
-
|
414
|
-
"use strict";
|
415
|
-
eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"./node_modules/next/dist/server/route-modules/pages/module.compiled.js\").vendored.contexts.HtmlContext;\n\n//# sourceMappingURL=html-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1tb2R1bGVzL3BhZ2VzL3ZlbmRvcmVkL2NvbnRleHRzL2h0bWwtY29udGV4dC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHlLQUFrRjs7QUFFbEYiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXERlc2t0b3BcXFdvcmtTcGFjZVxcdGVzdHdpZGdldFxcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxzZXJ2ZXJcXHJvdXRlLW1vZHVsZXNcXHBhZ2VzXFx2ZW5kb3JlZFxcY29udGV4dHNcXGh0bWwtY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlLmNvbXBpbGVkJykudmVuZG9yZWRbJ2NvbnRleHRzJ10uSHRtbENvbnRleHQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0bWwtY29udGV4dC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js\n");
|
416
|
-
|
417
|
-
/***/ }),
|
418
|
-
|
419
|
-
/***/ "./node_modules/next/dist/server/utils.js":
|
420
|
-
/*!************************************************!*\
|
421
|
-
!*** ./node_modules/next/dist/server/utils.js ***!
|
422
|
-
\************************************************/
|
423
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
424
|
-
|
425
|
-
"use strict";
|
426
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n cleanAmpPath: function() {\n return cleanAmpPath;\n },\n debounce: function() {\n return debounce;\n },\n isBlockedPage: function() {\n return isBlockedPage;\n }\n});\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"./node_modules/next/dist/shared/lib/constants.js\");\nfunction isBlockedPage(page) {\n return _constants.BLOCKED_PAGES.includes(page);\n}\nfunction cleanAmpPath(pathname) {\n if (pathname.match(/\\?amp=(y|yes|true|1)/)) {\n pathname = pathname.replace(/\\?amp=(y|yes|true|1)&?/, '?');\n }\n if (pathname.match(/&=(y|yes|true|1)/)) {\n pathname = pathname.replace(/&=(y|yes|true|1)/, '');\n }\n pathname = pathname.replace(/\\?$/, '');\n return pathname;\n}\nfunction debounce(fn, ms, maxWait = Infinity) {\n let timeoutId;\n // The time the debouncing function was first called during this debounce queue.\n let startTime = 0;\n // The time the debouncing function was last called.\n let lastCall = 0;\n // The arguments and this context of the last call to the debouncing function.\n let args, context;\n // A helper used to that either invokes the debounced function, or\n // reschedules the timer if a more recent call was made.\n function run() {\n const now = Date.now();\n const diff = lastCall + ms - now;\n // If the diff is non-positive, then we've waited at least `ms`\n // milliseconds since the last call. Or if we've waited for longer than the\n // max wait time, we must call the debounced function.\n if (diff <= 0 || startTime + maxWait >= now) {\n // It's important to clear the timeout id before invoking the debounced\n // function, in case the function calls the debouncing function again.\n timeoutId = undefined;\n fn.apply(context, args);\n } else {\n // Else, a new call was made after the original timer was scheduled. We\n // didn't clear the timeout (doing so is very slow), so now we need to\n // reschedule the timer for the time difference.\n timeoutId = setTimeout(run, diff);\n }\n }\n return function(...passedArgs) {\n // The arguments and this context of the most recent call are saved so the\n // debounced function can be invoked with them later.\n args = passedArgs;\n context = this;\n // Instead of constantly clearing and scheduling a timer, we record the\n // time of the last call. If a second call comes in before the timer fires,\n // then we'll reschedule in the run function. Doing this is considerably\n // faster.\n lastCall = Date.now();\n // Only schedule a new timer if we're not currently waiting.\n if (timeoutId === undefined) {\n startTime = lastCall;\n timeoutId = setTimeout(run, ms);\n }\n };\n}\n\n//# sourceMappingURL=utils.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci91dGlscy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FJTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLGlGQUF5QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxEZXNrdG9wXFxXb3JrU3BhY2VcXHRlc3R3aWRnZXRcXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcc2VydmVyXFx1dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGNsZWFuQW1wUGF0aDogbnVsbCxcbiAgICBkZWJvdW5jZTogbnVsbCxcbiAgICBpc0Jsb2NrZWRQYWdlOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGNsZWFuQW1wUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjbGVhbkFtcFBhdGg7XG4gICAgfSxcbiAgICBkZWJvdW5jZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkZWJvdW5jZTtcbiAgICB9LFxuICAgIGlzQmxvY2tlZFBhZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNCbG9ja2VkUGFnZTtcbiAgICB9XG59KTtcbmNvbnN0IF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBpc0Jsb2NrZWRQYWdlKHBhZ2UpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5CTE9DS0VEX1BBR0VTLmluY2x1ZGVzKHBhZ2UpO1xufVxuZnVuY3Rpb24gY2xlYW5BbXBQYXRoKHBhdGhuYW1lKSB7XG4gICAgaWYgKHBhdGhuYW1lLm1hdGNoKC9cXD9hbXA9KHl8eWVzfHRydWV8MSkvKSkge1xuICAgICAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1xcP2FtcD0oeXx5ZXN8dHJ1ZXwxKSY/LywgJz8nKTtcbiAgICB9XG4gICAgaWYgKHBhdGhuYW1lLm1hdGNoKC8mYW1wPSh5fHllc3x0cnVlfDEpLykpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC8mYW1wPSh5fHllc3x0cnVlfDEpLywgJycpO1xuICAgIH1cbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1xcPyQvLCAnJyk7XG4gICAgcmV0dXJuIHBhdGhuYW1lO1xufVxuZnVuY3Rpb24gZGVib3VuY2UoZm4sIG1zLCBtYXhXYWl0ID0gSW5maW5pdHkpIHtcbiAgICBsZXQgdGltZW91dElkO1xuICAgIC8vIFRoZSB0aW1lIHRoZSBkZWJvdW5jaW5nIGZ1bmN0aW9uIHdhcyBmaXJzdCBjYWxsZWQgZHVyaW5nIHRoaXMgZGVib3VuY2UgcXVldWUuXG4gICAgbGV0IHN0YXJ0VGltZSA9IDA7XG4gICAgLy8gVGhlIHRpbWUgdGhlIGRlYm91bmNpbmcgZnVuY3Rpb24gd2FzIGxhc3QgY2FsbGVkLlxuICAgIGxldCBsYXN0Q2FsbCA9IDA7XG4gICAgLy8gVGhlIGFyZ3VtZW50cyBhbmQgdGhpcyBjb250ZXh0IG9mIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGRlYm91bmNpbmcgZnVuY3Rpb24uXG4gICAgbGV0IGFyZ3MsIGNvbnRleHQ7XG4gICAgLy8gQSBoZWxwZXIgdXNlZCB0byB0aGF0IGVpdGhlciBpbnZva2VzIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24sIG9yXG4gICAgLy8gcmVzY2hlZHVsZXMgdGhlIHRpbWVyIGlmIGEgbW9yZSByZWNlbnQgY2FsbCB3YXMgbWFkZS5cbiAgICBmdW5jdGlvbiBydW4oKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBsYXN0Q2FsbCArIG1zIC0gbm93O1xuICAgICAgICAvLyBJZiB0aGUgZGlmZiBpcyBub24tcG9zaXRpdmUsIHRoZW4gd2UndmUgd2FpdGVkIGF0IGxlYXN0IGBtc2BcbiAgICAgICAgLy8gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IGNhbGwuIE9yIGlmIHdlJ3ZlIHdhaXRlZCBmb3IgbG9uZ2VyIHRoYW4gdGhlXG4gICAgICAgIC8vIG1heCB3YWl0IHRpbWUsIHdlIG11c3QgY2FsbCB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoZGlmZiA8PSAwIHx8IHN0YXJ0VGltZSArIG1heFdhaXQgPj0gbm93KSB7XG4gICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBjbGVhciB0aGUgdGltZW91dCBpZCBiZWZvcmUgaW52b2tpbmcgdGhlIGRlYm91bmNlZFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24sIGluIGNhc2UgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoZSBkZWJvdW5jaW5nIGZ1bmN0aW9uIGFnYWluLlxuICAgICAgICAgICAgdGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZm4uYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBFbHNlLCBhIG5ldyBjYWxsIHdhcyBtYWRlIGFmdGVyIHRoZSBvcmlnaW5hbCB0aW1lciB3YXMgc2NoZWR1bGVkLiBXZVxuICAgICAgICAgICAgLy8gZGlkbid0IGNsZWFyIHRoZSB0aW1lb3V0IChkb2luZyBzbyBpcyB2ZXJ5IHNsb3cpLCBzbyBub3cgd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gcmVzY2hlZHVsZSB0aGUgdGltZXIgZm9yIHRoZSB0aW1lIGRpZmZlcmVuY2UuXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHJ1biwgZGlmZik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLnBhc3NlZEFyZ3MpIHtcbiAgICAgICAgLy8gVGhlIGFyZ3VtZW50cyBhbmQgdGhpcyBjb250ZXh0IG9mIHRoZSBtb3N0IHJlY2VudCBjYWxsIGFyZSBzYXZlZCBzbyB0aGVcbiAgICAgICAgLy8gZGVib3VuY2VkIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGggdGhlbSBsYXRlci5cbiAgICAgICAgYXJncyA9IHBhc3NlZEFyZ3M7XG4gICAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgICAvLyBJbnN0ZWFkIG9mIGNvbnN0YW50bHkgY2xlYXJpbmcgYW5kIHNjaGVkdWxpbmcgYSB0aW1lciwgd2UgcmVjb3JkIHRoZVxuICAgICAgICAvLyB0aW1lIG9mIHRoZSBsYXN0IGNhbGwuIElmIGEgc2Vjb25kIGNhbGwgY29tZXMgaW4gYmVmb3JlIHRoZSB0aW1lciBmaXJlcyxcbiAgICAgICAgLy8gdGhlbiB3ZSdsbCByZXNjaGVkdWxlIGluIHRoZSBydW4gZnVuY3Rpb24uIERvaW5nIHRoaXMgaXMgY29uc2lkZXJhYmx5XG4gICAgICAgIC8vIGZhc3Rlci5cbiAgICAgICAgbGFzdENhbGwgPSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBPbmx5IHNjaGVkdWxlIGEgbmV3IHRpbWVyIGlmIHdlJ3JlIG5vdCBjdXJyZW50bHkgd2FpdGluZy5cbiAgICAgICAgaWYgKHRpbWVvdXRJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydFRpbWUgPSBsYXN0Q2FsbDtcbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQocnVuLCBtcyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/utils.js\n");
|
427
|
-
|
428
|
-
/***/ }),
|
429
|
-
|
430
13
|
/***/ "(rsc)/./node_modules/next/font/local/target.css?{\"path\":\"src\\\\app\\\\layout.tsx\",\"import\":\"\",\"arguments\":[{\"src\":\"./fonts/GeistMonoVF.woff\",\"variable\":\"--font-geist-mono\",\"weight\":\"100 900\"}],\"variableName\":\"geistMono\"}":
|
431
14
|
/*!***************************************************************************************************************************************************************************************************************************!*\
|
432
15
|
!*** ./node_modules/next/font/local/target.css?{"path":"src\\app\\layout.tsx","import":"","arguments":[{"src":"./fonts/GeistMonoVF.woff","variable":"--font-geist-mono","weight":"100 900"}],"variableName":"geistMono"} ***!
|
@@ -575,7 +158,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
575
158
|
/***/ ((module, exports, __webpack_require__) => {
|
576
159
|
|
577
160
|
"use strict";
|
578
|
-
eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return OuterLayoutRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\"));\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js\");\nconst _fetchserverresponse = __webpack_require__(/*! ./router-reducer/fetch-server-response */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _unresolvedthenable = __webpack_require__(/*! ./unresolved-thenable */ \"(ssr)/./node_modules/next/dist/client/components/unresolved-thenable.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _matchsegments = __webpack_require__(/*! ./match-segments */ \"(ssr)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ../../shared/lib/router/utils/handle-smooth-scroll */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(ssr)/./node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _notfoundboundary = __webpack_require__(/*! ./not-found-boundary */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./router-reducer/create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./router-reducer/reducers/has-interception-route-in-current-tree */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\n/**\n * Add refetch marker to router state at the point of the current layout segment.\n * This ensures the response returned is not further down than the current layout segment.\n */ function walkAddRefetch(segmentPathToWalk, treeToRecreate) {\n if (segmentPathToWalk) {\n const [segment, parallelRouteKey] = segmentPathToWalk;\n const isLast = segmentPathToWalk.length === 2;\n if ((0, _matchsegments.matchSegment)(treeToRecreate[0], segment)) {\n if (treeToRecreate[1].hasOwnProperty(parallelRouteKey)) {\n if (isLast) {\n const subTree = walkAddRefetch(undefined, treeToRecreate[1][parallelRouteKey]);\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: [\n subTree[0],\n subTree[1],\n subTree[2],\n 'refetch'\n ]\n }\n ];\n }\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: walkAddRefetch(segmentPathToWalk.slice(2), treeToRecreate[1][parallelRouteKey])\n }\n ];\n }\n }\n }\n return treeToRecreate;\n}\nconst __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = _reactdom.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n// TODO-APP: Replace with new React API for finding dom nodes without a `ref` when available\n/**\n * Wraps ReactDOM.findDOMNode with additional logic to hide React Strict Mode warning\n */ function findDOMNode(instance) {\n // Tree-shake for server bundle\n if (true) return null;\n // __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.findDOMNode is null during module init.\n // We need to lazily reference it.\n const internal_reactDOMfindDOMNode = __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.findDOMNode;\n return internal_reactDOMfindDOMNode(instance);\n}\nconst rectProperties = [\n 'bottom',\n 'height',\n 'left',\n 'right',\n 'top',\n 'width',\n 'x',\n 'y'\n];\n/**\n * Check if a HTMLElement is hidden or fixed/sticky position\n */ function shouldSkipElement(element) {\n // we ignore fixed or sticky positioned elements since they'll likely pass the \"in-viewport\" check\n // and will result in a situation we bail on scroll because of something like a fixed nav,\n // even though the actual page content is offscreen\n if ([\n 'sticky',\n 'fixed'\n ].includes(getComputedStyle(element).position)) {\n if (true) {\n console.warn('Skipping auto-scroll behavior due to `position: sticky` or `position: fixed` on element:', element);\n }\n return true;\n }\n // Uses `getBoundingClientRect` to check if the element is hidden instead of `offsetParent`\n // because `offsetParent` doesn't consider document/body\n const rect = element.getBoundingClientRect();\n return rectProperties.every((item)=>rect[item] === 0);\n}\n/**\n * Check if the top corner of the HTMLElement is in the viewport.\n */ function topOfElementInViewport(element, viewportHeight) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.top <= viewportHeight;\n}\n/**\n * Find the DOM node for a hash fragment.\n * If `top` the page has to scroll to the top of the page. This mirrors the browser's behavior.\n * If the hash fragment is an id, the page has to scroll to the element with that id.\n * If the hash fragment is a name, the page has to scroll to the first element with that name.\n */ function getHashFragmentDomNode(hashFragment) {\n // If the hash fragment is `top` the page has to scroll to the top of the page.\n if (hashFragment === 'top') {\n return document.body;\n }\n var _document_getElementById;\n // If the hash fragment is an id, the page has to scroll to the element with that id.\n return (_document_getElementById = document.getElementById(hashFragment)) != null ? _document_getElementById : document.getElementsByName(hashFragment)[0];\n}\nclass InnerScrollAndFocusHandler extends _react.default.Component {\n componentDidMount() {\n this.handlePotentialScroll();\n }\n componentDidUpdate() {\n // Because this property is overwritten in handlePotentialScroll it's fine to always run it when true as it'll be set to false for subsequent renders.\n if (this.props.focusAndScrollRef.apply) {\n this.handlePotentialScroll();\n }\n }\n render() {\n return this.props.children;\n }\n constructor(...args){\n super(...args);\n this.handlePotentialScroll = ()=>{\n // Handle scroll and focus, it's only applied once in the first useEffect that triggers that changed.\n const { focusAndScrollRef, segmentPath } = this.props;\n if (focusAndScrollRef.apply) {\n // segmentPaths is an array of segment paths that should be scrolled to\n // if the current segment path is not in the array, the scroll is not applied\n // unless the array is empty, in which case the scroll is always applied\n if (focusAndScrollRef.segmentPaths.length !== 0 && !focusAndScrollRef.segmentPaths.some((scrollRefSegmentPath)=>segmentPath.every((segment, index)=>(0, _matchsegments.matchSegment)(segment, scrollRefSegmentPath[index])))) {\n return;\n }\n let domNode = null;\n const hashFragment = focusAndScrollRef.hashFragment;\n if (hashFragment) {\n domNode = getHashFragmentDomNode(hashFragment);\n }\n // `findDOMNode` is tricky because it returns just the first child if the component is a fragment.\n // This already caused a bug where the first child was a <link/> in head.\n if (!domNode) {\n domNode = findDOMNode(this);\n }\n // If there is no DOM node this layout-router level is skipped. It'll be handled higher-up in the tree.\n if (!(domNode instanceof Element)) {\n return;\n }\n // Verify if the element is a HTMLElement and if we want to consider it for scroll behavior.\n // If the element is skipped, try to select the next sibling and try again.\n while(!(domNode instanceof HTMLElement) || shouldSkipElement(domNode)){\n // No siblings found that match the criteria are found, so handle scroll higher up in the tree instead.\n if (domNode.nextElementSibling === null) {\n return;\n }\n domNode = domNode.nextElementSibling;\n }\n // State is mutated to ensure that the focus and scroll is applied only once.\n focusAndScrollRef.apply = false;\n focusAndScrollRef.hashFragment = null;\n focusAndScrollRef.segmentPaths = [];\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n // In case of hash scroll, we only need to scroll the element into view\n if (hashFragment) {\n domNode.scrollIntoView();\n return;\n }\n // Store the current viewport height because reading `clientHeight` causes a reflow,\n // and it won't change during this function.\n const htmlElement = document.documentElement;\n const viewportHeight = htmlElement.clientHeight;\n // If the element's top edge is already in the viewport, exit early.\n if (topOfElementInViewport(domNode, viewportHeight)) {\n return;\n }\n // Otherwise, try scrolling go the top of the document to be backward compatible with pages\n // scrollIntoView() called on `<html/>` element scrolls horizontally on chrome and firefox (that shouldn't happen)\n // We could use it to scroll horizontally following RTL but that also seems to be broken - it will always scroll left\n // scrollLeft = 0 also seems to ignore RTL and manually checking for RTL is too much hassle so we will scroll just vertically\n htmlElement.scrollTop = 0;\n // Scroll to domNode if domNode is not in viewport when scrolled to top of document\n if (!topOfElementInViewport(domNode, viewportHeight)) {\n domNode.scrollIntoView();\n }\n }, {\n // We will force layout by querying domNode position\n dontForceLayout: true,\n onlyHashChange: focusAndScrollRef.onlyHashChange\n });\n // Mutate after scrolling so that it can be read by `handleSmoothScroll`\n focusAndScrollRef.onlyHashChange = false;\n // Set focus on the element\n domNode.focus();\n }\n };\n }\n}\nfunction ScrollAndFocusHandler(param) {\n let { segmentPath, children } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error('invariant global layout router not mounted');\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerScrollAndFocusHandler, {\n segmentPath: segmentPath,\n focusAndScrollRef: context.focusAndScrollRef,\n children: children\n });\n}\n/**\n * InnerLayoutRouter handles rendering the provided segment based on the cache.\n */ function InnerLayoutRouter(param) {\n let { parallelRouterKey, url, childNodes, segmentPath, tree, // isActive,\n cacheKey } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error('invariant global layout router not mounted');\n }\n const { buildId, changeByServerResponse, tree: fullTree } = context;\n // Read segment path from the parallel router cache node.\n let childNode = childNodes.get(cacheKey);\n // When data is not available during rendering client-side we need to fetch\n // it from the server.\n if (childNode === undefined) {\n const newLazyCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading: null\n };\n /**\n * Flight data fetch kicked off during render and put into the cache.\n */ childNode = newLazyCacheNode;\n childNodes.set(cacheKey, newLazyCacheNode);\n }\n // `rsc` represents the renderable node for this segment.\n // If this segment has a `prefetchRsc`, it's the statically prefetched data.\n // We should use that on initial render instead of `rsc`. Then we'll switch\n // to `rsc` when the dynamic response streams in.\n //\n // If no prefetch data is available, then we go straight to rendering `rsc`.\n const resolvedPrefetchRsc = childNode.prefetchRsc !== null ? childNode.prefetchRsc : childNode.rsc;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n //\n // @ts-expect-error The second argument to `useDeferredValue` is only\n // available in the experimental builds. When its disabled, it will always\n // return `rsc`.\n const rsc = (0, _react.useDeferredValue)(childNode.rsc, resolvedPrefetchRsc);\n // `rsc` is either a React node or a promise for a React node, except we\n // special case `null` to represent that this segment's data is missing. If\n // it's a promise, we need to unwrap it so we can determine whether or not the\n // data is missing.\n const resolvedRsc = typeof rsc === 'object' && rsc !== null && typeof rsc.then === 'function' ? (0, _react.use)(rsc) : rsc;\n if (!resolvedRsc) {\n // The data for this segment is not available, and there's no pending\n // navigation that will be able to fulfill it. We need to fetch more from\n // the server and patch the cache.\n // Check if there's already a pending request.\n let lazyData = childNode.lazyData;\n if (lazyData === null) {\n /**\n * Router state with refetch marker added\n */ // TODO-APP: remove ''\n const refetchTree = walkAddRefetch([\n '',\n ...segmentPath\n ], fullTree);\n const includeNextUrl = (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(fullTree);\n childNode.lazyData = lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(url, location.origin), {\n flightRouterState: refetchTree,\n nextUrl: includeNextUrl ? context.nextUrl : null,\n buildId\n }).then((serverResponse)=>{\n (0, _react.startTransition)(()=>{\n changeByServerResponse({\n previousTree: fullTree,\n serverResponse\n });\n });\n return serverResponse;\n });\n }\n // Suspend infinitely as `changeByServerResponse` will cause a different part of the tree to be rendered.\n // A falsey `resolvedRsc` indicates missing data -- we should not commit that branch, and we need to wait for the data to arrive.\n (0, _react.use)(_unresolvedthenable.unresolvedThenable);\n }\n // If we get to this point, then we know we have something we can render.\n const subtree = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: {\n tree: tree[1][parallelRouterKey],\n childNodes: childNode.parallelRoutes,\n // TODO-APP: overriding of url for parallel routes\n url: url,\n loading: childNode.loading\n },\n children: resolvedRsc\n });\n // Ensure root layout is not wrapped in a div as the root layout renders `<html>`\n return subtree;\n}\n/**\n * Renders suspense boundary with the provided \"loading\" property as the fallback.\n * If no loading property is provided it renders the children without a suspense boundary.\n */ function LoadingBoundary(param) {\n let { children, hasLoading, loading, loadingStyles, loadingScripts } = param;\n // We have an explicit prop for checking if `loading` is provided, to disambiguate between a loading\n // component that returns `null` / `undefined`, vs not having a loading component at all.\n if (hasLoading) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, {\n fallback: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n loadingStyles,\n loadingScripts,\n loading\n ]\n }),\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nfunction OuterLayoutRouter(param) {\n let { parallelRouterKey, segmentPath, error, errorStyles, errorScripts, templateStyles, templateScripts, template, notFound, notFoundStyles } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n if (!context) {\n throw new Error('invariant expected layout router to be mounted');\n }\n const { childNodes, tree, url, loading } = context;\n // Get the current parallelRouter cache node\n let childNodesForParallelRouter = childNodes.get(parallelRouterKey);\n // If the parallel router cache node does not exist yet, create it.\n // This writes to the cache when there is no item in the cache yet. It never *overwrites* existing cache items which is why it's safe in concurrent mode.\n if (!childNodesForParallelRouter) {\n childNodesForParallelRouter = new Map();\n childNodes.set(parallelRouterKey, childNodesForParallelRouter);\n }\n // Get the active segment in the tree\n // The reason arrays are used in the data format is that these are transferred from the server to the browser so it's optimized to save bytes.\n const treeSegment = tree[1][parallelRouterKey][0];\n // If segment is an array it's a dynamic route and we want to read the dynamic route value as the segment to get from the cache.\n const currentChildSegmentValue = (0, _getsegmentvalue.getSegmentValue)(treeSegment);\n /**\n * Decides which segments to keep rendering, all segments that are not active will be wrapped in `<Offscreen>`.\n */ // TODO-APP: Add handling of `<Offscreen>` when it's available.\n const preservedSegments = [\n treeSegment\n ];\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: preservedSegments.map((preservedSegment)=>{\n const preservedSegmentValue = (0, _getsegmentvalue.getSegmentValue)(preservedSegment);\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(preservedSegment);\n return(/*\n - Error boundary\n - Only renders error boundary if error component is provided.\n - Rendered for each segment to ensure they have their own error state.\n - Loading boundary\n - Only renders suspense boundary if loading components is provided.\n - Rendered for each segment to ensure they have their own loading state.\n - Passed to the router during rendering to ensure it can be immediately rendered when suspending on a Flight fetch.\n */ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_approutercontextsharedruntime.TemplateContext.Provider, {\n value: /*#__PURE__*/ (0, _jsxruntime.jsx)(ScrollAndFocusHandler, {\n segmentPath: segmentPath,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n errorComponent: error,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingBoundary, {\n hasLoading: Boolean(loading),\n loading: loading == null ? void 0 : loading[0],\n loadingStyles: loading == null ? void 0 : loading[1],\n loadingScripts: loading == null ? void 0 : loading[2],\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_notfoundboundary.NotFoundBoundary, {\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_redirectboundary.RedirectBoundary, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerLayoutRouter, {\n parallelRouterKey: parallelRouterKey,\n url: url,\n tree: tree,\n childNodes: childNodesForParallelRouter,\n segmentPath: segmentPath,\n cacheKey: cacheKey,\n isActive: currentChildSegmentValue === preservedSegmentValue\n })\n })\n })\n })\n })\n }),\n children: [\n templateStyles,\n templateScripts,\n template\n ]\n }, (0, _createroutercachekey.createRouterCacheKey)(preservedSegment, true)));\n })\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=layout-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O2VBMGV3QkE7Ozs7Ozs7OEtBcGRIOytDQUtkO3FDQUM2QjtnREFDRDsrQ0FDTDsyQ0FDRDt1SUFDTTsrQ0FDRjs4Q0FDQTs2Q0FDRDsrTEFDSzs4TEFDYTtBQUVsRDs7OztJQVFFLElBQUlFLEtBQUFBLGNBQW1CO1FBQ3JCLE1BQU0sQ0FBQ0UsU0FBU0MsR0FBQUE7UUFDaEIsTUFBTUMsQ0FBQUEsUUFBU0osQ0FBQUEsaUJBQWtCSyxHQUFBQSxHQUFNLEtBQUs7UUFFNUMsSUFBSUMsRUFBQUEsRUFBQUEsT0FBQUEsa0JBQUFBLEVBQVksRUFBQ0wsRUFBQUEsS0FBQUE7WUFDZixJQUFJQSxjQUFjLENBQUMsRUFBRSxDQUFDTSxTQUFBQSxFQUFBQSxHQUFjLENBQUNKLFVBQUFBLENBQUFBLEVBQUFBLEVBQUFBLElBQW1CO2dCQUN0RCxJQUFJQyxRQUFRO29CQUNWLE1BQU1JLEVBQUFBO29CQUlOLE9BQU87d0JBQ0xQLEdBQUFBO3dCQUNBOzs0QkFFRSxDQUFDRSxFQUFBQSxjQUFBQSxDQUFpQixFQUFFO2dDQUNsQkssT0FBTyxDQUFDLEVBQUU7Z0NBQ1ZBLE9BQU8sQ0FBQyxFQUFFO2dDQUNWQSxPQUFPLENBQUMsRUFBRTtnQ0FDVjtnQ0FDRDs2QkFDSDt3QkFDRDtxQkFDSDtnQkFFQTtvQkFDRVAsR0FBQUE7b0JBQ0E7O3dCQUVFLENBQUNFLEVBQUFBLGNBQUFBLENBQWlCLEVBQUVKO3dCQUl0QjtvQkFDRDtpQkFDSDtZQUNGO1FBQ0Y7SUFFQTtJQUNGO0FBRUE7QUFJQSw0RkFBNEY7QUFDNUY7OztJQU1FLCtCQUErQjtJQUMvQixJQUFJLE9BQU9nQixXQUFXO0lBRXRCO0lBQ0EsdUdBQWtDO0lBQ2xDLE1BQU1DLDRCQUFBQTtJQUVOLE9BQU9BLDZCQUE2QkYsQ0FBQUEsNkRBQUFBLFdBQUFBO0lBQ3RDO0FBRUE7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QUUzQixVQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxNQUFBQSxDQUFTLENBQUMsRUFBRTtzQ0FFNUIsbUNBQUNtRCxLQUFBQSxDQUFBQSxFQUFBQTtnQ0FDQ2YsTUFBQUEsSUFBVUEsT0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsWUFBQUEsR0FBQUEsRUFBQUEsa0JBQUFBLGdCQUFBQSxFQUFBQTtnQ0FDVkMsVUFBQUEsTUFBZ0JBOzBDQUVoQjswQ0FDRSx1Q0FBQ3hELGNBQUFBLGdCQUFBQSxFQUFBQTt3Q0FDQ0MsTUFBQUEsV0FBQUEsRUFBbUJBLENBQUFBLENBQUFBLEdBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLG1CQUFBQTt3Q0FDbkJDLEtBQUtBLGNBQUFBO3dDQUNMRSxLQUFBQSxDQUFNQTt3Q0FDTkQsTUFBQUE7d0NBQ0ExQixZQUFBQSxDQUFhQTt3Q0FDYjRCLFVBQVVBLEdBQUFBO3dDQUNWbUUsVUFDRWI7Ozs7Ozs7O29CQVVmUCxNQUFBQTtvQkFDQUM7b0JBQ0FDOztpQkF2Q0lXO1lBMENYOztJQUdOIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxzcmNcXGNsaWVudFxcY29tcG9uZW50c1xcbGF5b3V0LXJvdXRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2hpbGRTZWdtZW50TWFwLFxuICBMYXp5Q2FjaGVOb2RlLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIEZsaWdodFNlZ21lbnRQYXRoLFxuICBTZWdtZW50LFxufSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgRXJyb3JDb21wb25lbnQgfSBmcm9tICcuL2Vycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IHR5cGUgeyBGb2N1c0FuZFNjcm9sbFJlZiB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMnXG5cbmltcG9ydCBSZWFjdCwge1xuICB1c2VDb250ZXh0LFxuICB1c2UsXG4gIHN0YXJ0VHJhbnNpdGlvbixcbiAgU3VzcGVuc2UsXG4gIHVzZURlZmVycmVkVmFsdWUsXG4gIHR5cGUgSlNYLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQge1xuICBMYXlvdXRSb3V0ZXJDb250ZXh0LFxuICBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0LFxuICBUZW1wbGF0ZUNvbnRleHQsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZmV0Y2hTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuaW1wb3J0IHsgdW5yZXNvbHZlZFRoZW5hYmxlIH0gZnJvbSAnLi91bnJlc29sdmVkLXRoZW5hYmxlJ1xuaW1wb3J0IHsgRXJyb3JCb3VuZGFyeSB9IGZyb20gJy4vZXJyb3ItYm91bmRhcnknXG5pbXBvcnQgeyBtYXRjaFNlZ21lbnQgfSBmcm9tICcuL21hdGNoLXNlZ21lbnRzJ1xuaW1wb3J0IHsgaGFuZGxlU21vb3RoU2Nyb2xsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaGFuZGxlLXNtb290aC1zY3JvbGwnXG5pbXBvcnQgeyBSZWRpcmVjdEJvdW5kYXJ5IH0gZnJvbSAnLi9yZWRpcmVjdC1ib3VuZGFyeSdcbmltcG9ydCB7IE5vdEZvdW5kQm91bmRhcnkgfSBmcm9tICcuL25vdC1mb3VuZC1ib3VuZGFyeSdcbmltcG9ydCB7IGdldFNlZ21lbnRWYWx1ZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXJDYWNoZUtleSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvY3JlYXRlLXJvdXRlci1jYWNoZS1rZXknXG5pbXBvcnQgeyBoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2hhcy1pbnRlcmNlcHRpb24tcm91dGUtaW4tY3VycmVudC10cmVlJ1xuXG4vKipcbiAqIEFkZCByZWZldGNoIG1hcmtlciB0byByb3V0ZXIgc3RhdGUgYXQgdGhlIHBvaW50IG9mIHRoZSBjdXJyZW50IGxheW91dCBzZWdtZW50LlxuICogVGhpcyBlbnN1cmVzIHRoZSByZXNwb25zZSByZXR1cm5lZCBpcyBub3QgZnVydGhlciBkb3duIHRoYW4gdGhlIGN1cnJlbnQgbGF5b3V0IHNlZ21lbnQuXG4gKi9cbmZ1bmN0aW9uIHdhbGtBZGRSZWZldGNoKFxuICBzZWdtZW50UGF0aFRvV2FsazogRmxpZ2h0U2VnbWVudFBhdGggfCB1bmRlZmluZWQsXG4gIHRyZWVUb1JlY3JlYXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogRmxpZ2h0Um91dGVyU3RhdGUge1xuICBpZiAoc2VnbWVudFBhdGhUb1dhbGspIHtcbiAgICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZUtleV0gPSBzZWdtZW50UGF0aFRvV2Fsa1xuICAgIGNvbnN0IGlzTGFzdCA9IHNlZ21lbnRQYXRoVG9XYWxrLmxlbmd0aCA9PT0gMlxuXG4gICAgaWYgKG1hdGNoU2VnbWVudCh0cmVlVG9SZWNyZWF0ZVswXSwgc2VnbWVudCkpIHtcbiAgICAgIGlmICh0cmVlVG9SZWNyZWF0ZVsxXS5oYXNPd25Qcm9wZXJ0eShwYXJhbGxlbFJvdXRlS2V5KSkge1xuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHdhbGtBZGRSZWZldGNoKFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHJlZVRvUmVjcmVhdGVbMV1bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRyZWVUb1JlY3JlYXRlWzBdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi50cmVlVG9SZWNyZWF0ZVsxXSxcbiAgICAgICAgICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiBbXG4gICAgICAgICAgICAgICAgc3ViVHJlZVswXSxcbiAgICAgICAgICAgICAgICBzdWJUcmVlWzFdLFxuICAgICAgICAgICAgICAgIHN1YlRyZWVbMl0sXG4gICAgICAgICAgICAgICAgJ3JlZmV0Y2gnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHRyZWVUb1JlY3JlYXRlWzBdLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnRyZWVUb1JlY3JlYXRlWzFdLFxuICAgICAgICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiB3YWxrQWRkUmVmZXRjaChcbiAgICAgICAgICAgICAgc2VnbWVudFBhdGhUb1dhbGsuc2xpY2UoMiksXG4gICAgICAgICAgICAgIHRyZWVUb1JlY3JlYXRlWzFdW3BhcmFsbGVsUm91dGVLZXldXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJlZVRvUmVjcmVhdGVcbn1cblxuY29uc3QgX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID0gKFxuICBSZWFjdERPTSBhcyBhbnlcbikuX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFXG5cbi8vIFRPRE8tQVBQOiBSZXBsYWNlIHdpdGggbmV3IFJlYWN0IEFQSSBmb3IgZmluZGluZyBkb20gbm9kZXMgd2l0aG91dCBhIGByZWZgIHdoZW4gYXZhaWxhYmxlXG4vKipcbiAqIFdyYXBzIFJlYWN0RE9NLmZpbmRET01Ob2RlIHdpdGggYWRkaXRpb25hbCBsb2dpYyB0byBoaWRlIFJlYWN0IFN0cmljdCBNb2RlIHdhcm5pbmdcbiAqL1xuZnVuY3Rpb24gZmluZERPTU5vZGUoXG4gIGluc3RhbmNlOiBSZWFjdC5SZWFjdEluc3RhbmNlIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogRWxlbWVudCB8IFRleHQgfCBudWxsIHtcbiAgLy8gVHJlZS1zaGFrZSBmb3Igc2VydmVyIGJ1bmRsZVxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsXG5cbiAgLy8gX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLmZpbmRET01Ob2RlIGlzIG51bGwgZHVyaW5nIG1vZHVsZSBpbml0LlxuICAvLyBXZSBuZWVkIHRvIGxhemlseSByZWZlcmVuY2UgaXQuXG4gIGNvbnN0IGludGVybmFsX3JlYWN0RE9NZmluZERPTU5vZGUgPVxuICAgIF9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERS5maW5kRE9NTm9kZVxuICByZXR1cm4gaW50ZXJuYWxfcmVhY3RET01maW5kRE9NTm9kZShpbnN0YW5jZSlcbn1cblxuY29uc3QgcmVjdFByb3BlcnRpZXMgPSBbXG4gICdib3R0b20nLFxuICAnaGVpZ2h0JyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ3dpZHRoJyxcbiAgJ3gnLFxuICAneScsXG5dIGFzIGNvbnN0XG4vKipcbiAqIENoZWNrIGlmIGEgSFRNTEVsZW1lbnQgaXMgaGlkZGVuIG9yIGZpeGVkL3N0aWNreSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBzaG91bGRTa2lwRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAvLyB3ZSBpZ25vcmUgZml4ZWQgb3Igc3RpY2t5IHBvc2l0aW9uZWQgZWxlbWVudHMgc2luY2UgdGhleSdsbCBsaWtlbHkgcGFzcyB0aGUgXCJpbi12aWV3cG9ydFwiIGNoZWNrXG4gIC8vIGFuZCB3aWxsIHJlc3VsdCBpbiBhIHNpdHVhdGlvbiB3ZSBiYWlsIG9uIHNjcm9sbCBiZWNhdXNlIG9mIHNvbWV0aGluZyBsaWtlIGEgZml4ZWQgbmF2LFxuICAvLyBldmVuIHRob3VnaCB0aGUgYWN0dWFsIHBhZ2UgY29udGVudCBpcyBvZmZzY3JlZW5cbiAgaWYgKFsnc3RpY2t5JywgJ2ZpeGVkJ10uaW5jbHVkZXMoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NraXBwaW5nIGF1dG8tc2Nyb2xsIGJlaGF2aW9yIGR1ZSB0byBgcG9zaXRpb246IHN0aWNreWAgb3IgYHBvc2l0aW9uOiBmaXhlZGAgb24gZWxlbWVudDonLFxuICAgICAgICBlbGVtZW50XG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBVc2VzIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGhpZGRlbiBpbnN0ZWFkIG9mIGBvZmZzZXRQYXJlbnRgXG4gIC8vIGJlY2F1c2UgYG9mZnNldFBhcmVudGAgZG9lc24ndCBjb25zaWRlciBkb2N1bWVudC9ib2R5XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIHJldHVybiByZWN0UHJvcGVydGllcy5ldmVyeSgoaXRlbSkgPT4gcmVjdFtpdGVtXSA9PT0gMClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdG9wIGNvcm5lciBvZiB0aGUgSFRNTEVsZW1lbnQgaXMgaW4gdGhlIHZpZXdwb3J0LlxuICovXG5mdW5jdGlvbiB0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB2aWV3cG9ydEhlaWdodDogbnVtYmVyKSB7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IHZpZXdwb3J0SGVpZ2h0XG59XG5cbi8qKlxuICogRmluZCB0aGUgRE9NIG5vZGUgZm9yIGEgaGFzaCBmcmFnbWVudC5cbiAqIElmIGB0b3BgIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZS4gVGhpcyBtaXJyb3JzIHRoZSBicm93c2VyJ3MgYmVoYXZpb3IuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhIG5hbWUsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aCB0aGF0IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50OiBzdHJpbmcpIHtcbiAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYHRvcGAgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLlxuICBpZiAoaGFzaEZyYWdtZW50ID09PSAndG9wJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cblxuICAvLyBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaEZyYWdtZW50KSA/P1xuICAgIC8vIElmIHRoZSBoYXNoIGZyYWdtZW50IGlzIGEgbmFtZSwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoYXQgbmFtZS5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShoYXNoRnJhZ21lbnQpWzBdXG4gIClcbn1cbmludGVyZmFjZSBTY3JvbGxBbmRGb2N1c0hhbmRsZXJQcm9wcyB7XG4gIGZvY3VzQW5kU2Nyb2xsUmVmOiBGb2N1c0FuZFNjcm9sbFJlZlxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxufVxuY2xhc3MgSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8U2Nyb2xsQW5kRm9jdXNIYW5kbGVyUHJvcHM+IHtcbiAgaGFuZGxlUG90ZW50aWFsU2Nyb2xsID0gKCkgPT4ge1xuICAgIC8vIEhhbmRsZSBzY3JvbGwgYW5kIGZvY3VzLCBpdCdzIG9ubHkgYXBwbGllZCBvbmNlIGluIHRoZSBmaXJzdCB1c2VFZmZlY3QgdGhhdCB0cmlnZ2VycyB0aGF0IGNoYW5nZWQuXG4gICAgY29uc3QgeyBmb2N1c0FuZFNjcm9sbFJlZiwgc2VnbWVudFBhdGggfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChmb2N1c0FuZFNjcm9sbFJlZi5hcHBseSkge1xuICAgICAgLy8gc2VnbWVudFBhdGhzIGlzIGFuIGFycmF5IG9mIHNlZ21lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgc2Nyb2xsZWQgdG9cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHNlZ21lbnQgcGF0aCBpcyBub3QgaW4gdGhlIGFycmF5LCB0aGUgc2Nyb2xsIGlzIG5vdCBhcHBsaWVkXG4gICAgICAvLyB1bmxlc3MgdGhlIGFycmF5IGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBzY3JvbGwgaXMgYWx3YXlzIGFwcGxpZWRcbiAgICAgIGlmIChcbiAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAhZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLnNvbWUoKHNjcm9sbFJlZlNlZ21lbnRQYXRoKSA9PlxuICAgICAgICAgIHNlZ21lbnRQYXRoLmV2ZXJ5KChzZWdtZW50LCBpbmRleCkgPT5cbiAgICAgICAgICAgIG1hdGNoU2VnbWVudChzZWdtZW50LCBzY3JvbGxSZWZTZWdtZW50UGF0aFtpbmRleF0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBkb21Ob2RlOlxuICAgICAgICB8IFJldHVyblR5cGU8dHlwZW9mIGdldEhhc2hGcmFnbWVudERvbU5vZGU+XG4gICAgICAgIHwgUmV0dXJuVHlwZTx0eXBlb2YgZmluZERPTU5vZGU+ID0gbnVsbFxuICAgICAgY29uc3QgaGFzaEZyYWdtZW50ID0gZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50XG5cbiAgICAgIGlmIChoYXNoRnJhZ21lbnQpIHtcbiAgICAgICAgZG9tTm9kZSA9IGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50KVxuICAgICAgfVxuXG4gICAgICAvLyBgZmluZERPTU5vZGVgIGlzIHRyaWNreSBiZWNhdXNlIGl0IHJldHVybnMganVzdCB0aGUgZmlyc3QgY2hpbGQgaWYgdGhlIGNvbXBvbmVudCBpcyBhIGZyYWdtZW50LlxuICAgICAgLy8gVGhpcyBhbHJlYWR5IGNhdXNlZCBhIGJ1ZyB3aGVyZSB0aGUgZmlyc3QgY2hpbGQgd2FzIGEgPGxpbmsvPiBpbiBoZWFkLlxuICAgICAgaWYgKCFkb21Ob2RlKSB7XG4gICAgICAgIGRvbU5vZGUgPSBmaW5kRE9NTm9kZSh0aGlzKVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyBET00gbm9kZSB0aGlzIGxheW91dC1yb3V0ZXIgbGV2ZWwgaXMgc2tpcHBlZC4gSXQnbGwgYmUgaGFuZGxlZCBoaWdoZXItdXAgaW4gdGhlIHRyZWUuXG4gICAgICBpZiAoIShkb21Ob2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmeSBpZiB0aGUgZWxlbWVudCBpcyBhIEhUTUxFbGVtZW50IGFuZCBpZiB3ZSB3YW50IHRvIGNvbnNpZGVyIGl0IGZvciBzY3JvbGwgYmVoYXZpb3IuXG4gICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBza2lwcGVkLCB0cnkgdG8gc2VsZWN0IHRoZSBuZXh0IHNpYmxpbmcgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgIHdoaWxlICghKGRvbU5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgc2hvdWxkU2tpcEVsZW1lbnQoZG9tTm9kZSkpIHtcbiAgICAgICAgLy8gTm8gc2libGluZ3MgZm91bmQgdGhhdCBtYXRjaCB0aGUgY3JpdGVyaWEgYXJlIGZvdW5kLCBzbyBoYW5kbGUgc2Nyb2xsIGhpZ2hlciB1cCBpbiB0aGUgdHJlZSBpbnN0ZWFkLlxuICAgICAgICBpZiAoZG9tTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBkb21Ob2RlID0gZG9tTm9kZS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgIH1cblxuICAgICAgLy8gU3RhdGUgaXMgbXV0YXRlZCB0byBlbnN1cmUgdGhhdCB0aGUgZm9jdXMgYW5kIHNjcm9sbCBpcyBhcHBsaWVkIG9ubHkgb25jZS5cbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5ID0gZmFsc2VcbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLmhhc2hGcmFnbWVudCA9IG51bGxcbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLnNlZ21lbnRQYXRocyA9IFtdXG5cbiAgICAgIGhhbmRsZVNtb290aFNjcm9sbChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaGFzaCBzY3JvbGwsIHdlIG9ubHkgbmVlZCB0byBzY3JvbGwgdGhlIGVsZW1lbnQgaW50byB2aWV3XG4gICAgICAgICAgaWYgKGhhc2hGcmFnbWVudCkge1xuICAgICAgICAgICAgOyhkb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxJbnRvVmlldygpXG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCB2aWV3cG9ydCBoZWlnaHQgYmVjYXVzZSByZWFkaW5nIGBjbGllbnRIZWlnaHRgIGNhdXNlcyBhIHJlZmxvdyxcbiAgICAgICAgICAvLyBhbmQgaXQgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBodG1sRWxlbWVudC5jbGllbnRIZWlnaHRcblxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50J3MgdG9wIGVkZ2UgaXMgYWxyZWFkeSBpbiB0aGUgdmlld3BvcnQsIGV4aXQgZWFybHkuXG4gICAgICAgICAgaWYgKHRvcE9mRWxlbWVudEluVmlld3BvcnQoZG9tTm9kZSBhcyBIVE1MRWxlbWVudCwgdmlld3BvcnRIZWlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIHRyeSBzY3JvbGxpbmcgZ28gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHBhZ2VzXG4gICAgICAgICAgLy8gc2Nyb2xsSW50b1ZpZXcoKSBjYWxsZWQgb24gYDxodG1sLz5gIGVsZW1lbnQgc2Nyb2xscyBob3Jpem9udGFsbHkgb24gY2hyb21lIGFuZCBmaXJlZm94ICh0aGF0IHNob3VsZG4ndCBoYXBwZW4pXG4gICAgICAgICAgLy8gV2UgY291bGQgdXNlIGl0IHRvIHNjcm9sbCBob3Jpem9udGFsbHkgZm9sbG93aW5nIFJUTCBidXQgdGhhdCBhbHNvIHNlZW1zIHRvIGJlIGJyb2tlbiAtIGl0IHdpbGwgYWx3YXlzIHNjcm9sbCBsZWZ0XG4gICAgICAgICAgLy8gc2Nyb2xsTGVmdCA9IDAgYWxzbyBzZWVtcyB0byBpZ25vcmUgUlRMIGFuZCBtYW51YWxseSBjaGVja2luZyBmb3IgUlRMIGlzIHRvbyBtdWNoIGhhc3NsZSBzbyB3ZSB3aWxsIHNjcm9sbCBqdXN0IHZlcnRpY2FsbHlcbiAgICAgICAgICBodG1sRWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cbiAgICAgICAgICAvLyBTY3JvbGwgdG8gZG9tTm9kZSBpZiBkb21Ob2RlIGlzIG5vdCBpbiB2aWV3cG9ydCB3aGVuIHNjcm9sbGVkIHRvIHRvcCBvZiBkb2N1bWVudFxuICAgICAgICAgIGlmICghdG9wT2ZFbGVtZW50SW5WaWV3cG9ydChkb21Ob2RlIGFzIEhUTUxFbGVtZW50LCB2aWV3cG9ydEhlaWdodCkpIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBpbnRvIHZpZXcgZG9lc24ndCBzY3JvbGwgaG9yaXpvbnRhbGx5IGJ5IGRlZmF1bHQgd2hlbiBub3QgbmVlZGVkXG4gICAgICAgICAgICA7KGRvbU5vZGUgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSB3aWxsIGZvcmNlIGxheW91dCBieSBxdWVyeWluZyBkb21Ob2RlIHBvc2l0aW9uXG4gICAgICAgICAgZG9udEZvcmNlTGF5b3V0OiB0cnVlLFxuICAgICAgICAgIG9ubHlIYXNoQ2hhbmdlOiBmb2N1c0FuZFNjcm9sbFJlZi5vbmx5SGFzaENoYW5nZSxcbiAgICAgICAgfVxuICAgICAgKVxuXG4gICAgICAvLyBNdXRhdGUgYWZ0ZXIgc2Nyb2xsaW5nIHNvIHRoYXQgaXQgY2FuIGJlIHJlYWQgYnkgYGhhbmRsZVNtb290aFNjcm9sbGBcbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLm9ubHlIYXNoQ2hhbmdlID0gZmFsc2VcblxuICAgICAgLy8gU2V0IGZvY3VzIG9uIHRoZSBlbGVtZW50XG4gICAgICBkb21Ob2RlLmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbCgpXG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgLy8gQmVjYXVzZSB0aGlzIHByb3BlcnR5IGlzIG92ZXJ3cml0dGVuIGluIGhhbmRsZVBvdGVudGlhbFNjcm9sbCBpdCdzIGZpbmUgdG8gYWx3YXlzIHJ1biBpdCB3aGVuIHRydWUgYXMgaXQnbGwgYmUgc2V0IHRvIGZhbHNlIGZvciBzdWJzZXF1ZW50IHJlbmRlcnMuXG4gICAgaWYgKHRoaXMucHJvcHMuZm9jdXNBbmRTY3JvbGxSZWYuYXBwbHkpIHtcbiAgICAgIHRoaXMuaGFuZGxlUG90ZW50aWFsU2Nyb2xsKClcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgfVxufVxuXG5mdW5jdGlvbiBTY3JvbGxBbmRGb2N1c0hhbmRsZXIoe1xuICBzZWdtZW50UGF0aCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59KSB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEdsb2JhbExheW91dFJvdXRlckNvbnRleHQpXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IGdsb2JhbCBsYXlvdXQgcm91dGVyIG5vdCBtb3VudGVkJylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPElubmVyU2Nyb2xsQW5kRm9jdXNIYW5kbGVyXG4gICAgICBzZWdtZW50UGF0aD17c2VnbWVudFBhdGh9XG4gICAgICBmb2N1c0FuZFNjcm9sbFJlZj17Y29udGV4dC5mb2N1c0FuZFNjcm9sbFJlZn1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Jbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlcj5cbiAgKVxufVxuXG4vKipcbiAqIElubmVyTGF5b3V0Um91dGVyIGhhbmRsZXMgcmVuZGVyaW5nIHRoZSBwcm92aWRlZCBzZWdtZW50IGJhc2VkIG9uIHRoZSBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSW5uZXJMYXlvdXRSb3V0ZXIoe1xuICBwYXJhbGxlbFJvdXRlcktleSxcbiAgdXJsLFxuICBjaGlsZE5vZGVzLFxuICBzZWdtZW50UGF0aCxcbiAgdHJlZSxcbiAgLy8gVE9ETy1BUFA6IGltcGxlbWVudCBgPE9mZnNjcmVlbj5gIHdoZW4gYXZhaWxhYmxlLlxuICAvLyBpc0FjdGl2ZSxcbiAgY2FjaGVLZXksXG59OiB7XG4gIHBhcmFsbGVsUm91dGVyS2V5OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgY2hpbGROb2RlczogQ2hpbGRTZWdtZW50TWFwXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxuICB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBpc0FjdGl2ZTogYm9vbGVhblxuICBjYWNoZUtleTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlUm91dGVyQ2FjaGVLZXk+XG59KSB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEdsb2JhbExheW91dFJvdXRlckNvbnRleHQpXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IGdsb2JhbCBsYXlvdXQgcm91dGVyIG5vdCBtb3VudGVkJylcbiAgfVxuXG4gIGNvbnN0IHsgYnVpbGRJZCwgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSwgdHJlZTogZnVsbFRyZWUgfSA9IGNvbnRleHRcblxuICAvLyBSZWFkIHNlZ21lbnQgcGF0aCBmcm9tIHRoZSBwYXJhbGxlbCByb3V0ZXIgY2FjaGUgbm9kZS5cbiAgbGV0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXMuZ2V0KGNhY2hlS2V5KVxuXG4gIC8vIFdoZW4gZGF0YSBpcyBub3QgYXZhaWxhYmxlIGR1cmluZyByZW5kZXJpbmcgY2xpZW50LXNpZGUgd2UgbmVlZCB0byBmZXRjaFxuICAvLyBpdCBmcm9tIHRoZSBzZXJ2ZXIuXG4gIGlmIChjaGlsZE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG5ld0xhenlDYWNoZU5vZGU6IExhenlDYWNoZU5vZGUgPSB7XG4gICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgIHJzYzogbnVsbCxcbiAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgaGVhZDogbnVsbCxcbiAgICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICBsb2FkaW5nOiBudWxsLFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsaWdodCBkYXRhIGZldGNoIGtpY2tlZCBvZmYgZHVyaW5nIHJlbmRlciBhbmQgcHV0IGludG8gdGhlIGNhY2hlLlxuICAgICAqL1xuICAgIGNoaWxkTm9kZSA9IG5ld0xhenlDYWNoZU5vZGVcbiAgICBjaGlsZE5vZGVzLnNldChjYWNoZUtleSwgbmV3TGF6eUNhY2hlTm9kZSlcbiAgfVxuXG4gIC8vIGByc2NgIHJlcHJlc2VudHMgdGhlIHJlbmRlcmFibGUgbm9kZSBmb3IgdGhpcyBzZWdtZW50LlxuXG4gIC8vIElmIHRoaXMgc2VnbWVudCBoYXMgYSBgcHJlZmV0Y2hSc2NgLCBpdCdzIHRoZSBzdGF0aWNhbGx5IHByZWZldGNoZWQgZGF0YS5cbiAgLy8gV2Ugc2hvdWxkIHVzZSB0aGF0IG9uIGluaXRpYWwgcmVuZGVyIGluc3RlYWQgb2YgYHJzY2AuIFRoZW4gd2UnbGwgc3dpdGNoXG4gIC8vIHRvIGByc2NgIHdoZW4gdGhlIGR5bmFtaWMgcmVzcG9uc2Ugc3RyZWFtcyBpbi5cbiAgLy9cbiAgLy8gSWYgbm8gcHJlZmV0Y2ggZGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gd2UgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIGByc2NgLlxuICBjb25zdCByZXNvbHZlZFByZWZldGNoUnNjID1cbiAgICBjaGlsZE5vZGUucHJlZmV0Y2hSc2MgIT09IG51bGwgPyBjaGlsZE5vZGUucHJlZmV0Y2hSc2MgOiBjaGlsZE5vZGUucnNjXG5cbiAgLy8gV2UgdXNlIGB1c2VEZWZlcnJlZFZhbHVlYCB0byBoYW5kbGUgc3dpdGNoaW5nIGJldHdlZW4gdGhlIHByZWZldGNoZWQgYW5kXG4gIC8vIGZpbmFsIHZhbHVlcy4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyByZXR1cm5lZCBvbiBpbml0aWFsIHJlbmRlciwgdGhlbiBpdFxuICAvLyByZS1yZW5kZXJzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAvL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYHVzZURlZmVycmVkVmFsdWVgIGlzIG9ubHlcbiAgLy8gYXZhaWxhYmxlIGluIHRoZSBleHBlcmltZW50YWwgYnVpbGRzLiBXaGVuIGl0cyBkaXNhYmxlZCwgaXQgd2lsbCBhbHdheXNcbiAgLy8gcmV0dXJuIGByc2NgLlxuICBjb25zdCByc2M6IGFueSA9IHVzZURlZmVycmVkVmFsdWUoY2hpbGROb2RlLnJzYywgcmVzb2x2ZWRQcmVmZXRjaFJzYylcblxuICAvLyBgcnNjYCBpcyBlaXRoZXIgYSBSZWFjdCBub2RlIG9yIGEgcHJvbWlzZSBmb3IgYSBSZWFjdCBub2RlLCBleGNlcHQgd2VcbiAgLy8gc3BlY2lhbCBjYXNlIGBudWxsYCB0byByZXByZXNlbnQgdGhhdCB0aGlzIHNlZ21lbnQncyBkYXRhIGlzIG1pc3NpbmcuIElmXG4gIC8vIGl0J3MgYSBwcm9taXNlLCB3ZSBuZWVkIHRvIHVud3JhcCBpdCBzbyB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZVxuICAvLyBkYXRhIGlzIG1pc3NpbmcuXG4gIGNvbnN0IHJlc29sdmVkUnNjOiBSZWFjdC5SZWFjdE5vZGUgPVxuICAgIHR5cGVvZiByc2MgPT09ICdvYmplY3QnICYmIHJzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcnNjLnRoZW4gPT09ICdmdW5jdGlvbidcbiAgICAgID8gdXNlKHJzYylcbiAgICAgIDogcnNjXG5cbiAgaWYgKCFyZXNvbHZlZFJzYykge1xuICAgIC8vIFRoZSBkYXRhIGZvciB0aGlzIHNlZ21lbnQgaXMgbm90IGF2YWlsYWJsZSwgYW5kIHRoZXJlJ3Mgbm8gcGVuZGluZ1xuICAgIC8vIG5hdmlnYXRpb24gdGhhdCB3aWxsIGJlIGFibGUgdG8gZnVsZmlsbCBpdC4gV2UgbmVlZCB0byBmZXRjaCBtb3JlIGZyb21cbiAgICAvLyB0aGUgc2VydmVyIGFuZCBwYXRjaCB0aGUgY2FjaGUuXG5cbiAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFscmVhZHkgYSBwZW5kaW5nIHJlcXVlc3QuXG4gICAgbGV0IGxhenlEYXRhID0gY2hpbGROb2RlLmxhenlEYXRhXG4gICAgaWYgKGxhenlEYXRhID09PSBudWxsKSB7XG4gICAgICAvKipcbiAgICAgICAqIFJvdXRlciBzdGF0ZSB3aXRoIHJlZmV0Y2ggbWFya2VyIGFkZGVkXG4gICAgICAgKi9cbiAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgIGNvbnN0IHJlZmV0Y2hUcmVlID0gd2Fsa0FkZFJlZmV0Y2goWycnLCAuLi5zZWdtZW50UGF0aF0sIGZ1bGxUcmVlKVxuICAgICAgY29uc3QgaW5jbHVkZU5leHRVcmwgPSBoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUoZnVsbFRyZWUpXG4gICAgICBjaGlsZE5vZGUubGF6eURhdGEgPSBsYXp5RGF0YSA9IGZldGNoU2VydmVyUmVzcG9uc2UoXG4gICAgICAgIG5ldyBVUkwodXJsLCBsb2NhdGlvbi5vcmlnaW4pLFxuICAgICAgICB7XG4gICAgICAgICAgZmxpZ2h0Um91dGVyU3RhdGU6IHJlZmV0Y2hUcmVlLFxuICAgICAgICAgIG5leHRVcmw6IGluY2x1ZGVOZXh0VXJsID8gY29udGV4dC5uZXh0VXJsIDogbnVsbCxcbiAgICAgICAgICBidWlsZElkLFxuICAgICAgICB9XG4gICAgICApLnRoZW4oKHNlcnZlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgICAgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSh7XG4gICAgICAgICAgICBwcmV2aW91c1RyZWU6IGZ1bGxUcmVlLFxuICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gc2VydmVyUmVzcG9uc2VcbiAgICAgIH0pXG4gICAgfVxuICAgIC8vIFN1c3BlbmQgaW5maW5pdGVseSBhcyBgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZWAgd2lsbCBjYXVzZSBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSB0cmVlIHRvIGJlIHJlbmRlcmVkLlxuICAgIC8vIEEgZmFsc2V5IGByZXNvbHZlZFJzY2AgaW5kaWNhdGVzIG1pc3NpbmcgZGF0YSAtLSB3ZSBzaG91bGQgbm90IGNvbW1pdCB0aGF0IGJyYW5jaCwgYW5kIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGRhdGEgdG8gYXJyaXZlLlxuICAgIHVzZSh1bnJlc29sdmVkVGhlbmFibGUpIGFzIG5ldmVyXG4gIH1cblxuICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBwb2ludCwgdGhlbiB3ZSBrbm93IHdlIGhhdmUgc29tZXRoaW5nIHdlIGNhbiByZW5kZXIuXG4gIGNvbnN0IHN1YnRyZWUgPSAoXG4gICAgLy8gVGhlIGxheW91dCByb3V0ZXIgY29udGV4dCBuYXJyb3dzIGRvd24gdHJlZSBhbmQgY2hpbGROb2RlcyBhdCBlYWNoIGxldmVsLlxuICAgIDxMYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICB0cmVlOiB0cmVlWzFdW3BhcmFsbGVsUm91dGVyS2V5XSxcbiAgICAgICAgY2hpbGROb2RlczogY2hpbGROb2RlLnBhcmFsbGVsUm91dGVzLFxuICAgICAgICAvLyBUT0RPLUFQUDogb3ZlcnJpZGluZyBvZiB1cmwgZm9yIHBhcmFsbGVsIHJvdXRlc1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgbG9hZGluZzogY2hpbGROb2RlLmxvYWRpbmcsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtyZXNvbHZlZFJzY31cbiAgICA8L0xheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXI+XG4gIClcbiAgLy8gRW5zdXJlIHJvb3QgbGF5b3V0IGlzIG5vdCB3cmFwcGVkIGluIGEgZGl2IGFzIHRoZSByb290IGxheW91dCByZW5kZXJzIGA8aHRtbD5gXG4gIHJldHVybiBzdWJ0cmVlXG59XG5cbi8qKlxuICogUmVuZGVycyBzdXNwZW5zZSBib3VuZGFyeSB3aXRoIHRoZSBwcm92aWRlZCBcImxvYWRpbmdcIiBwcm9wZXJ0eSBhcyB0aGUgZmFsbGJhY2suXG4gKiBJZiBubyBsb2FkaW5nIHByb3BlcnR5IGlzIHByb3ZpZGVkIGl0IHJlbmRlcnMgdGhlIGNoaWxkcmVuIHdpdGhvdXQgYSBzdXNwZW5zZSBib3VuZGFyeS5cbiAqL1xuZnVuY3Rpb24gTG9hZGluZ0JvdW5kYXJ5KHtcbiAgY2hpbGRyZW4sXG4gIGhhc0xvYWRpbmcsXG4gIGxvYWRpbmcsXG4gIGxvYWRpbmdTdHlsZXMsXG4gIGxvYWRpbmdTY3JpcHRzLFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIGhhc0xvYWRpbmc6IGJvb2xlYW5cbiAgbG9hZGluZz86IFJlYWN0LlJlYWN0Tm9kZVxuICBsb2FkaW5nU3R5bGVzPzogUmVhY3QuUmVhY3ROb2RlXG4gIGxvYWRpbmdTY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlXG59KTogSlNYLkVsZW1lbnQge1xuICAvLyBXZSBoYXZlIGFuIGV4cGxpY2l0IHByb3AgZm9yIGNoZWNraW5nIGlmIGBsb2FkaW5nYCBpcyBwcm92aWRlZCwgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gYSBsb2FkaW5nXG4gIC8vIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYG51bGxgIC8gYHVuZGVmaW5lZGAsIHZzIG5vdCBoYXZpbmcgYSBsb2FkaW5nIGNvbXBvbmVudCBhdCBhbGwuXG4gIGlmIChoYXNMb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXNwZW5zZVxuICAgICAgICBmYWxsYmFjaz17XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtsb2FkaW5nU3R5bGVzfVxuICAgICAgICAgICAge2xvYWRpbmdTY3JpcHRzfVxuICAgICAgICAgICAge2xvYWRpbmd9XG4gICAgICAgICAgPC8+XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9TdXNwZW5zZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gPD57Y2hpbGRyZW59PC8+XG59XG5cbi8qKlxuICogT3V0ZXJMYXlvdXRSb3V0ZXIgaGFuZGxlcyB0aGUgY3VycmVudCBzZWdtZW50IGFzIHdlbGwgYXMgPE9mZnNjcmVlbj4gcmVuZGVyaW5nIG9mIG90aGVyIHNlZ21lbnRzLlxuICogSXQgY2FuIGJlIHJlbmRlcmVkIG5leHQgdG8gZWFjaCBvdGhlciB3aXRoIGEgZGlmZmVyZW50IGBwYXJhbGxlbFJvdXRlcktleWAsIGFsbG93aW5nIGZvciBQYXJhbGxlbCByb3V0ZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE91dGVyTGF5b3V0Um91dGVyKHtcbiAgcGFyYWxsZWxSb3V0ZXJLZXksXG4gIHNlZ21lbnRQYXRoLFxuICBlcnJvcixcbiAgZXJyb3JTdHlsZXMsXG4gIGVycm9yU2NyaXB0cyxcbiAgdGVtcGxhdGVTdHlsZXMsXG4gIHRlbXBsYXRlU2NyaXB0cyxcbiAgdGVtcGxhdGUsXG4gIG5vdEZvdW5kLFxuICBub3RGb3VuZFN0eWxlcyxcbn06IHtcbiAgcGFyYWxsZWxSb3V0ZXJLZXk6IHN0cmluZ1xuICBzZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGhcbiAgZXJyb3I6IEVycm9yQ29tcG9uZW50IHwgdW5kZWZpbmVkXG4gIGVycm9yU3R5bGVzOiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWRcbiAgZXJyb3JTY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWRcbiAgdGVtcGxhdGVTdHlsZXM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICB0ZW1wbGF0ZVNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICB0ZW1wbGF0ZTogUmVhY3QuUmVhY3ROb2RlXG4gIG5vdEZvdW5kOiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWRcbiAgbm90Rm91bmRTdHlsZXM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxufSkge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChMYXlvdXRSb3V0ZXJDb250ZXh0KVxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCBleHBlY3RlZCBsYXlvdXQgcm91dGVyIHRvIGJlIG1vdW50ZWQnKVxuICB9XG5cbiAgY29uc3QgeyBjaGlsZE5vZGVzLCB0cmVlLCB1cmwsIGxvYWRpbmcgfSA9IGNvbnRleHRcblxuICAvLyBHZXQgdGhlIGN1cnJlbnQgcGFyYWxsZWxSb3V0ZXIgY2FjaGUgbm9kZVxuICBsZXQgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyID0gY2hpbGROb2Rlcy5nZXQocGFyYWxsZWxSb3V0ZXJLZXkpXG4gIC8vIElmIHRoZSBwYXJhbGxlbCByb3V0ZXIgY2FjaGUgbm9kZSBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC5cbiAgLy8gVGhpcyB3cml0ZXMgdG8gdGhlIGNhY2hlIHdoZW4gdGhlcmUgaXMgbm8gaXRlbSBpbiB0aGUgY2FjaGUgeWV0LiBJdCBuZXZlciAqb3ZlcndyaXRlcyogZXhpc3RpbmcgY2FjaGUgaXRlbXMgd2hpY2ggaXMgd2h5IGl0J3Mgc2FmZSBpbiBjb25jdXJyZW50IG1vZGUuXG4gIGlmICghY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyKSB7XG4gICAgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyID0gbmV3IE1hcCgpXG4gICAgY2hpbGROb2Rlcy5zZXQocGFyYWxsZWxSb3V0ZXJLZXksIGNoaWxkTm9kZXNGb3JQYXJhbGxlbFJvdXRlcilcbiAgfVxuXG4gIC8vIEdldCB0aGUgYWN0aXZlIHNlZ21lbnQgaW4gdGhlIHRyZWVcbiAgLy8gVGhlIHJlYXNvbiBhcnJheXMgYXJlIHVzZWQgaW4gdGhlIGRhdGEgZm9ybWF0IGlzIHRoYXQgdGhlc2UgYXJlIHRyYW5zZmVycmVkIGZyb20gdGhlIHNlcnZlciB0byB0aGUgYnJvd3NlciBzbyBpdCdzIG9wdGltaXplZCB0byBzYXZlIGJ5dGVzLlxuICBjb25zdCB0cmVlU2VnbWVudCA9IHRyZWVbMV1bcGFyYWxsZWxSb3V0ZXJLZXldWzBdXG5cbiAgLy8gSWYgc2VnbWVudCBpcyBhbiBhcnJheSBpdCdzIGEgZHluYW1pYyByb3V0ZSBhbmQgd2Ugd2FudCB0byByZWFkIHRoZSBkeW5hbWljIHJvdXRlIHZhbHVlIGFzIHRoZSBzZWdtZW50IHRvIGdldCBmcm9tIHRoZSBjYWNoZS5cbiAgY29uc3QgY3VycmVudENoaWxkU2VnbWVudFZhbHVlID0gZ2V0U2VnbWVudFZhbHVlKHRyZWVTZWdtZW50KVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoaWNoIHNlZ21lbnRzIHRvIGtlZXAgcmVuZGVyaW5nLCBhbGwgc2VnbWVudHMgdGhhdCBhcmUgbm90IGFjdGl2ZSB3aWxsIGJlIHdyYXBwZWQgaW4gYDxPZmZzY3JlZW4+YC5cbiAgICovXG4gIC8vIFRPRE8tQVBQOiBBZGQgaGFuZGxpbmcgb2YgYDxPZmZzY3JlZW4+YCB3aGVuIGl0J3MgYXZhaWxhYmxlLlxuICBjb25zdCBwcmVzZXJ2ZWRTZWdtZW50czogU2VnbWVudFtdID0gW3RyZWVTZWdtZW50XVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtwcmVzZXJ2ZWRTZWdtZW50cy5tYXAoKHByZXNlcnZlZFNlZ21lbnQpID0+IHtcbiAgICAgICAgY29uc3QgcHJlc2VydmVkU2VnbWVudFZhbHVlID0gZ2V0U2VnbWVudFZhbHVlKHByZXNlcnZlZFNlZ21lbnQpXG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkocHJlc2VydmVkU2VnbWVudClcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8qXG4gICAgICAgICAgICAtIEVycm9yIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIGVycm9yIGJvdW5kYXJ5IGlmIGVycm9yIGNvbXBvbmVudCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGVycm9yIHN0YXRlLlxuICAgICAgICAgICAgLSBMb2FkaW5nIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIHN1c3BlbnNlIGJvdW5kYXJ5IGlmIGxvYWRpbmcgY29tcG9uZW50cyBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgIC0gUGFzc2VkIHRvIHRoZSByb3V0ZXIgZHVyaW5nIHJlbmRlcmluZyB0byBlbnN1cmUgaXQgY2FuIGJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkIHdoZW4gc3VzcGVuZGluZyBvbiBhIEZsaWdodCBmZXRjaC5cbiAgICAgICAgICAqL1xuICAgICAgICAgIDxUZW1wbGF0ZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICAgIGtleT17Y3JlYXRlUm91dGVyQ2FjaGVLZXkocHJlc2VydmVkU2VnbWVudCwgdHJ1ZSl9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIDxTY3JvbGxBbmRGb2N1c0hhbmRsZXIgc2VnbWVudFBhdGg9e3NlZ21lbnRQYXRofT5cbiAgICAgICAgICAgICAgICA8RXJyb3JCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgZXJyb3JDb21wb25lbnQ9e2Vycm9yfVxuICAgICAgICAgICAgICAgICAgZXJyb3JTdHlsZXM9e2Vycm9yU3R5bGVzfVxuICAgICAgICAgICAgICAgICAgZXJyb3JTY3JpcHRzPXtlcnJvclNjcmlwdHN9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPExvYWRpbmdCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICBoYXNMb2FkaW5nPXtCb29sZWFuKGxvYWRpbmcpfVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nPy5bMF19XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTdHlsZXM9e2xvYWRpbmc/LlsxXX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1NjcmlwdHM9e2xvYWRpbmc/LlsyXX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPE5vdEZvdW5kQm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZD17bm90Rm91bmR9XG4gICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmRTdHlsZXM9e25vdEZvdW5kU3R5bGVzfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFJlZGlyZWN0Qm91bmRhcnk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5uZXJMYXlvdXRSb3V0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXJLZXk9e3BhcmFsbGVsUm91dGVyS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9e3VybH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZT17dHJlZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2Rlcz17Y2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyIX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudFBhdGg9e3NlZ21lbnRQYXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUtleT17Y2FjaGVLZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hpbGRTZWdtZW50VmFsdWUgPT09IHByZXNlcnZlZFNlZ21lbnRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUmVkaXJlY3RCb3VuZGFyeT5cbiAgICAgICAgICAgICAgICAgICAgPC9Ob3RGb3VuZEJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgPC9Mb2FkaW5nQm91bmRhcnk+XG4gICAgICAgICAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgICA8L1Njcm9sbEFuZEZvY3VzSGFuZGxlcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGVtcGxhdGVTdHlsZXN9XG4gICAgICAgICAgICB7dGVtcGxhdGVTY3JpcHRzfVxuICAgICAgICAgICAge3RlbXBsYXRlfVxuICAgICAgICAgIDwvVGVtcGxhdGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIk91dGVyTGF5b3V0Um91dGVyIiwid2Fsa0FkZFJlZmV0Y2giLCJzZWdtZW50UGF0aFRvV2FsayIsInRyZWVUb1JlY3JlYXRlIiwic2VnbWVudCIsInBhcmFsbGVsUm91dGVLZXkiLCJpc0xhc3QiLCJsZW5ndGgiLCJtYXRjaFNlZ21lbnQiLCJoYXNPd25Qcm9wZXJ0eSIsInN1YlRyZWUiLCJ1bmRlZmluZWQiLCJzbGljZSIsIl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSIsIlJlYWN0RE9NIiwiZmluZERPTU5vZGUiLCJpbnN0YW5jZSIsIndpbmRvdyIsImludGVybmFsX3JlYWN0RE9NZmluZERPTU5vZGUiLCJyZWN0UHJvcGVydGllcyIsInNob3VsZFNraXBFbGVtZW50IiwiZWxlbWVudCIsImluY2x1ZGVzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInBvc2l0aW9uIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZXZlcnkiLCJpdGVtIiwidG9wT2ZFbGVtZW50SW5WaWV3cG9ydCIsInZpZXdwb3J0SGVpZ2h0IiwidG9wIiwiZ2V0SGFzaEZyYWdtZW50RG9tTm9kZSIsImhhc2hGcmFnbWVudCIsImRvY3VtZW50IiwiYm9keSIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJJbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkTW91bnQiLCJoYW5kbGVQb3RlbnRpYWxTY3JvbGwiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcm9wcyIsImZvY3VzQW5kU2Nyb2xsUmVmIiwiYXBwbHkiLCJyZW5kZXIiLCJjaGlsZHJlbiIsInNlZ21lbnRQYXRoIiwic2VnbWVudFBhdGhzIiwic29tZSIsInNjcm9sbFJlZlNlZ21lbnRQYXRoIiwiaW5kZXgiLCJkb21Ob2RlIiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaGFuZGxlU21vb3RoU2Nyb2xsIiwic2Nyb2xsSW50b1ZpZXciLCJodG1sRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudEhlaWdodCIsInNjcm9sbFRvcCIsImRvbnRGb3JjZUxheW91dCIsIm9ubHlIYXNoQ2hhbmdlIiwiZm9jdXMiLCJTY3JvbGxBbmRGb2N1c0hhbmRsZXIiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJFcnJvciIsIklubmVyTGF5b3V0Um91dGVyIiwicGFyYWxsZWxSb3V0ZXJLZXkiLCJ1cmwiLCJjaGlsZE5vZGVzIiwidHJlZSIsImNhY2hlS2V5IiwiYnVpbGRJZCIsImNoYW5nZUJ5U2VydmVyUmVzcG9uc2UiLCJmdWxsVHJlZSIsImNoaWxkTm9kZSIsImdldCIsIm5ld0xhenlDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwiaGVhZCIsInByZWZldGNoSGVhZCIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwibG9hZGluZyIsInNldCIsInJlc29sdmVkUHJlZmV0Y2hSc2MiLCJ1c2VEZWZlcnJlZFZhbHVlIiwicmVzb2x2ZWRSc2MiLCJ0aGVuIiwidXNlIiwicmVmZXRjaFRyZWUiLCJpbmNsdWRlTmV4dFVybCIsImhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsInNlcnZlclJlc3BvbnNlIiwic3RhcnRUcmFuc2l0aW9uIiwicHJldmlvdXNUcmVlIiwidW5yZXNvbHZlZFRoZW5hYmxlIiwic3VidHJlZSIsIkxheW91dFJvdXRlckNvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiTG9hZGluZ0JvdW5kYXJ5IiwiaGFzTG9hZGluZyIsImxvYWRpbmdTdHlsZXMiLCJsb2FkaW5nU2NyaXB0cyIsIlN1c3BlbnNlIiwiZmFsbGJhY2siLCJlcnJvciIsImVycm9yU3R5bGVzIiwiZXJyb3JTY3JpcHRzIiwidGVtcGxhdGVTdHlsZXMiLCJ0ZW1wbGF0ZVNjcmlwdHMiLCJ0ZW1wbGF0ZSIsIm5vdEZvdW5kIiwibm90Rm91bmRTdHlsZXMiLCJjaGlsZE5vZGVzRm9yUGFyYWxsZWxSb3V0ZXIiLCJ0cmVlU2VnbWVudCIsImN1cnJlbnRDaGlsZFNlZ21lbnRWYWx1ZSIsImdldFNlZ21lbnRWYWx1ZSIsInByZXNlcnZlZFNlZ21lbnRzIiwibWFwIiwicHJlc2VydmVkU2VnbWVudCIsInByZXNlcnZlZFNlZ21lbnRWYWx1ZSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiVGVtcGxhdGVDb250ZXh0IiwiRXJyb3JCb3VuZGFyeSIsImVycm9yQ29tcG9uZW50IiwiQm9vbGVhbiIsIk5vdEZvdW5kQm91bmRhcnkiLCJSZWRpcmVjdEJvdW5kYXJ5IiwiaXNBY3RpdmUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/layout-router.js\n");
|
161
|
+
eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return OuterLayoutRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\"));\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js\");\nconst _fetchserverresponse = __webpack_require__(/*! ./router-reducer/fetch-server-response */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _unresolvedthenable = __webpack_require__(/*! ./unresolved-thenable */ \"(ssr)/./node_modules/next/dist/client/components/unresolved-thenable.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _matchsegments = __webpack_require__(/*! ./match-segments */ \"(ssr)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ../../shared/lib/router/utils/handle-smooth-scroll */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(ssr)/./node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _notfoundboundary = __webpack_require__(/*! ./not-found-boundary */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./router-reducer/create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./router-reducer/reducers/has-interception-route-in-current-tree */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\n/**\n * Add refetch marker to router state at the point of the current layout segment.\n * This ensures the response returned is not further down than the current layout segment.\n */ function walkAddRefetch(segmentPathToWalk, treeToRecreate) {\n if (segmentPathToWalk) {\n const [segment, parallelRouteKey] = segmentPathToWalk;\n const isLast = segmentPathToWalk.length === 2;\n if ((0, _matchsegments.matchSegment)(treeToRecreate[0], segment)) {\n if (treeToRecreate[1].hasOwnProperty(parallelRouteKey)) {\n if (isLast) {\n const subTree = walkAddRefetch(undefined, treeToRecreate[1][parallelRouteKey]);\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: [\n subTree[0],\n subTree[1],\n subTree[2],\n 'refetch'\n ]\n }\n ];\n }\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: walkAddRefetch(segmentPathToWalk.slice(2), treeToRecreate[1][parallelRouteKey])\n }\n ];\n }\n }\n }\n return treeToRecreate;\n}\nconst __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = _reactdom.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n// TODO-APP: Replace with new React API for finding dom nodes without a `ref` when available\n/**\n * Wraps ReactDOM.findDOMNode with additional logic to hide React Strict Mode warning\n */ function findDOMNode(instance) {\n // Tree-shake for server bundle\n if (true) return null;\n // __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.findDOMNode is null during module init.\n // We need to lazily reference it.\n const internal_reactDOMfindDOMNode = __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.findDOMNode;\n return internal_reactDOMfindDOMNode(instance);\n}\nconst rectProperties = [\n 'bottom',\n 'height',\n 'left',\n 'right',\n 'top',\n 'width',\n 'x',\n 'y'\n];\n/**\n * Check if a HTMLElement is hidden or fixed/sticky position\n */ function shouldSkipElement(element) {\n // we ignore fixed or sticky positioned elements since they'll likely pass the \"in-viewport\" check\n // and will result in a situation we bail on scroll because of something like a fixed nav,\n // even though the actual page content is offscreen\n if ([\n 'sticky',\n 'fixed'\n ].includes(getComputedStyle(element).position)) {\n if (true) {\n console.warn('Skipping auto-scroll behavior due to `position: sticky` or `position: fixed` on element:', element);\n }\n return true;\n }\n // Uses `getBoundingClientRect` to check if the element is hidden instead of `offsetParent`\n // because `offsetParent` doesn't consider document/body\n const rect = element.getBoundingClientRect();\n return rectProperties.every((item)=>rect[item] === 0);\n}\n/**\n * Check if the top corner of the HTMLElement is in the viewport.\n */ function topOfElementInViewport(element, viewportHeight) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.top <= viewportHeight;\n}\n/**\n * Find the DOM node for a hash fragment.\n * If `top` the page has to scroll to the top of the page. This mirrors the browser's behavior.\n * If the hash fragment is an id, the page has to scroll to the element with that id.\n * If the hash fragment is a name, the page has to scroll to the first element with that name.\n */ function getHashFragmentDomNode(hashFragment) {\n // If the hash fragment is `top` the page has to scroll to the top of the page.\n if (hashFragment === 'top') {\n return document.body;\n }\n var _document_getElementById;\n // If the hash fragment is an id, the page has to scroll to the element with that id.\n return (_document_getElementById = document.getElementById(hashFragment)) != null ? _document_getElementById : document.getElementsByName(hashFragment)[0];\n}\nclass InnerScrollAndFocusHandler extends _react.default.Component {\n componentDidMount() {\n this.handlePotentialScroll();\n }\n componentDidUpdate() {\n // Because this property is overwritten in handlePotentialScroll it's fine to always run it when true as it'll be set to false for subsequent renders.\n if (this.props.focusAndScrollRef.apply) {\n this.handlePotentialScroll();\n }\n }\n render() {\n return this.props.children;\n }\n constructor(...args){\n super(...args);\n this.handlePotentialScroll = ()=>{\n // Handle scroll and focus, it's only applied once in the first useEffect that triggers that changed.\n const { focusAndScrollRef, segmentPath } = this.props;\n if (focusAndScrollRef.apply) {\n // segmentPaths is an array of segment paths that should be scrolled to\n // if the current segment path is not in the array, the scroll is not applied\n // unless the array is empty, in which case the scroll is always applied\n if (focusAndScrollRef.segmentPaths.length !== 0 && !focusAndScrollRef.segmentPaths.some((scrollRefSegmentPath)=>segmentPath.every((segment, index)=>(0, _matchsegments.matchSegment)(segment, scrollRefSegmentPath[index])))) {\n return;\n }\n let domNode = null;\n const hashFragment = focusAndScrollRef.hashFragment;\n if (hashFragment) {\n domNode = getHashFragmentDomNode(hashFragment);\n }\n // `findDOMNode` is tricky because it returns just the first child if the component is a fragment.\n // This already caused a bug where the first child was a <link/> in head.\n if (!domNode) {\n domNode = findDOMNode(this);\n }\n // If there is no DOM node this layout-router level is skipped. It'll be handled higher-up in the tree.\n if (!(domNode instanceof Element)) {\n return;\n }\n // Verify if the element is a HTMLElement and if we want to consider it for scroll behavior.\n // If the element is skipped, try to select the next sibling and try again.\n while(!(domNode instanceof HTMLElement) || shouldSkipElement(domNode)){\n // No siblings found that match the criteria are found, so handle scroll higher up in the tree instead.\n if (domNode.nextElementSibling === null) {\n return;\n }\n domNode = domNode.nextElementSibling;\n }\n // State is mutated to ensure that the focus and scroll is applied only once.\n focusAndScrollRef.apply = false;\n focusAndScrollRef.hashFragment = null;\n focusAndScrollRef.segmentPaths = [];\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n // In case of hash scroll, we only need to scroll the element into view\n if (hashFragment) {\n domNode.scrollIntoView();\n return;\n }\n // Store the current viewport height because reading `clientHeight` causes a reflow,\n // and it won't change during this function.\n const htmlElement = document.documentElement;\n const viewportHeight = htmlElement.clientHeight;\n // If the element's top edge is already in the viewport, exit early.\n if (topOfElementInViewport(domNode, viewportHeight)) {\n return;\n }\n // Otherwise, try scrolling go the top of the document to be backward compatible with pages\n // scrollIntoView() called on `<html/>` element scrolls horizontally on chrome and firefox (that shouldn't happen)\n // We could use it to scroll horizontally following RTL but that also seems to be broken - it will always scroll left\n // scrollLeft = 0 also seems to ignore RTL and manually checking for RTL is too much hassle so we will scroll just vertically\n htmlElement.scrollTop = 0;\n // Scroll to domNode if domNode is not in viewport when scrolled to top of document\n if (!topOfElementInViewport(domNode, viewportHeight)) {\n domNode.scrollIntoView();\n }\n }, {\n // We will force layout by querying domNode position\n dontForceLayout: true,\n onlyHashChange: focusAndScrollRef.onlyHashChange\n });\n // Mutate after scrolling so that it can be read by `handleSmoothScroll`\n focusAndScrollRef.onlyHashChange = false;\n // Set focus on the element\n domNode.focus();\n }\n };\n }\n}\nfunction ScrollAndFocusHandler(param) {\n let { segmentPath, children } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error('invariant global layout router not mounted');\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerScrollAndFocusHandler, {\n segmentPath: segmentPath,\n focusAndScrollRef: context.focusAndScrollRef,\n children: children\n });\n}\n/**\n * InnerLayoutRouter handles rendering the provided segment based on the cache.\n */ function InnerLayoutRouter(param) {\n let { parallelRouterKey, url, childNodes, segmentPath, tree, // isActive,\n cacheKey } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error('invariant global layout router not mounted');\n }\n const { buildId, changeByServerResponse, tree: fullTree } = context;\n // Read segment path from the parallel router cache node.\n let childNode = childNodes.get(cacheKey);\n // When data is not available during rendering client-side we need to fetch\n // it from the server.\n if (childNode === undefined) {\n const newLazyCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading: null\n };\n /**\n * Flight data fetch kicked off during render and put into the cache.\n */ childNode = newLazyCacheNode;\n childNodes.set(cacheKey, newLazyCacheNode);\n }\n // `rsc` represents the renderable node for this segment.\n // If this segment has a `prefetchRsc`, it's the statically prefetched data.\n // We should use that on initial render instead of `rsc`. Then we'll switch\n // to `rsc` when the dynamic response streams in.\n //\n // If no prefetch data is available, then we go straight to rendering `rsc`.\n const resolvedPrefetchRsc = childNode.prefetchRsc !== null ? childNode.prefetchRsc : childNode.rsc;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n //\n // @ts-expect-error The second argument to `useDeferredValue` is only\n // available in the experimental builds. When its disabled, it will always\n // return `rsc`.\n const rsc = (0, _react.useDeferredValue)(childNode.rsc, resolvedPrefetchRsc);\n // `rsc` is either a React node or a promise for a React node, except we\n // special case `null` to represent that this segment's data is missing. If\n // it's a promise, we need to unwrap it so we can determine whether or not the\n // data is missing.\n const resolvedRsc = typeof rsc === 'object' && rsc !== null && typeof rsc.then === 'function' ? (0, _react.use)(rsc) : rsc;\n if (!resolvedRsc) {\n // The data for this segment is not available, and there's no pending\n // navigation that will be able to fulfill it. We need to fetch more from\n // the server and patch the cache.\n // Check if there's already a pending request.\n let lazyData = childNode.lazyData;\n if (lazyData === null) {\n /**\n * Router state with refetch marker added\n */ // TODO-APP: remove ''\n const refetchTree = walkAddRefetch([\n '',\n ...segmentPath\n ], fullTree);\n const includeNextUrl = (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(fullTree);\n childNode.lazyData = lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(url, location.origin), {\n flightRouterState: refetchTree,\n nextUrl: includeNextUrl ? context.nextUrl : null,\n buildId\n }).then((serverResponse)=>{\n (0, _react.startTransition)(()=>{\n changeByServerResponse({\n previousTree: fullTree,\n serverResponse\n });\n });\n return serverResponse;\n });\n }\n // Suspend infinitely as `changeByServerResponse` will cause a different part of the tree to be rendered.\n // A falsey `resolvedRsc` indicates missing data -- we should not commit that branch, and we need to wait for the data to arrive.\n (0, _react.use)(_unresolvedthenable.unresolvedThenable);\n }\n // If we get to this point, then we know we have something we can render.\n const subtree = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: {\n tree: tree[1][parallelRouterKey],\n childNodes: childNode.parallelRoutes,\n // TODO-APP: overriding of url for parallel routes\n url: url,\n loading: childNode.loading\n },\n children: resolvedRsc\n });\n // Ensure root layout is not wrapped in a div as the root layout renders `<html>`\n return subtree;\n}\n/**\n * Renders suspense boundary with the provided \"loading\" property as the fallback.\n * If no loading property is provided it renders the children without a suspense boundary.\n */ function LoadingBoundary(param) {\n let { children, hasLoading, loading, loadingStyles, loadingScripts } = param;\n // We have an explicit prop for checking if `loading` is provided, to disambiguate between a loading\n // component that returns `null` / `undefined`, vs not having a loading component at all.\n if (hasLoading) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, {\n fallback: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n loadingStyles,\n loadingScripts,\n loading\n ]\n }),\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nfunction OuterLayoutRouter(param) {\n let { parallelRouterKey, segmentPath, error, errorStyles, errorScripts, templateStyles, templateScripts, template, notFound, notFoundStyles } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n if (!context) {\n throw new Error('invariant expected layout router to be mounted');\n }\n const { childNodes, tree, url, loading } = context;\n // Get the current parallelRouter cache node\n let childNodesForParallelRouter = childNodes.get(parallelRouterKey);\n // If the parallel router cache node does not exist yet, create it.\n // This writes to the cache when there is no item in the cache yet. It never *overwrites* existing cache items which is why it's safe in concurrent mode.\n if (!childNodesForParallelRouter) {\n childNodesForParallelRouter = new Map();\n childNodes.set(parallelRouterKey, childNodesForParallelRouter);\n }\n // Get the active segment in the tree\n // The reason arrays are used in the data format is that these are transferred from the server to the browser so it's optimized to save bytes.\n const treeSegment = tree[1][parallelRouterKey][0];\n // If segment is an array it's a dynamic route and we want to read the dynamic route value as the segment to get from the cache.\n const currentChildSegmentValue = (0, _getsegmentvalue.getSegmentValue)(treeSegment);\n /**\n * Decides which segments to keep rendering, all segments that are not active will be wrapped in `<Offscreen>`.\n */ // TODO-APP: Add handling of `<Offscreen>` when it's available.\n const preservedSegments = [\n treeSegment\n ];\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: preservedSegments.map((preservedSegment)=>{\n const preservedSegmentValue = (0, _getsegmentvalue.getSegmentValue)(preservedSegment);\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(preservedSegment);\n return(/*\n - Error boundary\n - Only renders error boundary if error component is provided.\n - Rendered for each segment to ensure they have their own error state.\n - Loading boundary\n - Only renders suspense boundary if loading components is provided.\n - Rendered for each segment to ensure they have their own loading state.\n - Passed to the router during rendering to ensure it can be immediately rendered when suspending on a Flight fetch.\n */ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_approutercontextsharedruntime.TemplateContext.Provider, {\n value: /*#__PURE__*/ (0, _jsxruntime.jsx)(ScrollAndFocusHandler, {\n segmentPath: segmentPath,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n errorComponent: error,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingBoundary, {\n hasLoading: Boolean(loading),\n loading: loading == null ? void 0 : loading[0],\n loadingStyles: loading == null ? void 0 : loading[1],\n loadingScripts: loading == null ? void 0 : loading[2],\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_notfoundboundary.NotFoundBoundary, {\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_redirectboundary.RedirectBoundary, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerLayoutRouter, {\n parallelRouterKey: parallelRouterKey,\n url: url,\n tree: tree,\n childNodes: childNodesForParallelRouter,\n segmentPath: segmentPath,\n cacheKey: cacheKey,\n isActive: currentChildSegmentValue === preservedSegmentValue\n })\n })\n })\n })\n })\n }),\n children: [\n templateStyles,\n templateScripts,\n template\n ]\n }, (0, _createroutercachekey.createRouterCacheKey)(preservedSegment, true)));\n })\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=layout-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O2VBMGV3QkE7Ozs7Ozs7OEtBcGRIOytDQUtkO3FDQUM2QjtnREFDRDsrQ0FDTDsyQ0FDRDt1SUFDTTsrQ0FDRjs4Q0FDQTs2Q0FDRDsrTEFDSzs4TEFDYTtBQUVsRDs7OztJQVFFLElBQUlFLEtBQUFBLGNBQW1CO1FBQ3JCLE1BQU0sQ0FBQ0UsU0FBU0MsR0FBQUE7UUFDaEIsTUFBTUMsQ0FBQUEsUUFBU0osQ0FBQUEsaUJBQWtCSyxHQUFBQSxHQUFNLEtBQUs7UUFFNUMsSUFBSUMsRUFBQUEsRUFBQUEsT0FBQUEsa0JBQUFBLEVBQVksRUFBQ0wsRUFBQUEsS0FBQUE7WUFDZixJQUFJQSxjQUFjLENBQUMsRUFBRSxDQUFDTSxTQUFBQSxFQUFBQSxHQUFjLENBQUNKLFVBQUFBLENBQUFBLEVBQUFBLEVBQUFBLElBQW1CO2dCQUN0RCxJQUFJQyxRQUFRO29CQUNWLE1BQU1JLEVBQUFBO29CQUlOLE9BQU87d0JBQ0xQLEdBQUFBO3dCQUNBOzs0QkFFRSxDQUFDRSxFQUFBQSxjQUFBQSxDQUFpQixFQUFFO2dDQUNsQkssT0FBTyxDQUFDLEVBQUU7Z0NBQ1ZBLE9BQU8sQ0FBQyxFQUFFO2dDQUNWQSxPQUFPLENBQUMsRUFBRTtnQ0FDVjtnQ0FDRDs2QkFDSDt3QkFDRDtxQkFDSDtnQkFFQTtvQkFDRVAsR0FBQUE7b0JBQ0E7O3dCQUVFLENBQUNFLEVBQUFBLGNBQUFBLENBQWlCLEVBQUVKO3dCQUl0QjtvQkFDRDtpQkFDSDtZQUNGO1FBQ0Y7SUFFQTtJQUNGO0FBRUE7QUFJQSw0RkFBNEY7QUFDNUY7OztJQU1FLCtCQUErQjtJQUMvQixJQUFJLE9BQU9nQixXQUFXO0lBRXRCO0lBQ0Esa0NBQWtDO0lBQ2xDLE1BQU1DLDRCQUFBQTtJQUVOLE9BQU9BLDZCQUE2QkYsQ0FBQUEsNkRBQUFBLFdBQUFBO0lBQ3RDO0FBRUE7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QUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxNQUFBQSxDQUFTLENBQUMsRUFBRTtzQ0FFNUIsbUNBQUNtRCxLQUFBQSxDQUFBQSxFQUFBQTtnQ0FDQ2YsTUFBQUEsSUFBVUEsT0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsWUFBQUEsR0FBQUEsRUFBQUEsa0JBQUFBLGdCQUFBQSxFQUFBQTtnQ0FDVkMsVUFBQUEsTUFBZ0JBOzBDQUVoQjswQ0FDRSx1Q0FBQ3hELGNBQUFBLGdCQUFBQSxFQUFBQTt3Q0FDQ0MsTUFBQUEsV0FBQUEsRUFBbUJBLENBQUFBLENBQUFBLEdBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLG1CQUFBQTt3Q0FDbkJDLEtBQUtBLGNBQUFBO3dDQUNMRSxLQUFBQSxDQUFNQTt3Q0FDTkQsTUFBQUE7d0NBQ0ExQixZQUFBQSxDQUFhQTt3Q0FDYjRCLFVBQVVBLEdBQUFBO3dDQUNWbUUsVUFDRWI7Ozs7Ozs7O29CQVVmUCxNQUFBQTtvQkFDQUM7b0JBQ0FDOztpQkF2Q0lXO1lBMENYOztJQUdOIiwic291cmNlcyI6WyJDOlxcVXNlcnNcXFBpbmVzdWNjZWVkXFxzcmNcXGNsaWVudFxcY29tcG9uZW50c1xcbGF5b3V0LXJvdXRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2hpbGRTZWdtZW50TWFwLFxuICBMYXp5Q2FjaGVOb2RlLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIEZsaWdodFNlZ21lbnRQYXRoLFxuICBTZWdtZW50LFxufSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgRXJyb3JDb21wb25lbnQgfSBmcm9tICcuL2Vycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IHR5cGUgeyBGb2N1c0FuZFNjcm9sbFJlZiB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMnXG5cbmltcG9ydCBSZWFjdCwge1xuICB1c2VDb250ZXh0LFxuICB1c2UsXG4gIHN0YXJ0VHJhbnNpdGlvbixcbiAgU3VzcGVuc2UsXG4gIHVzZURlZmVycmVkVmFsdWUsXG4gIHR5cGUgSlNYLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQge1xuICBMYXlvdXRSb3V0ZXJDb250ZXh0LFxuICBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0LFxuICBUZW1wbGF0ZUNvbnRleHQsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZmV0Y2hTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuaW1wb3J0IHsgdW5yZXNvbHZlZFRoZW5hYmxlIH0gZnJvbSAnLi91bnJlc29sdmVkLXRoZW5hYmxlJ1xuaW1wb3J0IHsgRXJyb3JCb3VuZGFyeSB9IGZyb20gJy4vZXJyb3ItYm91bmRhcnknXG5pbXBvcnQgeyBtYXRjaFNlZ21lbnQgfSBmcm9tICcuL21hdGNoLXNlZ21lbnRzJ1xuaW1wb3J0IHsgaGFuZGxlU21vb3RoU2Nyb2xsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaGFuZGxlLXNtb290aC1zY3JvbGwnXG5pbXBvcnQgeyBSZWRpcmVjdEJvdW5kYXJ5IH0gZnJvbSAnLi9yZWRpcmVjdC1ib3VuZGFyeSdcbmltcG9ydCB7IE5vdEZvdW5kQm91bmRhcnkgfSBmcm9tICcuL25vdC1mb3VuZC1ib3VuZGFyeSdcbmltcG9ydCB7IGdldFNlZ21lbnRWYWx1ZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXJDYWNoZUtleSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvY3JlYXRlLXJvdXRlci1jYWNoZS1rZXknXG5pbXBvcnQgeyBoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2hhcy1pbnRlcmNlcHRpb24tcm91dGUtaW4tY3VycmVudC10cmVlJ1xuXG4vKipcbiAqIEFkZCByZWZldGNoIG1hcmtlciB0byByb3V0ZXIgc3RhdGUgYXQgdGhlIHBvaW50IG9mIHRoZSBjdXJyZW50IGxheW91dCBzZWdtZW50LlxuICogVGhpcyBlbnN1cmVzIHRoZSByZXNwb25zZSByZXR1cm5lZCBpcyBub3QgZnVydGhlciBkb3duIHRoYW4gdGhlIGN1cnJlbnQgbGF5b3V0IHNlZ21lbnQuXG4gKi9cbmZ1bmN0aW9uIHdhbGtBZGRSZWZldGNoKFxuICBzZWdtZW50UGF0aFRvV2FsazogRmxpZ2h0U2VnbWVudFBhdGggfCB1bmRlZmluZWQsXG4gIHRyZWVUb1JlY3JlYXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogRmxpZ2h0Um91dGVyU3RhdGUge1xuICBpZiAoc2VnbWVudFBhdGhUb1dhbGspIHtcbiAgICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZUtleV0gPSBzZWdtZW50UGF0aFRvV2Fsa1xuICAgIGNvbnN0IGlzTGFzdCA9IHNlZ21lbnRQYXRoVG9XYWxrLmxlbmd0aCA9PT0gMlxuXG4gICAgaWYgKG1hdGNoU2VnbWVudCh0cmVlVG9SZWNyZWF0ZVswXSwgc2VnbWVudCkpIHtcbiAgICAgIGlmICh0cmVlVG9SZWNyZWF0ZVsxXS5oYXNPd25Qcm9wZXJ0eShwYXJhbGxlbFJvdXRlS2V5KSkge1xuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHdhbGtBZGRSZWZldGNoKFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHJlZVRvUmVjcmVhdGVbMV1bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRyZWVUb1JlY3JlYXRlWzBdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi50cmVlVG9SZWNyZWF0ZVsxXSxcbiAgICAgICAgICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiBbXG4gICAgICAgICAgICAgICAgc3ViVHJlZVswXSxcbiAgICAgICAgICAgICAgICBzdWJUcmVlWzFdLFxuICAgICAgICAgICAgICAgIHN1YlRyZWVbMl0sXG4gICAgICAgICAgICAgICAgJ3JlZmV0Y2gnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHRyZWVUb1JlY3JlYXRlWzBdLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnRyZWVUb1JlY3JlYXRlWzFdLFxuICAgICAgICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiB3YWxrQWRkUmVmZXRjaChcbiAgICAgICAgICAgICAgc2VnbWVudFBhdGhUb1dhbGsuc2xpY2UoMiksXG4gICAgICAgICAgICAgIHRyZWVUb1JlY3JlYXRlWzFdW3BhcmFsbGVsUm91dGVLZXldXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJlZVRvUmVjcmVhdGVcbn1cblxuY29uc3QgX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID0gKFxuICBSZWFjdERPTSBhcyBhbnlcbikuX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFXG5cbi8vIFRPRE8tQVBQOiBSZXBsYWNlIHdpdGggbmV3IFJlYWN0IEFQSSBmb3IgZmluZGluZyBkb20gbm9kZXMgd2l0aG91dCBhIGByZWZgIHdoZW4gYXZhaWxhYmxlXG4vKipcbiAqIFdyYXBzIFJlYWN0RE9NLmZpbmRET01Ob2RlIHdpdGggYWRkaXRpb25hbCBsb2dpYyB0byBoaWRlIFJlYWN0IFN0cmljdCBNb2RlIHdhcm5pbmdcbiAqL1xuZnVuY3Rpb24gZmluZERPTU5vZGUoXG4gIGluc3RhbmNlOiBSZWFjdC5SZWFjdEluc3RhbmNlIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogRWxlbWVudCB8IFRleHQgfCBudWxsIHtcbiAgLy8gVHJlZS1zaGFrZSBmb3Igc2VydmVyIGJ1bmRsZVxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsXG5cbiAgLy8gX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLmZpbmRET01Ob2RlIGlzIG51bGwgZHVyaW5nIG1vZHVsZSBpbml0LlxuICAvLyBXZSBuZWVkIHRvIGxhemlseSByZWZlcmVuY2UgaXQuXG4gIGNvbnN0IGludGVybmFsX3JlYWN0RE9NZmluZERPTU5vZGUgPVxuICAgIF9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERS5maW5kRE9NTm9kZVxuICByZXR1cm4gaW50ZXJuYWxfcmVhY3RET01maW5kRE9NTm9kZShpbnN0YW5jZSlcbn1cblxuY29uc3QgcmVjdFByb3BlcnRpZXMgPSBbXG4gICdib3R0b20nLFxuICAnaGVpZ2h0JyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ3dpZHRoJyxcbiAgJ3gnLFxuICAneScsXG5dIGFzIGNvbnN0XG4vKipcbiAqIENoZWNrIGlmIGEgSFRNTEVsZW1lbnQgaXMgaGlkZGVuIG9yIGZpeGVkL3N0aWNreSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBzaG91bGRTa2lwRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAvLyB3ZSBpZ25vcmUgZml4ZWQgb3Igc3RpY2t5IHBvc2l0aW9uZWQgZWxlbWVudHMgc2luY2UgdGhleSdsbCBsaWtlbHkgcGFzcyB0aGUgXCJpbi12aWV3cG9ydFwiIGNoZWNrXG4gIC8vIGFuZCB3aWxsIHJlc3VsdCBpbiBhIHNpdHVhdGlvbiB3ZSBiYWlsIG9uIHNjcm9sbCBiZWNhdXNlIG9mIHNvbWV0aGluZyBsaWtlIGEgZml4ZWQgbmF2LFxuICAvLyBldmVuIHRob3VnaCB0aGUgYWN0dWFsIHBhZ2UgY29udGVudCBpcyBvZmZzY3JlZW5cbiAgaWYgKFsnc3RpY2t5JywgJ2ZpeGVkJ10uaW5jbHVkZXMoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NraXBwaW5nIGF1dG8tc2Nyb2xsIGJlaGF2aW9yIGR1ZSB0byBgcG9zaXRpb246IHN0aWNreWAgb3IgYHBvc2l0aW9uOiBmaXhlZGAgb24gZWxlbWVudDonLFxuICAgICAgICBlbGVtZW50XG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBVc2VzIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGhpZGRlbiBpbnN0ZWFkIG9mIGBvZmZzZXRQYXJlbnRgXG4gIC8vIGJlY2F1c2UgYG9mZnNldFBhcmVudGAgZG9lc24ndCBjb25zaWRlciBkb2N1bWVudC9ib2R5XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIHJldHVybiByZWN0UHJvcGVydGllcy5ldmVyeSgoaXRlbSkgPT4gcmVjdFtpdGVtXSA9PT0gMClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdG9wIGNvcm5lciBvZiB0aGUgSFRNTEVsZW1lbnQgaXMgaW4gdGhlIHZpZXdwb3J0LlxuICovXG5mdW5jdGlvbiB0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB2aWV3cG9ydEhlaWdodDogbnVtYmVyKSB7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IHZpZXdwb3J0SGVpZ2h0XG59XG5cbi8qKlxuICogRmluZCB0aGUgRE9NIG5vZGUgZm9yIGEgaGFzaCBmcmFnbWVudC5cbiAqIElmIGB0b3BgIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZS4gVGhpcyBtaXJyb3JzIHRoZSBicm93c2VyJ3MgYmVoYXZpb3IuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhIG5hbWUsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aCB0aGF0IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50OiBzdHJpbmcpIHtcbiAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYHRvcGAgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLlxuICBpZiAoaGFzaEZyYWdtZW50ID09PSAndG9wJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cblxuICAvLyBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaEZyYWdtZW50KSA/P1xuICAgIC8vIElmIHRoZSBoYXNoIGZyYWdtZW50IGlzIGEgbmFtZSwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoYXQgbmFtZS5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShoYXNoRnJhZ21lbnQpWzBdXG4gIClcbn1cbmludGVyZmFjZSBTY3JvbGxBbmRGb2N1c0hhbmRsZXJQcm9wcyB7XG4gIGZvY3VzQW5kU2Nyb2xsUmVmOiBGb2N1c0FuZFNjcm9sbFJlZlxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxufVxuY2xhc3MgSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8U2Nyb2xsQW5kRm9jdXNIYW5kbGVyUHJvcHM+IHtcbiAgaGFuZGxlUG90ZW50aWFsU2Nyb2xsID0gKCkgPT4ge1xuICAgIC8vIEhhbmRsZSBzY3JvbGwgYW5kIGZvY3VzLCBpdCdzIG9ubHkgYXBwbGllZCBvbmNlIGluIHRoZSBmaXJzdCB1c2VFZmZlY3QgdGhhdCB0cmlnZ2VycyB0aGF0IGNoYW5nZWQuXG4gICAgY29uc3QgeyBmb2N1c0FuZFNjcm9sbFJlZiwgc2VnbWVudFBhdGggfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChmb2N1c0FuZFNjcm9sbFJlZi5hcHBseSkge1xuICAgICAgLy8gc2VnbWVudFBhdGhzIGlzIGFuIGFycmF5IG9mIHNlZ21lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgc2Nyb2xsZWQgdG9cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHNlZ21lbnQgcGF0aCBpcyBub3QgaW4gdGhlIGFycmF5LCB0aGUgc2Nyb2xsIGlzIG5vdCBhcHBsaWVkXG4gICAgICAvLyB1bmxlc3MgdGhlIGFycmF5IGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBzY3JvbGwgaXMgYWx3YXlzIGFwcGxpZWRcbiAgICAgIGlmIChcbiAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAhZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLnNvbWUoKHNjcm9sbFJlZlNlZ21lbnRQYXRoKSA9PlxuICAgICAgICAgIHNlZ21lbnRQYXRoLmV2ZXJ5KChzZWdtZW50LCBpbmRleCkgPT5cbiAgICAgICAgICAgIG1hdGNoU2VnbWVudChzZWdtZW50LCBzY3JvbGxSZWZTZWdtZW50UGF0aFtpbmRleF0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBkb21Ob2RlOlxuICAgICAgICB8IFJldHVyblR5cGU8dHlwZW9mIGdldEhhc2hGcmFnbWVudERvbU5vZGU+XG4gICAgICAgIHwgUmV0dXJuVHlwZTx0eXBlb2YgZmluZERPTU5vZGU+ID0gbnVsbFxuICAgICAgY29uc3QgaGFzaEZyYWdtZW50ID0gZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50XG5cbiAgICAgIGlmIChoYXNoRnJhZ21lbnQpIHtcbiAgICAgICAgZG9tTm9kZSA9IGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50KVxuICAgICAgfVxuXG4gICAgICAvLyBgZmluZERPTU5vZGVgIGlzIHRyaWNreSBiZWNhdXNlIGl0IHJldHVybnMganVzdCB0aGUgZmlyc3QgY2hpbGQgaWYgdGhlIGNvbXBvbmVudCBpcyBhIGZyYWdtZW50LlxuICAgICAgLy8gVGhpcyBhbHJlYWR5IGNhdXNlZCBhIGJ1ZyB3aGVyZSB0aGUgZmlyc3QgY2hpbGQgd2FzIGEgPGxpbmsvPiBpbiBoZWFkLlxuICAgICAgaWYgKCFkb21Ob2RlKSB7XG4gICAgICAgIGRvbU5vZGUgPSBmaW5kRE9NTm9kZSh0aGlzKVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyBET00gbm9kZSB0aGlzIGxheW91dC1yb3V0ZXIgbGV2ZWwgaXMgc2tpcHBlZC4gSXQnbGwgYmUgaGFuZGxlZCBoaWdoZXItdXAgaW4gdGhlIHRyZWUuXG4gICAgICBpZiAoIShkb21Ob2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmeSBpZiB0aGUgZWxlbWVudCBpcyBhIEhUTUxFbGVtZW50IGFuZCBpZiB3ZSB3YW50IHRvIGNvbnNpZGVyIGl0IGZvciBzY3JvbGwgYmVoYXZpb3IuXG4gICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBza2lwcGVkLCB0cnkgdG8gc2VsZWN0IHRoZSBuZXh0IHNpYmxpbmcgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgIHdoaWxlICghKGRvbU5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgc2hvdWxkU2tpcEVsZW1lbnQoZG9tTm9kZSkpIHtcbiAgICAgICAgLy8gTm8gc2libGluZ3MgZm91bmQgdGhhdCBtYXRjaCB0aGUgY3JpdGVyaWEgYXJlIGZvdW5kLCBzbyBoYW5kbGUgc2Nyb2xsIGhpZ2hlciB1cCBpbiB0aGUgdHJlZSBpbnN0ZWFkLlxuICAgICAgICBpZiAoZG9tTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBkb21Ob2RlID0gZG9tTm9kZS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgIH1cblxuICAgICAgLy8gU3RhdGUgaXMgbXV0YXRlZCB0byBlbnN1cmUgdGhhdCB0aGUgZm9jdXMgYW5kIHNjcm9sbCBpcyBhcHBsaWVkIG9ubHkgb25jZS5cbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5ID0gZmFsc2VcbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLmhhc2hGcmFnbWVudCA9IG51bGxcbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLnNlZ21lbnRQYXRocyA9IFtdXG5cbiAgICAgIGhhbmRsZVNtb290aFNjcm9sbChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaGFzaCBzY3JvbGwsIHdlIG9ubHkgbmVlZCB0byBzY3JvbGwgdGhlIGVsZW1lbnQgaW50byB2aWV3XG4gICAgICAgICAgaWYgKGhhc2hGcmFnbWVudCkge1xuICAgICAgICAgICAgOyhkb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxJbnRvVmlldygpXG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCB2aWV3cG9ydCBoZWlnaHQgYmVjYXVzZSByZWFkaW5nIGBjbGllbnRIZWlnaHRgIGNhdXNlcyBhIHJlZmxvdyxcbiAgICAgICAgICAvLyBhbmQgaXQgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBodG1sRWxlbWVudC5jbGllbnRIZWlnaHRcblxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50J3MgdG9wIGVkZ2UgaXMgYWxyZWFkeSBpbiB0aGUgdmlld3BvcnQsIGV4aXQgZWFybHkuXG4gICAgICAgICAgaWYgKHRvcE9mRWxlbWVudEluVmlld3BvcnQoZG9tTm9kZSBhcyBIVE1MRWxlbWVudCwgdmlld3BvcnRIZWlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIHRyeSBzY3JvbGxpbmcgZ28gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHBhZ2VzXG4gICAgICAgICAgLy8gc2Nyb2xsSW50b1ZpZXcoKSBjYWxsZWQgb24gYDxodG1sLz5gIGVsZW1lbnQgc2Nyb2xscyBob3Jpem9udGFsbHkgb24gY2hyb21lIGFuZCBmaXJlZm94ICh0aGF0IHNob3VsZG4ndCBoYXBwZW4pXG4gICAgICAgICAgLy8gV2UgY291bGQgdXNlIGl0IHRvIHNjcm9sbCBob3Jpem9udGFsbHkgZm9sbG93aW5nIFJUTCBidXQgdGhhdCBhbHNvIHNlZW1zIHRvIGJlIGJyb2tlbiAtIGl0IHdpbGwgYWx3YXlzIHNjcm9sbCBsZWZ0XG4gICAgICAgICAgLy8gc2Nyb2xsTGVmdCA9IDAgYWxzbyBzZWVtcyB0byBpZ25vcmUgUlRMIGFuZCBtYW51YWxseSBjaGVja2luZyBmb3IgUlRMIGlzIHRvbyBtdWNoIGhhc3NsZSBzbyB3ZSB3aWxsIHNjcm9sbCBqdXN0IHZlcnRpY2FsbHlcbiAgICAgICAgICBodG1sRWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cbiAgICAgICAgICAvLyBTY3JvbGwgdG8gZG9tTm9kZSBpZiBkb21Ob2RlIGlzIG5vdCBpbiB2aWV3cG9ydCB3aGVuIHNjcm9sbGVkIHRvIHRvcCBvZiBkb2N1bWVudFxuICAgICAgICAgIGlmICghdG9wT2ZFbGVtZW50SW5WaWV3cG9ydChkb21Ob2RlIGFzIEhUTUxFbGVtZW50LCB2aWV3cG9ydEhlaWdodCkpIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBpbnRvIHZpZXcgZG9lc24ndCBzY3JvbGwgaG9yaXpvbnRhbGx5IGJ5IGRlZmF1bHQgd2hlbiBub3QgbmVlZGVkXG4gICAgICAgICAgICA7KGRvbU5vZGUgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSB3aWxsIGZvcmNlIGxheW91dCBieSBxdWVyeWluZyBkb21Ob2RlIHBvc2l0aW9uXG4gICAgICAgICAgZG9udEZvcmNlTGF5b3V0OiB0cnVlLFxuICAgICAgICAgIG9ubHlIYXNoQ2hhbmdlOiBmb2N1c0FuZFNjcm9sbFJlZi5vbmx5SGFzaENoYW5nZSxcbiAgICAgICAgfVxuICAgICAgKVxuXG4gICAgICAvLyBNdXRhdGUgYWZ0ZXIgc2Nyb2xsaW5nIHNvIHRoYXQgaXQgY2FuIGJlIHJlYWQgYnkgYGhhbmRsZVNtb290aFNjcm9sbGBcbiAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLm9ubHlIYXNoQ2hhbmdlID0gZmFsc2VcblxuICAgICAgLy8gU2V0IGZvY3VzIG9uIHRoZSBlbGVtZW50XG4gICAgICBkb21Ob2RlLmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbCgpXG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgLy8gQmVjYXVzZSB0aGlzIHByb3BlcnR5IGlzIG92ZXJ3cml0dGVuIGluIGhhbmRsZVBvdGVudGlhbFNjcm9sbCBpdCdzIGZpbmUgdG8gYWx3YXlzIHJ1biBpdCB3aGVuIHRydWUgYXMgaXQnbGwgYmUgc2V0IHRvIGZhbHNlIGZvciBzdWJzZXF1ZW50IHJlbmRlcnMuXG4gICAgaWYgKHRoaXMucHJvcHMuZm9jdXNBbmRTY3JvbGxSZWYuYXBwbHkpIHtcbiAgICAgIHRoaXMuaGFuZGxlUG90ZW50aWFsU2Nyb2xsKClcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgfVxufVxuXG5mdW5jdGlvbiBTY3JvbGxBbmRGb2N1c0hhbmRsZXIoe1xuICBzZWdtZW50UGF0aCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59KSB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEdsb2JhbExheW91dFJvdXRlckNvbnRleHQpXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IGdsb2JhbCBsYXlvdXQgcm91dGVyIG5vdCBtb3VudGVkJylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPElubmVyU2Nyb2xsQW5kRm9jdXNIYW5kbGVyXG4gICAgICBzZWdtZW50UGF0aD17c2VnbWVudFBhdGh9XG4gICAgICBmb2N1c0FuZFNjcm9sbFJlZj17Y29udGV4dC5mb2N1c0FuZFNjcm9sbFJlZn1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Jbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlcj5cbiAgKVxufVxuXG4vKipcbiAqIElubmVyTGF5b3V0Um91dGVyIGhhbmRsZXMgcmVuZGVyaW5nIHRoZSBwcm92aWRlZCBzZWdtZW50IGJhc2VkIG9uIHRoZSBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSW5uZXJMYXlvdXRSb3V0ZXIoe1xuICBwYXJhbGxlbFJvdXRlcktleSxcbiAgdXJsLFxuICBjaGlsZE5vZGVzLFxuICBzZWdtZW50UGF0aCxcbiAgdHJlZSxcbiAgLy8gVE9ETy1BUFA6IGltcGxlbWVudCBgPE9mZnNjcmVlbj5gIHdoZW4gYXZhaWxhYmxlLlxuICAvLyBpc0FjdGl2ZSxcbiAgY2FjaGVLZXksXG59OiB7XG4gIHBhcmFsbGVsUm91dGVyS2V5OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgY2hpbGROb2RlczogQ2hpbGRTZWdtZW50TWFwXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxuICB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBpc0FjdGl2ZTogYm9vbGVhblxuICBjYWNoZUtleTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlUm91dGVyQ2FjaGVLZXk+XG59KSB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEdsb2JhbExheW91dFJvdXRlckNvbnRleHQpXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IGdsb2JhbCBsYXlvdXQgcm91dGVyIG5vdCBtb3VudGVkJylcbiAgfVxuXG4gIGNvbnN0IHsgYnVpbGRJZCwgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSwgdHJlZTogZnVsbFRyZWUgfSA9IGNvbnRleHRcblxuICAvLyBSZWFkIHNlZ21lbnQgcGF0aCBmcm9tIHRoZSBwYXJhbGxlbCByb3V0ZXIgY2FjaGUgbm9kZS5cbiAgbGV0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXMuZ2V0KGNhY2hlS2V5KVxuXG4gIC8vIFdoZW4gZGF0YSBpcyBub3QgYXZhaWxhYmxlIGR1cmluZyByZW5kZXJpbmcgY2xpZW50LXNpZGUgd2UgbmVlZCB0byBmZXRjaFxuICAvLyBpdCBmcm9tIHRoZSBzZXJ2ZXIuXG4gIGlmIChjaGlsZE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG5ld0xhenlDYWNoZU5vZGU6IExhenlDYWNoZU5vZGUgPSB7XG4gICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgIHJzYzogbnVsbCxcbiAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgaGVhZDogbnVsbCxcbiAgICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICBsb2FkaW5nOiBudWxsLFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsaWdodCBkYXRhIGZldGNoIGtpY2tlZCBvZmYgZHVyaW5nIHJlbmRlciBhbmQgcHV0IGludG8gdGhlIGNhY2hlLlxuICAgICAqL1xuICAgIGNoaWxkTm9kZSA9IG5ld0xhenlDYWNoZU5vZGVcbiAgICBjaGlsZE5vZGVzLnNldChjYWNoZUtleSwgbmV3TGF6eUNhY2hlTm9kZSlcbiAgfVxuXG4gIC8vIGByc2NgIHJlcHJlc2VudHMgdGhlIHJlbmRlcmFibGUgbm9kZSBmb3IgdGhpcyBzZWdtZW50LlxuXG4gIC8vIElmIHRoaXMgc2VnbWVudCBoYXMgYSBgcHJlZmV0Y2hSc2NgLCBpdCdzIHRoZSBzdGF0aWNhbGx5IHByZWZldGNoZWQgZGF0YS5cbiAgLy8gV2Ugc2hvdWxkIHVzZSB0aGF0IG9uIGluaXRpYWwgcmVuZGVyIGluc3RlYWQgb2YgYHJzY2AuIFRoZW4gd2UnbGwgc3dpdGNoXG4gIC8vIHRvIGByc2NgIHdoZW4gdGhlIGR5bmFtaWMgcmVzcG9uc2Ugc3RyZWFtcyBpbi5cbiAgLy9cbiAgLy8gSWYgbm8gcHJlZmV0Y2ggZGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gd2UgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIGByc2NgLlxuICBjb25zdCByZXNvbHZlZFByZWZldGNoUnNjID1cbiAgICBjaGlsZE5vZGUucHJlZmV0Y2hSc2MgIT09IG51bGwgPyBjaGlsZE5vZGUucHJlZmV0Y2hSc2MgOiBjaGlsZE5vZGUucnNjXG5cbiAgLy8gV2UgdXNlIGB1c2VEZWZlcnJlZFZhbHVlYCB0byBoYW5kbGUgc3dpdGNoaW5nIGJldHdlZW4gdGhlIHByZWZldGNoZWQgYW5kXG4gIC8vIGZpbmFsIHZhbHVlcy4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyByZXR1cm5lZCBvbiBpbml0aWFsIHJlbmRlciwgdGhlbiBpdFxuICAvLyByZS1yZW5kZXJzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAvL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYHVzZURlZmVycmVkVmFsdWVgIGlzIG9ubHlcbiAgLy8gYXZhaWxhYmxlIGluIHRoZSBleHBlcmltZW50YWwgYnVpbGRzLiBXaGVuIGl0cyBkaXNhYmxlZCwgaXQgd2lsbCBhbHdheXNcbiAgLy8gcmV0dXJuIGByc2NgLlxuICBjb25zdCByc2M6IGFueSA9IHVzZURlZmVycmVkVmFsdWUoY2hpbGROb2RlLnJzYywgcmVzb2x2ZWRQcmVmZXRjaFJzYylcblxuICAvLyBgcnNjYCBpcyBlaXRoZXIgYSBSZWFjdCBub2RlIG9yIGEgcHJvbWlzZSBmb3IgYSBSZWFjdCBub2RlLCBleGNlcHQgd2VcbiAgLy8gc3BlY2lhbCBjYXNlIGBudWxsYCB0byByZXByZXNlbnQgdGhhdCB0aGlzIHNlZ21lbnQncyBkYXRhIGlzIG1pc3NpbmcuIElmXG4gIC8vIGl0J3MgYSBwcm9taXNlLCB3ZSBuZWVkIHRvIHVud3JhcCBpdCBzbyB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZVxuICAvLyBkYXRhIGlzIG1pc3NpbmcuXG4gIGNvbnN0IHJlc29sdmVkUnNjOiBSZWFjdC5SZWFjdE5vZGUgPVxuICAgIHR5cGVvZiByc2MgPT09ICdvYmplY3QnICYmIHJzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcnNjLnRoZW4gPT09ICdmdW5jdGlvbidcbiAgICAgID8gdXNlKHJzYylcbiAgICAgIDogcnNjXG5cbiAgaWYgKCFyZXNvbHZlZFJzYykge1xuICAgIC8vIFRoZSBkYXRhIGZvciB0aGlzIHNlZ21lbnQgaXMgbm90IGF2YWlsYWJsZSwgYW5kIHRoZXJlJ3Mgbm8gcGVuZGluZ1xuICAgIC8vIG5hdmlnYXRpb24gdGhhdCB3aWxsIGJlIGFibGUgdG8gZnVsZmlsbCBpdC4gV2UgbmVlZCB0byBmZXRjaCBtb3JlIGZyb21cbiAgICAvLyB0aGUgc2VydmVyIGFuZCBwYXRjaCB0aGUgY2FjaGUuXG5cbiAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFscmVhZHkgYSBwZW5kaW5nIHJlcXVlc3QuXG4gICAgbGV0IGxhenlEYXRhID0gY2hpbGROb2RlLmxhenlEYXRhXG4gICAgaWYgKGxhenlEYXRhID09PSBudWxsKSB7XG4gICAgICAvKipcbiAgICAgICAqIFJvdXRlciBzdGF0ZSB3aXRoIHJlZmV0Y2ggbWFya2VyIGFkZGVkXG4gICAgICAgKi9cbiAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgIGNvbnN0IHJlZmV0Y2hUcmVlID0gd2Fsa0FkZFJlZmV0Y2goWycnLCAuLi5zZWdtZW50UGF0aF0sIGZ1bGxUcmVlKVxuICAgICAgY29uc3QgaW5jbHVkZU5leHRVcmwgPSBoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUoZnVsbFRyZWUpXG4gICAgICBjaGlsZE5vZGUubGF6eURhdGEgPSBsYXp5RGF0YSA9IGZldGNoU2VydmVyUmVzcG9uc2UoXG4gICAgICAgIG5ldyBVUkwodXJsLCBsb2NhdGlvbi5vcmlnaW4pLFxuICAgICAgICB7XG4gICAgICAgICAgZmxpZ2h0Um91dGVyU3RhdGU6IHJlZmV0Y2hUcmVlLFxuICAgICAgICAgIG5leHRVcmw6IGluY2x1ZGVOZXh0VXJsID8gY29udGV4dC5uZXh0VXJsIDogbnVsbCxcbiAgICAgICAgICBidWlsZElkLFxuICAgICAgICB9XG4gICAgICApLnRoZW4oKHNlcnZlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgICAgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSh7XG4gICAgICAgICAgICBwcmV2aW91c1RyZWU6IGZ1bGxUcmVlLFxuICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gc2VydmVyUmVzcG9uc2VcbiAgICAgIH0pXG4gICAgfVxuICAgIC8vIFN1c3BlbmQgaW5maW5pdGVseSBhcyBgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZWAgd2lsbCBjYXVzZSBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSB0cmVlIHRvIGJlIHJlbmRlcmVkLlxuICAgIC8vIEEgZmFsc2V5IGByZXNvbHZlZFJzY2AgaW5kaWNhdGVzIG1pc3NpbmcgZGF0YSAtLSB3ZSBzaG91bGQgbm90IGNvbW1pdCB0aGF0IGJyYW5jaCwgYW5kIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGRhdGEgdG8gYXJyaXZlLlxuICAgIHVzZSh1bnJlc29sdmVkVGhlbmFibGUpIGFzIG5ldmVyXG4gIH1cblxuICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBwb2ludCwgdGhlbiB3ZSBrbm93IHdlIGhhdmUgc29tZXRoaW5nIHdlIGNhbiByZW5kZXIuXG4gIGNvbnN0IHN1YnRyZWUgPSAoXG4gICAgLy8gVGhlIGxheW91dCByb3V0ZXIgY29udGV4dCBuYXJyb3dzIGRvd24gdHJlZSBhbmQgY2hpbGROb2RlcyBhdCBlYWNoIGxldmVsLlxuICAgIDxMYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICB0cmVlOiB0cmVlWzFdW3BhcmFsbGVsUm91dGVyS2V5XSxcbiAgICAgICAgY2hpbGROb2RlczogY2hpbGROb2RlLnBhcmFsbGVsUm91dGVzLFxuICAgICAgICAvLyBUT0RPLUFQUDogb3ZlcnJpZGluZyBvZiB1cmwgZm9yIHBhcmFsbGVsIHJvdXRlc1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgbG9hZGluZzogY2hpbGROb2RlLmxvYWRpbmcsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtyZXNvbHZlZFJzY31cbiAgICA8L0xheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXI+XG4gIClcbiAgLy8gRW5zdXJlIHJvb3QgbGF5b3V0IGlzIG5vdCB3cmFwcGVkIGluIGEgZGl2IGFzIHRoZSByb290IGxheW91dCByZW5kZXJzIGA8aHRtbD5gXG4gIHJldHVybiBzdWJ0cmVlXG59XG5cbi8qKlxuICogUmVuZGVycyBzdXNwZW5zZSBib3VuZGFyeSB3aXRoIHRoZSBwcm92aWRlZCBcImxvYWRpbmdcIiBwcm9wZXJ0eSBhcyB0aGUgZmFsbGJhY2suXG4gKiBJZiBubyBsb2FkaW5nIHByb3BlcnR5IGlzIHByb3ZpZGVkIGl0IHJlbmRlcnMgdGhlIGNoaWxkcmVuIHdpdGhvdXQgYSBzdXNwZW5zZSBib3VuZGFyeS5cbiAqL1xuZnVuY3Rpb24gTG9hZGluZ0JvdW5kYXJ5KHtcbiAgY2hpbGRyZW4sXG4gIGhhc0xvYWRpbmcsXG4gIGxvYWRpbmcsXG4gIGxvYWRpbmdTdHlsZXMsXG4gIGxvYWRpbmdTY3JpcHRzLFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIGhhc0xvYWRpbmc6IGJvb2xlYW5cbiAgbG9hZGluZz86IFJlYWN0LlJlYWN0Tm9kZVxuICBsb2FkaW5nU3R5bGVzPzogUmVhY3QuUmVhY3ROb2RlXG4gIGxvYWRpbmdTY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlXG59KTogSlNYLkVsZW1lbnQge1xuICAvLyBXZSBoYXZlIGFuIGV4cGxpY2l0IHByb3AgZm9yIGNoZWNraW5nIGlmIGBsb2FkaW5nYCBpcyBwcm92aWRlZCwgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gYSBsb2FkaW5nXG4gIC8vIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYG51bGxgIC8gYHVuZGVmaW5lZGAsIHZzIG5vdCBoYXZpbmcgYSBsb2FkaW5nIGNvbXBvbmVudCBhdCBhbGwuXG4gIGlmIChoYXNMb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXNwZW5zZVxuICAgICAgICBmYWxsYmFjaz17XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtsb2FkaW5nU3R5bGVzfVxuICAgICAgICAgICAge2xvYWRpbmdTY3JpcHRzfVxuICAgICAgICAgICAge2xvYWRpbmd9XG4gICAgICAgICAgPC8+XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9TdXNwZW5zZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gPD57Y2hpbGRyZW59PC8+XG59XG5cbi8qKlxuICogT3V0ZXJMYXlvdXRSb3V0ZXIgaGFuZGxlcyB0aGUgY3VycmVudCBzZWdtZW50IGFzIHdlbGwgYXMgPE9mZnNjcmVlbj4gcmVuZGVyaW5nIG9mIG90aGVyIHNlZ21lbnRzLlxuICogSXQgY2FuIGJlIHJlbmRlcmVkIG5leHQgdG8gZWFjaCBvdGhlciB3aXRoIGEgZGlmZmVyZW50IGBwYXJhbGxlbFJvdXRlcktleWAsIGFsbG93aW5nIGZvciBQYXJhbGxlbCByb3V0ZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE91dGVyTGF5b3V0Um91dGVyKHtcbiAgcGFyYWxsZWxSb3V0ZXJLZXksXG4gIHNlZ21lbnRQYXRoLFxuICBlcnJvcixcbiAgZXJyb3JTdHlsZXMsXG4gIGVycm9yU2NyaXB0cyxcbiAgdGVtcGxhdGVTdHlsZXMsXG4gIHRlbXBsYXRlU2NyaXB0cyxcbiAgdGVtcGxhdGUsXG4gIG5vdEZvdW5kLFxuICBub3RGb3VuZFN0eWxlcyxcbn06IHtcbiAgcGFyYWxsZWxSb3V0ZXJLZXk6IHN0cmluZ1xuICBzZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGhcbiAgZXJyb3I6IEVycm9yQ29tcG9uZW50IHwgdW5kZWZpbmVkXG4gIGVycm9yU3R5bGVzOiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWRcbiAgZXJyb3JTY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWRcbiAgdGVtcGxhdGVTdHlsZXM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICB0ZW1wbGF0ZVNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICB0ZW1wbGF0ZTogUmVhY3QuUmVhY3ROb2RlXG4gIG5vdEZvdW5kOiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWRcbiAgbm90Rm91bmRTdHlsZXM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxufSkge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChMYXlvdXRSb3V0ZXJDb250ZXh0KVxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCBleHBlY3RlZCBsYXlvdXQgcm91dGVyIHRvIGJlIG1vdW50ZWQnKVxuICB9XG5cbiAgY29uc3QgeyBjaGlsZE5vZGVzLCB0cmVlLCB1cmwsIGxvYWRpbmcgfSA9IGNvbnRleHRcblxuICAvLyBHZXQgdGhlIGN1cnJlbnQgcGFyYWxsZWxSb3V0ZXIgY2FjaGUgbm9kZVxuICBsZXQgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyID0gY2hpbGROb2Rlcy5nZXQocGFyYWxsZWxSb3V0ZXJLZXkpXG4gIC8vIElmIHRoZSBwYXJhbGxlbCByb3V0ZXIgY2FjaGUgbm9kZSBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC5cbiAgLy8gVGhpcyB3cml0ZXMgdG8gdGhlIGNhY2hlIHdoZW4gdGhlcmUgaXMgbm8gaXRlbSBpbiB0aGUgY2FjaGUgeWV0LiBJdCBuZXZlciAqb3ZlcndyaXRlcyogZXhpc3RpbmcgY2FjaGUgaXRlbXMgd2hpY2ggaXMgd2h5IGl0J3Mgc2FmZSBpbiBjb25jdXJyZW50IG1vZGUuXG4gIGlmICghY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyKSB7XG4gICAgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyID0gbmV3IE1hcCgpXG4gICAgY2hpbGROb2Rlcy5zZXQocGFyYWxsZWxSb3V0ZXJLZXksIGNoaWxkTm9kZXNGb3JQYXJhbGxlbFJvdXRlcilcbiAgfVxuXG4gIC8vIEdldCB0aGUgYWN0aXZlIHNlZ21lbnQgaW4gdGhlIHRyZWVcbiAgLy8gVGhlIHJlYXNvbiBhcnJheXMgYXJlIHVzZWQgaW4gdGhlIGRhdGEgZm9ybWF0IGlzIHRoYXQgdGhlc2UgYXJlIHRyYW5zZmVycmVkIGZyb20gdGhlIHNlcnZlciB0byB0aGUgYnJvd3NlciBzbyBpdCdzIG9wdGltaXplZCB0byBzYXZlIGJ5dGVzLlxuICBjb25zdCB0cmVlU2VnbWVudCA9IHRyZWVbMV1bcGFyYWxsZWxSb3V0ZXJLZXldWzBdXG5cbiAgLy8gSWYgc2VnbWVudCBpcyBhbiBhcnJheSBpdCdzIGEgZHluYW1pYyByb3V0ZSBhbmQgd2Ugd2FudCB0byByZWFkIHRoZSBkeW5hbWljIHJvdXRlIHZhbHVlIGFzIHRoZSBzZWdtZW50IHRvIGdldCBmcm9tIHRoZSBjYWNoZS5cbiAgY29uc3QgY3VycmVudENoaWxkU2VnbWVudFZhbHVlID0gZ2V0U2VnbWVudFZhbHVlKHRyZWVTZWdtZW50KVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoaWNoIHNlZ21lbnRzIHRvIGtlZXAgcmVuZGVyaW5nLCBhbGwgc2VnbWVudHMgdGhhdCBhcmUgbm90IGFjdGl2ZSB3aWxsIGJlIHdyYXBwZWQgaW4gYDxPZmZzY3JlZW4+YC5cbiAgICovXG4gIC8vIFRPRE8tQVBQOiBBZGQgaGFuZGxpbmcgb2YgYDxPZmZzY3JlZW4+YCB3aGVuIGl0J3MgYXZhaWxhYmxlLlxuICBjb25zdCBwcmVzZXJ2ZWRTZWdtZW50czogU2VnbWVudFtdID0gW3RyZWVTZWdtZW50XVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtwcmVzZXJ2ZWRTZWdtZW50cy5tYXAoKHByZXNlcnZlZFNlZ21lbnQpID0+IHtcbiAgICAgICAgY29uc3QgcHJlc2VydmVkU2VnbWVudFZhbHVlID0gZ2V0U2VnbWVudFZhbHVlKHByZXNlcnZlZFNlZ21lbnQpXG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkocHJlc2VydmVkU2VnbWVudClcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8qXG4gICAgICAgICAgICAtIEVycm9yIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIGVycm9yIGJvdW5kYXJ5IGlmIGVycm9yIGNvbXBvbmVudCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGVycm9yIHN0YXRlLlxuICAgICAgICAgICAgLSBMb2FkaW5nIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIHN1c3BlbnNlIGJvdW5kYXJ5IGlmIGxvYWRpbmcgY29tcG9uZW50cyBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgIC0gUGFzc2VkIHRvIHRoZSByb3V0ZXIgZHVyaW5nIHJlbmRlcmluZyB0byBlbnN1cmUgaXQgY2FuIGJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkIHdoZW4gc3VzcGVuZGluZyBvbiBhIEZsaWdodCBmZXRjaC5cbiAgICAgICAgICAqL1xuICAgICAgICAgIDxUZW1wbGF0ZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICAgIGtleT17Y3JlYXRlUm91dGVyQ2FjaGVLZXkocHJlc2VydmVkU2VnbWVudCwgdHJ1ZSl9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIDxTY3JvbGxBbmRGb2N1c0hhbmRsZXIgc2VnbWVudFBhdGg9e3NlZ21lbnRQYXRofT5cbiAgICAgICAgICAgICAgICA8RXJyb3JCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgZXJyb3JDb21wb25lbnQ9e2Vycm9yfVxuICAgICAgICAgICAgICAgICAgZXJyb3JTdHlsZXM9e2Vycm9yU3R5bGVzfVxuICAgICAgICAgICAgICAgICAgZXJyb3JTY3JpcHRzPXtlcnJvclNjcmlwdHN9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPExvYWRpbmdCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICBoYXNMb2FkaW5nPXtCb29sZWFuKGxvYWRpbmcpfVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nPy5bMF19XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTdHlsZXM9e2xvYWRpbmc/LlsxXX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1NjcmlwdHM9e2xvYWRpbmc/LlsyXX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPE5vdEZvdW5kQm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZD17bm90Rm91bmR9XG4gICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmRTdHlsZXM9e25vdEZvdW5kU3R5bGVzfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFJlZGlyZWN0Qm91bmRhcnk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5uZXJMYXlvdXRSb3V0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXJLZXk9e3BhcmFsbGVsUm91dGVyS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9e3VybH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZT17dHJlZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2Rlcz17Y2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyIX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudFBhdGg9e3NlZ21lbnRQYXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUtleT17Y2FjaGVLZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hpbGRTZWdtZW50VmFsdWUgPT09IHByZXNlcnZlZFNlZ21lbnRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUmVkaXJlY3RCb3VuZGFyeT5cbiAgICAgICAgICAgICAgICAgICAgPC9Ob3RGb3VuZEJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgPC9Mb2FkaW5nQm91bmRhcnk+XG4gICAgICAgICAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgICA8L1Njcm9sbEFuZEZvY3VzSGFuZGxlcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGVtcGxhdGVTdHlsZXN9XG4gICAgICAgICAgICB7dGVtcGxhdGVTY3JpcHRzfVxuICAgICAgICAgICAge3RlbXBsYXRlfVxuICAgICAgICAgIDwvVGVtcGxhdGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIk91dGVyTGF5b3V0Um91dGVyIiwid2Fsa0FkZFJlZmV0Y2giLCJzZWdtZW50UGF0aFRvV2FsayIsInRyZWVUb1JlY3JlYXRlIiwic2VnbWVudCIsInBhcmFsbGVsUm91dGVLZXkiLCJpc0xhc3QiLCJsZW5ndGgiLCJtYXRjaFNlZ21lbnQiLCJoYXNPd25Qcm9wZXJ0eSIsInN1YlRyZWUiLCJ1bmRlZmluZWQiLCJzbGljZSIsIl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSIsIlJlYWN0RE9NIiwiZmluZERPTU5vZGUiLCJpbnN0YW5jZSIsIndpbmRvdyIsImludGVybmFsX3JlYWN0RE9NZmluZERPTU5vZGUiLCJyZWN0UHJvcGVydGllcyIsInNob3VsZFNraXBFbGVtZW50IiwiZWxlbWVudCIsImluY2x1ZGVzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInBvc2l0aW9uIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZXZlcnkiLCJpdGVtIiwidG9wT2ZFbGVtZW50SW5WaWV3cG9ydCIsInZpZXdwb3J0SGVpZ2h0IiwidG9wIiwiZ2V0SGFzaEZyYWdtZW50RG9tTm9kZSIsImhhc2hGcmFnbWVudCIsImRvY3VtZW50IiwiYm9keSIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJJbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkTW91bnQiLCJoYW5kbGVQb3RlbnRpYWxTY3JvbGwiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcm9wcyIsImZvY3VzQW5kU2Nyb2xsUmVmIiwiYXBwbHkiLCJyZW5kZXIiLCJjaGlsZHJlbiIsInNlZ21lbnRQYXRoIiwic2VnbWVudFBhdGhzIiwic29tZSIsInNjcm9sbFJlZlNlZ21lbnRQYXRoIiwiaW5kZXgiLCJkb21Ob2RlIiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaGFuZGxlU21vb3RoU2Nyb2xsIiwic2Nyb2xsSW50b1ZpZXciLCJodG1sRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudEhlaWdodCIsInNjcm9sbFRvcCIsImRvbnRGb3JjZUxheW91dCIsIm9ubHlIYXNoQ2hhbmdlIiwiZm9jdXMiLCJTY3JvbGxBbmRGb2N1c0hhbmRsZXIiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJFcnJvciIsIklubmVyTGF5b3V0Um91dGVyIiwicGFyYWxsZWxSb3V0ZXJLZXkiLCJ1cmwiLCJjaGlsZE5vZGVzIiwidHJlZSIsImNhY2hlS2V5IiwiYnVpbGRJZCIsImNoYW5nZUJ5U2VydmVyUmVzcG9uc2UiLCJmdWxsVHJlZSIsImNoaWxkTm9kZSIsImdldCIsIm5ld0xhenlDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwiaGVhZCIsInByZWZldGNoSGVhZCIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwibG9hZGluZyIsInNldCIsInJlc29sdmVkUHJlZmV0Y2hSc2MiLCJ1c2VEZWZlcnJlZFZhbHVlIiwicmVzb2x2ZWRSc2MiLCJ0aGVuIiwidXNlIiwicmVmZXRjaFRyZWUiLCJpbmNsdWRlTmV4dFVybCIsImhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsInNlcnZlclJlc3BvbnNlIiwic3RhcnRUcmFuc2l0aW9uIiwicHJldmlvdXNUcmVlIiwidW5yZXNvbHZlZFRoZW5hYmxlIiwic3VidHJlZSIsIkxheW91dFJvdXRlckNvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiTG9hZGluZ0JvdW5kYXJ5IiwiaGFzTG9hZGluZyIsImxvYWRpbmdTdHlsZXMiLCJsb2FkaW5nU2NyaXB0cyIsIlN1c3BlbnNlIiwiZmFsbGJhY2siLCJlcnJvciIsImVycm9yU3R5bGVzIiwiZXJyb3JTY3JpcHRzIiwidGVtcGxhdGVTdHlsZXMiLCJ0ZW1wbGF0ZVNjcmlwdHMiLCJ0ZW1wbGF0ZSIsIm5vdEZvdW5kIiwibm90Rm91bmRTdHlsZXMiLCJjaGlsZE5vZGVzRm9yUGFyYWxsZWxSb3V0ZXIiLCJ0cmVlU2VnbWVudCIsImN1cnJlbnRDaGlsZFNlZ21lbnRWYWx1ZSIsImdldFNlZ21lbnRWYWx1ZSIsInByZXNlcnZlZFNlZ21lbnRzIiwibWFwIiwicHJlc2VydmVkU2VnbWVudCIsInByZXNlcnZlZFNlZ21lbnRWYWx1ZSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiVGVtcGxhdGVDb250ZXh0IiwiRXJyb3JCb3VuZGFyeSIsImVycm9yQ29tcG9uZW50IiwiQm9vbGVhbiIsIk5vdEZvdW5kQm91bmRhcnkiLCJSZWRpcmVjdEJvdW5kYXJ5IiwiaXNBY3RpdmUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/layout-router.js\n");
|
579
162
|
|
580
163
|
/***/ }),
|
581
164
|
|
@@ -641,7 +224,7 @@ eval("/** @internal */ \nObject.defineProperty(exports, \"__esModule\", ({\n
|
|
641
224
|
/***/ ((module, exports, __webpack_require__) => {
|
642
225
|
|
643
226
|
"use strict";
|
644
|
-
eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"NotFoundBoundary\", ({\n enumerable: true,\n get: function() {\n return NotFoundBoundary;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\"));\nconst _navigationuntracked = __webpack_require__(/*! ./navigation-untracked */ \"(ssr)/./node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(ssr)/./node_modules/next/dist/client/components/not-found.js\");\nconst _warnonce = __webpack_require__(/*! ../../shared/lib/utils/warn-once */ \"(ssr)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js\");\nclass NotFoundErrorBoundary extends _react.default.Component {\n componentDidCatch() {\n if ( true && this.props.missingSlots && // A missing children slot is the typical not-found case, so no need to warn\n !this.props.missingSlots.has('children')) {\n let warningMessage = 'No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n';\n if (this.props.missingSlots.size > 0) {\n const formattedSlots = Array.from(this.props.missingSlots).sort((a, b)=>a.localeCompare(b)).map((slot)=>\"@\" + slot).join(', ');\n warningMessage += 'Missing slots: ' + formattedSlots;\n }\n (0, _warnonce.warnOnce)(warningMessage);\n }\n }\n static getDerivedStateFromError(error) {\n if ((0, _notfound.isNotFoundError)(error)) {\n return {\n notFoundTriggered: true\n };\n }\n // Re-throw if error is not for 404\n throw error;\n }\n static getDerivedStateFromProps(props, state) {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.notFoundTriggered) {\n return {\n notFoundTriggered: false,\n previousPathname: props.pathname\n };\n }\n return {\n notFoundTriggered: state.notFoundTriggered,\n previousPathname: props.pathname\n };\n }\n render() {\n if (this.state.notFoundTriggered) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"robots\",\n content: \"noindex\"\n }),\n true && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"next-error\",\n content: \"not-found\"\n }),\n this.props.notFoundStyles,\n this.props.notFound\n ]\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n notFoundTriggered: !!props.asNotFound,\n previousPathname: props.pathname\n };\n }\n}\nfunction NotFoundBoundary(param) {\n let { notFound, notFoundStyles, asNotFound, children } = param;\n // When we're rendering the missing params shell, this will return null. This\n // is because we won't be rendering any not found boundaries or error\n // boundaries for the missing params shell. When this runs on the client\n // (where these error can occur), we will get the correct pathname.\n const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n const missingSlots = (0, _react.useContext)(_approutercontextsharedruntime.MissingSlotContext);\n if (notFound) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(NotFoundErrorBoundary, {\n pathname: pathname,\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n asNotFound: asNotFound,\n missingSlots: missingSlots,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-boundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7ZUFnSGdCQTs7Ozs7O3FDQTdHcUI7MEJBQ0w7c0NBQ1A7NElBQ1U7QUFvQm5DLE1BQU1DLDhCQUE4QkMsR0FBQUEsbUJBQUFBLENBQUFBLGdLQUFlO0lBWWpERSxFQUFBQSxrQkFBMEI7UUFDeEIsSUFDRUMsUUFBUUMsR0FBRyxDQUFDQztRQUdaLENBQUMsUUFDRDtZQUNBLElBQUlJLEdBQUFBLENBQUFBLFlBQUFBLENBQ0Y7WUFHRixJQUFJLElBQUksQ0FBQ0gsS0FBSyxDQUFDQyxNQUFBQSxNQUFZLENBQUNHLElBQUksR0FBRyxHQUFHO2dCQUNwQyxNQUFNQyxJQUFBQSxDQUFBQSxZQUFpQkMsQ0FBQUEsSUFBQUEsQ0FBTUMsRUFBQUEsRUFBSSxDQUFDO2dCQUtsQ0osTUFBQUEsWUFBa0Isb0JBQW9CRSxDQUFBQSxLQUFBQSxDQUFBQSxZQUFBQSxFQUFBQSxJQUFBQSxDQUFBQSxDQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxhQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxPQUFBQSxNQUFBQSxNQUFBQSxJQUFBQSxDQUFBQTtnQkFDeEM7WUFFQVU7WUFDRjtRQUNGO0lBRUE7UUFDRSxJQUFJRyxJQUFBQSxvQkFBQUEsS0FBZSxFQUFDRDtZQUNsQixPQUFPO2dCQUNMRSxHQUFBQTtnQkFDRjtZQUNGO1FBQ0E7UUFDQSxNQUFNRiw2QkFBQUE7UUFDUjtJQUVBO1FBSUU7Ozs7OztZQU9FLE9BQU87Z0JBQ0xFLEdBQUFBO2dCQUNBSSxrQkFBa0J2QixDQUFBQSxLQUFNc0I7Z0JBQzFCO1lBQ0Y7UUFDQTtZQUNFSCxHQUFBQTtZQUNBSSxrQkFBa0J2QixDQUFBQSxLQUFNc0IsQ0FBQUEsT0FBUTtZQUNsQztRQUNGO0lBRUFFO1FBQ0UsSUFBSTtZQUNGLHFCQUNFOzs7d0JBQ1FFLE1BQUs7d0JBQVNDLE1BQUFBLEdBQVE7O29CQUMzQjlCO29CQW1CVCxLQWxCcUI7d0JBQWE4QixNQUFBQSxHQUFROztvQkFFakM7b0JBQ0EsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNkIsUUFBUTs7O1lBRzFCO1FBRUE7UUFDRjtJQS9FQUU7UUFDRSxLQUFLLENBQUMvQixFQUFBQSxLQUFBQSxDQUFBQTtRQUNOLElBQUksQ0FBQ3FCLENBQUFBLElBQUssR0FBRztZQUNYRixDQUFBQSxLQUFBQSxHQUFBQTtZQUNBSSxrQkFBa0J2QixDQUFBQSxDQUFBQSxDQUFBQSxHQUFNc0IsR0FBQUEsS0FBUTtZQUNsQztRQUNGO0lBMEVGO0FBRU87SUFBMEIsTUFDL0JPLFFBQVEsRUFDUkQsTUFBQUEsS0FBQUEsR0FBYztJQUlkO0lBQ0EscUVBQXFFO0lBQ3JFO0lBQ0EsbUVBQW1FO0lBQ25FLE1BQU1OLFdBQVdXLElBQUFBLHlDQUFvQjtJQUNyQyxNQUFNaEMsV0FBQUEsQ0FBQUEsR0FBZWlDLElBQUFBLGlCQUFVLEVBQUNDLGtCQUFBQTtJQUVoQyxJQUFJTixFQUFBQSxRQUFVO1FBQ1o7WUFFSVAsR0FBQUEsT0FBVUEsSUFBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsWUFBQUEsR0FBQUEsRUFBQUEsdUJBQUFBO1lBQ1ZPLFVBQVVBO1lBQ1ZELFVBQUFBLE1BQWdCQTtZQUNoQkksWUFBWUEsSUFBQUE7WUFDWi9CLFlBQUFBLEVBQWNBO3NCQUViNkIsSUFBQUE7O1FBR1A7SUFFQTtXQUFVQSxPQUFBQSxJQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxZQUFBQSxRQUFBQSxFQUFBQTs7SUFDWiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcc3JjXFxjbGllbnRcXGNvbXBvbmVudHNcXG5vdC1mb3VuZC1ib3VuZGFyeS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VVbnRyYWNrZWRQYXRobmFtZSB9IGZyb20gJy4vbmF2aWdhdGlvbi11bnRyYWNrZWQnXG5pbXBvcnQgeyBpc05vdEZvdW5kRXJyb3IgfSBmcm9tICcuL25vdC1mb3VuZCdcbmltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UnXG5pbXBvcnQgeyBNaXNzaW5nU2xvdENvbnRleHQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcblxuaW50ZXJmYWNlIE5vdEZvdW5kQm91bmRhcnlQcm9wcyB7XG4gIG5vdEZvdW5kPzogUmVhY3QuUmVhY3ROb2RlXG4gIG5vdEZvdW5kU3R5bGVzPzogUmVhY3QuUmVhY3ROb2RlXG4gIGFzTm90Rm91bmQ/OiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgbWlzc2luZ1Nsb3RzPzogU2V0PHN0cmluZz5cbn1cblxuaW50ZXJmYWNlIE5vdEZvdW5kRXJyb3JCb3VuZGFyeVByb3BzIGV4dGVuZHMgTm90Rm91bmRCb3VuZGFyeVByb3BzIHtcbiAgcGF0aG5hbWU6IHN0cmluZyB8IG51bGxcbiAgbWlzc2luZ1Nsb3RzPzogU2V0PHN0cmluZz5cbn1cblxuaW50ZXJmYWNlIE5vdEZvdW5kRXJyb3JCb3VuZGFyeVN0YXRlIHtcbiAgbm90Rm91bmRUcmlnZ2VyZWQ6IGJvb2xlYW5cbiAgcHJldmlvdXNQYXRobmFtZTogc3RyaW5nIHwgbnVsbFxufVxuXG5jbGFzcyBOb3RGb3VuZEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIE5vdEZvdW5kRXJyb3JCb3VuZGFyeVByb3BzLFxuICBOb3RGb3VuZEVycm9yQm91bmRhcnlTdGF0ZVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBOb3RGb3VuZEVycm9yQm91bmRhcnlQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBub3RGb3VuZFRyaWdnZXJlZDogISFwcm9wcy5hc05vdEZvdW5kLFxuICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAgIHRoaXMucHJvcHMubWlzc2luZ1Nsb3RzICYmXG4gICAgICAvLyBBIG1pc3NpbmcgY2hpbGRyZW4gc2xvdCBpcyB0aGUgdHlwaWNhbCBub3QtZm91bmQgY2FzZSwgc28gbm8gbmVlZCB0byB3YXJuXG4gICAgICAhdGhpcy5wcm9wcy5taXNzaW5nU2xvdHMuaGFzKCdjaGlsZHJlbicpXG4gICAgKSB7XG4gICAgICBsZXQgd2FybmluZ01lc3NhZ2UgPVxuICAgICAgICAnTm8gZGVmYXVsdCBjb21wb25lbnQgd2FzIGZvdW5kIGZvciBhIHBhcmFsbGVsIHJvdXRlIHJlbmRlcmVkIG9uIHRoaXMgcGFnZS4gRmFsbGluZyBiYWNrIHRvIG5lYXJlc3QgTm90Rm91bmQgYm91bmRhcnkuXFxuJyArXG4gICAgICAgICdMZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3BhcmFsbGVsLXJvdXRlcyNkZWZhdWx0anNcXG5cXG4nXG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm1pc3NpbmdTbG90cy5zaXplID4gMCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRTbG90cyA9IEFycmF5LmZyb20odGhpcy5wcm9wcy5taXNzaW5nU2xvdHMpXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgICAgICAubWFwKChzbG90KSA9PiBgQCR7c2xvdH1gKVxuICAgICAgICAgIC5qb2luKCcsICcpXG5cbiAgICAgICAgd2FybmluZ01lc3NhZ2UgKz0gJ01pc3Npbmcgc2xvdHM6ICcgKyBmb3JtYXR0ZWRTbG90c1xuICAgICAgfVxuXG4gICAgICB3YXJuT25jZSh3YXJuaW5nTWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoaXNOb3RGb3VuZEVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm90Rm91bmRUcmlnZ2VyZWQ6IHRydWUsXG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlLXRocm93IGlmIGVycm9yIGlzIG5vdCBmb3IgNDA0XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgcHJvcHM6IE5vdEZvdW5kRXJyb3JCb3VuZGFyeVByb3BzLFxuICAgIHN0YXRlOiBOb3RGb3VuZEVycm9yQm91bmRhcnlTdGF0ZVxuICApOiBOb3RGb3VuZEVycm9yQm91bmRhcnlTdGF0ZSB8IG51bGwge1xuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcmVzZXQgb2YgdGhlIGVycm9yIGJvdW5kYXJ5IHdoZW4gYSBuYXZpZ2F0aW9uIGhhcHBlbnMuXG4gICAgICogRW5zdXJlcyB0aGUgZXJyb3IgYm91bmRhcnkgZG9lcyBub3Qgc3RheSBlbmFibGVkIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLlxuICAgICAqIEFwcHJvYWNoIG9mIHNldFN0YXRlIGluIHJlbmRlciBpcyBzYWZlIGFzIGl0IGNoZWNrcyB0aGUgcHJldmlvdXMgcGF0aG5hbWUgYW5kIHRoZW4gb3ZlcnJpZGVzXG4gICAgICogaXQgYXMgb3V0bGluZWQgaW4gaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVN0YXRlI3N0b3JpbmctaW5mb3JtYXRpb24tZnJvbS1wcmV2aW91cy1yZW5kZXJzXG4gICAgICovXG4gICAgaWYgKHByb3BzLnBhdGhuYW1lICE9PSBzdGF0ZS5wcmV2aW91c1BhdGhuYW1lICYmIHN0YXRlLm5vdEZvdW5kVHJpZ2dlcmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub3RGb3VuZFRyaWdnZXJlZDogZmFsc2UsXG4gICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbm90Rm91bmRUcmlnZ2VyZWQ6IHN0YXRlLm5vdEZvdW5kVHJpZ2dlcmVkLFxuICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLm5vdEZvdW5kVHJpZ2dlcmVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleFwiIC8+XG4gICAgICAgICAge3Byb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIChcbiAgICAgICAgICAgIDxtZXRhIG5hbWU9XCJuZXh0LWVycm9yXCIgY29udGVudD1cIm5vdC1mb3VuZFwiIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5ub3RGb3VuZFN0eWxlc31cbiAgICAgICAgICB7dGhpcy5wcm9wcy5ub3RGb3VuZH1cbiAgICAgICAgPC8+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTm90Rm91bmRCb3VuZGFyeSh7XG4gIG5vdEZvdW5kLFxuICBub3RGb3VuZFN0eWxlcyxcbiAgYXNOb3RGb3VuZCxcbiAgY2hpbGRyZW4sXG59OiBOb3RGb3VuZEJvdW5kYXJ5UHJvcHMpIHtcbiAgLy8gV2hlbiB3ZSdyZSByZW5kZXJpbmcgdGhlIG1pc3NpbmcgcGFyYW1zIHNoZWxsLCB0aGlzIHdpbGwgcmV0dXJuIG51bGwuIFRoaXNcbiAgLy8gaXMgYmVjYXVzZSB3ZSB3b24ndCBiZSByZW5kZXJpbmcgYW55IG5vdCBmb3VuZCBib3VuZGFyaWVzIG9yIGVycm9yXG4gIC8vIGJvdW5kYXJpZXMgZm9yIHRoZSBtaXNzaW5nIHBhcmFtcyBzaGVsbC4gV2hlbiB0aGlzIHJ1bnMgb24gdGhlIGNsaWVudFxuICAvLyAod2hlcmUgdGhlc2UgZXJyb3IgY2FuIG9jY3VyKSwgd2Ugd2lsbCBnZXQgdGhlIGNvcnJlY3QgcGF0aG5hbWUuXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlVW50cmFja2VkUGF0aG5hbWUoKVxuICBjb25zdCBtaXNzaW5nU2xvdHMgPSB1c2VDb250ZXh0KE1pc3NpbmdTbG90Q29udGV4dClcblxuICBpZiAobm90Rm91bmQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE5vdEZvdW5kRXJyb3JCb3VuZGFyeVxuICAgICAgICBwYXRobmFtZT17cGF0aG5hbWV9XG4gICAgICAgIG5vdEZvdW5kPXtub3RGb3VuZH1cbiAgICAgICAgbm90Rm91bmRTdHlsZXM9e25vdEZvdW5kU3R5bGVzfVxuICAgICAgICBhc05vdEZvdW5kPXthc05vdEZvdW5kfVxuICAgICAgICBtaXNzaW5nU2xvdHM9e21pc3NpbmdTbG90c31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9Ob3RGb3VuZEVycm9yQm91bmRhcnk+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPlxufVxuIl0sIm5hbWVzIjpbIk5vdEZvdW5kQm91bmRhcnkiLCJOb3RGb3VuZEVycm9yQm91bmRhcnkiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZENhdGNoIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcHMiLCJtaXNzaW5nU2xvdHMiLCJoYXMiLCJ3YXJuaW5nTWVzc2FnZSIsInNpemUiLCJmb3JtYXR0ZWRTbG90cyIsIkFycmF5IiwiZnJvbSIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYXAiLCJzbG90Iiwiam9pbiIsIndhcm5PbmNlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiZXJyb3IiLCJpc05vdEZvdW5kRXJyb3IiLCJub3RGb3VuZFRyaWdnZXJlZCIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsInN0YXRlIiwicGF0aG5hbWUiLCJwcmV2aW91c1BhdGhuYW1lIiwicmVuZGVyIiwibWV0YSIsIm5hbWUiLCJjb250ZW50Iiwibm90Rm91bmRTdHlsZXMiLCJub3RGb3VuZCIsImNoaWxkcmVuIiwiY29uc3RydWN0b3IiLCJhc05vdEZvdW5kIiwidXNlVW50cmFja2VkUGF0aG5hbWUiLCJ1c2VDb250ZXh0IiwiTWlzc2luZ1Nsb3RDb250ZXh0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\n");
|
227
|
+
eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"NotFoundBoundary\", ({\n enumerable: true,\n get: function() {\n return NotFoundBoundary;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\"));\nconst _navigationuntracked = __webpack_require__(/*! ./navigation-untracked */ \"(ssr)/./node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(ssr)/./node_modules/next/dist/client/components/not-found.js\");\nconst _warnonce = __webpack_require__(/*! ../../shared/lib/utils/warn-once */ \"(ssr)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js\");\nclass NotFoundErrorBoundary extends _react.default.Component {\n componentDidCatch() {\n if ( true && this.props.missingSlots && // A missing children slot is the typical not-found case, so no need to warn\n !this.props.missingSlots.has('children')) {\n let warningMessage = 'No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n';\n if (this.props.missingSlots.size > 0) {\n const formattedSlots = Array.from(this.props.missingSlots).sort((a, b)=>a.localeCompare(b)).map((slot)=>\"@\" + slot).join(', ');\n warningMessage += 'Missing slots: ' + formattedSlots;\n }\n (0, _warnonce.warnOnce)(warningMessage);\n }\n }\n static getDerivedStateFromError(error) {\n if ((0, _notfound.isNotFoundError)(error)) {\n return {\n notFoundTriggered: true\n };\n }\n // Re-throw if error is not for 404\n throw error;\n }\n static getDerivedStateFromProps(props, state) {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.notFoundTriggered) {\n return {\n notFoundTriggered: false,\n previousPathname: props.pathname\n };\n }\n return {\n notFoundTriggered: state.notFoundTriggered,\n previousPathname: props.pathname\n };\n }\n render() {\n if (this.state.notFoundTriggered) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"robots\",\n content: \"noindex\"\n }),\n true && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"next-error\",\n content: \"not-found\"\n }),\n this.props.notFoundStyles,\n this.props.notFound\n ]\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n notFoundTriggered: !!props.asNotFound,\n previousPathname: props.pathname\n };\n }\n}\nfunction NotFoundBoundary(param) {\n let { notFound, notFoundStyles, asNotFound, children } = param;\n // When we're rendering the missing params shell, this will return null. This\n // is because we won't be rendering any not found boundaries or error\n // boundaries for the missing params shell. When this runs on the client\n // (where these error can occur), we will get the correct pathname.\n const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n const missingSlots = (0, _react.useContext)(_approutercontextsharedruntime.MissingSlotContext);\n if (notFound) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(NotFoundErrorBoundary, {\n pathname: pathname,\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n asNotFound: asNotFound,\n missingSlots: missingSlots,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-boundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7ZUFnSGdCQTs7Ozs7O3FDQTdHcUI7MEJBQ0w7c0NBQ1A7NElBQ1U7QUFvQm5DLE1BQU1DLDhCQUE4QkMsR0FBQUEsbUJBQUFBLENBQUFBLGdLQUFlO0lBWWpERSxFQUFBQSxrQkFBMEI7UUFDeEIsSUFDRUMsUUFBUUMsR0FBRyxDQUFDQztRQUdaLENBQUMsUUFDRDtZQUNBLElBQUlJLEdBQUFBLENBQUFBLFlBQUFBLENBQ0Y7WUFHRixJQUFJLElBQUksQ0FBQ0gsS0FBSyxDQUFDQyxNQUFBQSxNQUFZLENBQUNHLElBQUksR0FBRyxHQUFHO2dCQUNwQyxNQUFNQyxJQUFBQSxDQUFBQSxZQUFpQkMsQ0FBQUEsSUFBQUEsQ0FBTUMsRUFBQUEsRUFBSSxDQUFDO2dCQUtsQ0osTUFBQUEsWUFBa0Isb0JBQW9CRSxDQUFBQSxLQUFBQSxDQUFBQSxZQUFBQSxFQUFBQSxJQUFBQSxDQUFBQSxDQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxhQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxPQUFBQSxNQUFBQSxNQUFBQSxJQUFBQSxDQUFBQTtnQkFDeEM7WUFFQVU7WUFDRjtRQUNGO0lBRUE7UUFDRSxJQUFJRyxJQUFBQSxvQkFBQUEsS0FBZSxFQUFDRDtZQUNsQixPQUFPO2dCQUNMRSxHQUFBQTtnQkFDRjtZQUNGO1FBQ0E7UUFDQSxNQUFNRiw2QkFBQUE7UUFDUjtJQUVBO1FBSUU7Ozs7OztZQU9FLE9BQU87Z0JBQ0xFLEdBQUFBO2dCQUNBSSxrQkFBa0J2QixDQUFBQSxLQUFNc0I7Z0JBQzFCO1lBQ0Y7UUFDQTtZQUNFSCxHQUFBQTtZQUNBSSxrQkFBa0J2QixDQUFBQSxLQUFNc0IsQ0FBQUEsT0FBUTtZQUNsQztRQUNGO0lBRUFFO1FBQ0UsSUFBSTtZQUNGLHFCQUNFOzs7d0JBQ1FFLE1BQUs7d0JBQVNDLE1BQUFBLEdBQVE7O29CQUMzQjlCO3lCQUNZO3dCQUFhOEIsTUFBQUEsR0FBUTs7b0JBRWpDO29CQUNBLElBQUksQ0FBQzNCLEtBQUssQ0FBQzZCLFFBQVE7OztZQUcxQjtRQUVBO1FBQ0Y7SUEvRUFFO1FBQ0UsS0FBSyxDQUFDL0IsRUFBQUEsS0FBQUEsQ0FBQUE7UUFDTixJQUFJLENBQUNxQixDQUFBQSxJQUFLLEdBQUc7WUFDWEYsQ0FBQUEsS0FBQUEsR0FBQUE7WUFDQUksa0JBQWtCdkIsQ0FBQUEsQ0FBQUEsQ0FBQUEsR0FBTXNCLEdBQUFBLEtBQVE7WUFDbEM7UUFDRjtJQTBFRjtBQUVPO0lBQTBCLE1BQy9CTyxRQUFRLEVBQ1JELE1BQUFBLEtBQUFBLEdBQWM7SUFJZDtJQUNBLHFFQUFxRTtJQUNyRTtJQUNBLG1FQUFtRTtJQUNuRSxNQUFNTixXQUFXVyxJQUFBQSx5Q0FBb0I7SUFDckMsTUFBTWhDLFdBQUFBLENBQUFBLEdBQWVpQyxJQUFBQSxpQkFBVSxFQUFDQyxrQkFBQUE7SUFFaEMsSUFBSU4sRUFBQUEsUUFBVTtRQUNaO1lBRUlQLEdBQUFBLE9BQVVBLElBQUFBLEdBQUFBLENBQUFBLEdBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLHVCQUFBQTtZQUNWTyxVQUFVQTtZQUNWRCxVQUFBQSxNQUFnQkE7WUFDaEJJLFlBQVlBLElBQUFBO1lBQ1ovQixZQUFBQSxFQUFjQTtzQkFFYjZCLElBQUFBOztRQUdQO0lBRUE7V0FBVUEsT0FBQUEsSUFBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsWUFBQUEsR0FBQUEsRUFBQUEsWUFBQUEsUUFBQUEsRUFBQUE7O0lBQ1oiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXHNyY1xcY2xpZW50XFxjb21wb25lbnRzXFxub3QtZm91bmQtYm91bmRhcnkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVW50cmFja2VkUGF0aG5hbWUgfSBmcm9tICcuL25hdmlnYXRpb24tdW50cmFja2VkJ1xuaW1wb3J0IHsgaXNOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi9ub3QtZm91bmQnXG5pbXBvcnQgeyB3YXJuT25jZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvdXRpbHMvd2Fybi1vbmNlJ1xuaW1wb3J0IHsgTWlzc2luZ1Nsb3RDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5cbmludGVyZmFjZSBOb3RGb3VuZEJvdW5kYXJ5UHJvcHMge1xuICBub3RGb3VuZD86IFJlYWN0LlJlYWN0Tm9kZVxuICBub3RGb3VuZFN0eWxlcz86IFJlYWN0LlJlYWN0Tm9kZVxuICBhc05vdEZvdW5kPzogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIG1pc3NpbmdTbG90cz86IFNldDxzdHJpbmc+XG59XG5cbmludGVyZmFjZSBOb3RGb3VuZEVycm9yQm91bmRhcnlQcm9wcyBleHRlbmRzIE5vdEZvdW5kQm91bmRhcnlQcm9wcyB7XG4gIHBhdGhuYW1lOiBzdHJpbmcgfCBudWxsXG4gIG1pc3NpbmdTbG90cz86IFNldDxzdHJpbmc+XG59XG5cbmludGVyZmFjZSBOb3RGb3VuZEVycm9yQm91bmRhcnlTdGF0ZSB7XG4gIG5vdEZvdW5kVHJpZ2dlcmVkOiBib29sZWFuXG4gIHByZXZpb3VzUGF0aG5hbWU6IHN0cmluZyB8IG51bGxcbn1cblxuY2xhc3MgTm90Rm91bmRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBOb3RGb3VuZEVycm9yQm91bmRhcnlQcm9wcyxcbiAgTm90Rm91bmRFcnJvckJvdW5kYXJ5U3RhdGVcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogTm90Rm91bmRFcnJvckJvdW5kYXJ5UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcylcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbm90Rm91bmRUcmlnZ2VyZWQ6ICEhcHJvcHMuYXNOb3RGb3VuZCxcbiAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZENhdGNoKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmXG4gICAgICB0aGlzLnByb3BzLm1pc3NpbmdTbG90cyAmJlxuICAgICAgLy8gQSBtaXNzaW5nIGNoaWxkcmVuIHNsb3QgaXMgdGhlIHR5cGljYWwgbm90LWZvdW5kIGNhc2UsIHNvIG5vIG5lZWQgdG8gd2FyblxuICAgICAgIXRoaXMucHJvcHMubWlzc2luZ1Nsb3RzLmhhcygnY2hpbGRyZW4nKVxuICAgICkge1xuICAgICAgbGV0IHdhcm5pbmdNZXNzYWdlID1cbiAgICAgICAgJ05vIGRlZmF1bHQgY29tcG9uZW50IHdhcyBmb3VuZCBmb3IgYSBwYXJhbGxlbCByb3V0ZSByZW5kZXJlZCBvbiB0aGlzIHBhZ2UuIEZhbGxpbmcgYmFjayB0byBuZWFyZXN0IE5vdEZvdW5kIGJvdW5kYXJ5LlxcbicgK1xuICAgICAgICAnTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9wYXJhbGxlbC1yb3V0ZXMjZGVmYXVsdGpzXFxuXFxuJ1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5taXNzaW5nU2xvdHMuc2l6ZSA+IDApIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkU2xvdHMgPSBBcnJheS5mcm9tKHRoaXMucHJvcHMubWlzc2luZ1Nsb3RzKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgICAgICAgLm1hcCgoc2xvdCkgPT4gYEAke3Nsb3R9YClcbiAgICAgICAgICAuam9pbignLCAnKVxuXG4gICAgICAgIHdhcm5pbmdNZXNzYWdlICs9ICdNaXNzaW5nIHNsb3RzOiAnICsgZm9ybWF0dGVkU2xvdHNcbiAgICAgIH1cblxuICAgICAgd2Fybk9uY2Uod2FybmluZ01lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogYW55KSB7XG4gICAgaWYgKGlzTm90Rm91bmRFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vdEZvdW5kVHJpZ2dlcmVkOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZS10aHJvdyBpZiBlcnJvciBpcyBub3QgZm9yIDQwNFxuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgIHByb3BzOiBOb3RGb3VuZEVycm9yQm91bmRhcnlQcm9wcyxcbiAgICBzdGF0ZTogTm90Rm91bmRFcnJvckJvdW5kYXJ5U3RhdGVcbiAgKTogTm90Rm91bmRFcnJvckJvdW5kYXJ5U3RhdGUgfCBudWxsIHtcbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHJlc2V0IG9mIHRoZSBlcnJvciBib3VuZGFyeSB3aGVuIGEgbmF2aWdhdGlvbiBoYXBwZW5zLlxuICAgICAqIEVuc3VyZXMgdGhlIGVycm9yIGJvdW5kYXJ5IGRvZXMgbm90IHN0YXkgZW5hYmxlZCB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZS5cbiAgICAgKiBBcHByb2FjaCBvZiBzZXRTdGF0ZSBpbiByZW5kZXIgaXMgc2FmZSBhcyBpdCBjaGVja3MgdGhlIHByZXZpb3VzIHBhdGhuYW1lIGFuZCB0aGVuIG92ZXJyaWRlc1xuICAgICAqIGl0IGFzIG91dGxpbmVkIGluIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VTdGF0ZSNzdG9yaW5nLWluZm9ybWF0aW9uLWZyb20tcHJldmlvdXMtcmVuZGVyc1xuICAgICAqL1xuICAgIGlmIChwcm9wcy5wYXRobmFtZSAhPT0gc3RhdGUucHJldmlvdXNQYXRobmFtZSAmJiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm90Rm91bmRUcmlnZ2VyZWQ6IGZhbHNlLFxuICAgICAgICBwcmV2aW91c1BhdGhuYW1lOiBwcm9wcy5wYXRobmFtZSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vdEZvdW5kVHJpZ2dlcmVkOiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCxcbiAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8bWV0YSBuYW1lPVwicm9ib3RzXCIgY29udGVudD1cIm5vaW5kZXhcIiAvPlxuICAgICAgICAgIHtwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiAoXG4gICAgICAgICAgICA8bWV0YSBuYW1lPVwibmV4dC1lcnJvclwiIGNvbnRlbnQ9XCJub3QtZm91bmRcIiAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3RoaXMucHJvcHMubm90Rm91bmRTdHlsZXN9XG4gICAgICAgICAge3RoaXMucHJvcHMubm90Rm91bmR9XG4gICAgICAgIDwvPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5vdEZvdW5kQm91bmRhcnkoe1xuICBub3RGb3VuZCxcbiAgbm90Rm91bmRTdHlsZXMsXG4gIGFzTm90Rm91bmQsXG4gIGNoaWxkcmVuLFxufTogTm90Rm91bmRCb3VuZGFyeVByb3BzKSB7XG4gIC8vIFdoZW4gd2UncmUgcmVuZGVyaW5nIHRoZSBtaXNzaW5nIHBhcmFtcyBzaGVsbCwgdGhpcyB3aWxsIHJldHVybiBudWxsLiBUaGlzXG4gIC8vIGlzIGJlY2F1c2Ugd2Ugd29uJ3QgYmUgcmVuZGVyaW5nIGFueSBub3QgZm91bmQgYm91bmRhcmllcyBvciBlcnJvclxuICAvLyBib3VuZGFyaWVzIGZvciB0aGUgbWlzc2luZyBwYXJhbXMgc2hlbGwuIFdoZW4gdGhpcyBydW5zIG9uIHRoZSBjbGllbnRcbiAgLy8gKHdoZXJlIHRoZXNlIGVycm9yIGNhbiBvY2N1ciksIHdlIHdpbGwgZ2V0IHRoZSBjb3JyZWN0IHBhdGhuYW1lLlxuICBjb25zdCBwYXRobmFtZSA9IHVzZVVudHJhY2tlZFBhdGhuYW1lKClcbiAgY29uc3QgbWlzc2luZ1Nsb3RzID0gdXNlQ29udGV4dChNaXNzaW5nU2xvdENvbnRleHQpXG5cbiAgaWYgKG5vdEZvdW5kKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxOb3RGb3VuZEVycm9yQm91bmRhcnlcbiAgICAgICAgcGF0aG5hbWU9e3BhdGhuYW1lfVxuICAgICAgICBub3RGb3VuZD17bm90Rm91bmR9XG4gICAgICAgIG5vdEZvdW5kU3R5bGVzPXtub3RGb3VuZFN0eWxlc31cbiAgICAgICAgYXNOb3RGb3VuZD17YXNOb3RGb3VuZH1cbiAgICAgICAgbWlzc2luZ1Nsb3RzPXttaXNzaW5nU2xvdHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvTm90Rm91bmRFcnJvckJvdW5kYXJ5PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiA8PntjaGlsZHJlbn08Lz5cbn1cbiJdLCJuYW1lcyI6WyJOb3RGb3VuZEJvdW5kYXJ5IiwiTm90Rm91bmRFcnJvckJvdW5kYXJ5IiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb21wb25lbnREaWRDYXRjaCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3BzIiwibWlzc2luZ1Nsb3RzIiwiaGFzIiwid2FybmluZ01lc3NhZ2UiLCJzaXplIiwiZm9ybWF0dGVkU2xvdHMiLCJBcnJheSIsImZyb20iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFwIiwic2xvdCIsImpvaW4iLCJ3YXJuT25jZSIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImVycm9yIiwiaXNOb3RGb3VuZEVycm9yIiwibm90Rm91bmRUcmlnZ2VyZWQiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJzdGF0ZSIsInBhdGhuYW1lIiwicHJldmlvdXNQYXRobmFtZSIsInJlbmRlciIsIm1ldGEiLCJuYW1lIiwiY29udGVudCIsIm5vdEZvdW5kU3R5bGVzIiwibm90Rm91bmQiLCJjaGlsZHJlbiIsImNvbnN0cnVjdG9yIiwiYXNOb3RGb3VuZCIsInVzZVVudHJhY2tlZFBhdGhuYW1lIiwidXNlQ29udGV4dCIsIk1pc3NpbmdTbG90Q29udGV4dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\n");
|
645
228
|
|
646
229
|
/***/ }),
|
647
230
|
|
@@ -1477,7 +1060,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
1477
1060
|
/***/ ((module, exports, __webpack_require__) => {
|
1478
1061
|
|
1479
1062
|
"use strict";
|
1480
|
-
eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fetchServerResponse\", ({\n enumerable: true,\n get: function() {\n return fetchServerResponse;\n }\n}));\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(ssr)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _appcallserver = __webpack_require__(/*! ../../app-call-server */ \"(ssr)/./node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ../../app-find-source-map-url */ \"(ssr)/./node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _hash = __webpack_require__(/*! ../../../shared/lib/hash */ \"(ssr)/./node_modules/next/dist/shared/lib/hash.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(ssr)/./node_modules/next/dist/client/flight-data-helpers.js\");\n// @ts-ignore\n// eslint-disable-next-line import/no-extraneous-dependencies\n// import { createFromReadableStream } from 'react-server-dom-webpack/client'\nconst { createFromReadableStream } = true ? __webpack_require__(/*! react-server-dom-webpack/client.edge */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client-edge.js\") : 0;\nfunction urlToUrlWithoutFlightMarker(url) {\n const urlWithoutFlightParameters = new URL(url, location.origin);\n urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n if (false) {}\n return urlWithoutFlightParameters;\n}\nfunction doMpaNavigation(url) {\n return {\n flightData: urlToUrlWithoutFlightMarker(url).toString(),\n canonicalUrl: undefined,\n couldBeIntercepted: false,\n prerendered: false,\n postponed: false,\n staleTime: -1\n };\n}\nasync function fetchServerResponse(url, options) {\n const { flightRouterState, nextUrl, buildId, prefetchKind } = options;\n const headers = {\n // Enable flight response\n [_approuterheaders.RSC_HEADER]: '1',\n // Provide the current router state\n [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: encodeURIComponent(JSON.stringify(flightRouterState))\n };\n /**\n * Three cases:\n * - `prefetchKind` is `undefined`, it means it's a normal navigation, so we want to prefetch the page data fully\n * - `prefetchKind` is `full` - we want to prefetch the whole page so same as above\n * - `prefetchKind` is `auto` - if the page is dynamic, prefetch the page data partially, if static prefetch the page data fully\n */ if (prefetchKind === _routerreducertypes.PrefetchKind.AUTO) {\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1';\n }\n if ( true && options.isHmrRefresh) {\n headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] = '1';\n }\n if (nextUrl) {\n headers[_approuterheaders.NEXT_URL] = nextUrl;\n }\n if (false) {}\n const uniqueCacheQuery = (0, _hash.hexHash)([\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] || '0',\n headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER],\n headers[_approuterheaders.NEXT_URL]\n ].join(','));\n try {\n var _res_headers_get;\n let fetchUrl = new URL(url);\n if (false) {}\n // Add unique cache query to avoid caching conflicts on CDN which don't respect the Vary header\n fetchUrl.searchParams.set(_approuterheaders.NEXT_RSC_UNION_QUERY, uniqueCacheQuery);\n // When creating a \"temporary\" prefetch (the \"on-demand\" prefetch that gets created on navigation, if one doesn't exist)\n // we send the request with a \"high\" priority as it's in response to a user interaction that could be blocking a transition.\n // Otherwise, all other prefetches are sent with a \"low\" priority.\n // We use \"auto\" for in all other cases to match the existing default, as this function is shared outside of prefetching.\n const fetchPriority = prefetchKind ? prefetchKind === _routerreducertypes.PrefetchKind.TEMPORARY ? 'high' : 'low' : 'auto';\n if (false) {}\n const res = await fetch(fetchUrl, {\n // Backwards compat for older browsers. `same-origin` is the default in modern browsers.\n credentials: 'same-origin',\n headers,\n priority: fetchPriority\n });\n const responseUrl = urlToUrlWithoutFlightMarker(res.url);\n const canonicalUrl = res.redirected ? responseUrl : undefined;\n const contentType = res.headers.get('content-type') || '';\n const interception = !!((_res_headers_get = res.headers.get('vary')) == null ? void 0 : _res_headers_get.includes(_approuterheaders.NEXT_URL));\n const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER);\n const staleTimeHeader = res.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER);\n const staleTime = staleTimeHeader !== null ? parseInt(staleTimeHeader, 10) : -1;\n let isFlightResponse = contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER);\n if (false) {}\n // If fetch returns something different than flight response handle it like a mpa navigation\n // If the fetch was not 200, we also handle it like a mpa navigation\n if (!isFlightResponse || !res.ok || !res.body) {\n // in case the original URL came with a hash, preserve it before redirecting to the new URL\n if (url.hash) {\n responseUrl.hash = url.hash;\n }\n return doMpaNavigation(responseUrl.toString());\n }\n // We may navigate to a page that requires a different Webpack runtime.\n // In prod, every page will have the same Webpack runtime.\n // In dev, the Webpack runtime is minimal for each page.\n // We need to ensure the Webpack runtime is updated before executing client-side JS of the new page.\n if (true) {\n await (__webpack_require__(/*! ../react-dev-overlay/app/hot-reloader-client */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/app/hot-reloader-client.js\").waitForWebpackRuntimeHotUpdate)();\n }\n // Handle the `fetch` readable stream that can be unwrapped by `React.use`.\n const flightStream = postponed ? createUnclosingPrefetchStream(res.body) : res.body;\n const response = await createFromReadableStream(flightStream, {\n callServer: _appcallserver.callServer,\n findSourceMapURL: _appfindsourcemapurl.findSourceMapURL\n });\n if (buildId !== response.b) {\n return doMpaNavigation(res.url);\n }\n return {\n flightData: (0, _flightdatahelpers.normalizeFlightData)(response.f),\n canonicalUrl: canonicalUrl,\n couldBeIntercepted: interception,\n prerendered: response.S,\n postponed,\n staleTime\n };\n } catch (err) {\n console.error(\"Failed to fetch RSC payload for \" + url + \". Falling back to browser navigation.\", err);\n // If fetch fails handle it like a mpa navigation\n // TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response.\n // See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction.\n return {\n flightData: url.toString(),\n canonicalUrl: undefined,\n couldBeIntercepted: false,\n prerendered: false,\n postponed: false,\n staleTime: -1\n };\n }\n}\nfunction createUnclosingPrefetchStream(originalFlightStream) {\n // When PPR is enabled, prefetch streams may contain references that never\n // resolve, because that's how we encode dynamic data access. In the decoded\n // object returned by the Flight client, these are reified into hanging\n // promises that suspend during render, which is effectively what we want.\n // The UI resolves when it switches to the dynamic data stream\n // (via useDeferredValue(dynamic, static)).\n //\n // However, the Flight implementation currently errors if the server closes\n // the response before all the references are resolved. As a cheat to work\n // around this, we wrap the original stream in a new stream that never closes,\n // and therefore doesn't error.\n const reader = originalFlightStream.getReader();\n return new ReadableStream({\n async pull (controller) {\n while(true){\n const { done, value } = await reader.read();\n if (!done) {\n // Pass to the target stream and keep consuming the Flight response\n // from the server.\n controller.enqueue(value);\n continue;\n }\n // The server stream has closed. Exit, but intentionally do not close\n // the target stream.\n return;\n }\n }\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fetch-server-response.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZldGNoLXNlcnZlci1yZXNwb25zZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7ZUFzRnNCQTs7Ozs2Q0ExREs7a0lBQ007Z0RBQ0o7c0JBQ0w7cUhBSWpCO0FBakNQLGFBQWE7QUFDYjtBQUNBO0FBQ0EsTUFBTSxFQUFFQyx3QkFBd0IsRUFBRSxHQUNoQyxDQUFDLENBQUNDLFFBQVFDLEdBQUcsQ0FBQ0MsWUFBWSxHQUV0QkMsUUFBUTtBQThDZCxTQUFTQyx1QkFBQUEsRUFBQUEsR0FBNEJDLEtBQVc7SUFDOUMsTUFBTUMsMkJBQUFBLEVBQTZCLElBQUlDO0lBQ3ZDRCxNQUFBQSxxQkFBMkJJLFFBQUFBLElBQVksQ0FBQ0MsR0FBQUEsR0FBTSxDQUFDQyxDQUFBQSxTQUFBQSxNQUFBQTtJQUMvQyxJQUFJWixRQUFRQyxHQUFHLENBQUNZLFFBQVEsS0FBSyxjQUFjO1FBQ3pDLEtBQ2tDLElBU3BDO0lBQ0Y7QUFFQTtJQUNFLE9BQU87UUFDTE8sR0FBQUE7UUFDQUUsWUFBQUEsRUFBY0MsMEJBQUFBLEtBQUFBLFFBQUFBO1FBQ2RDLGNBQUFBLE1BQW9CO1FBQ3BCQyxhQUFhO1FBQ2JDLFdBQVc7UUFDWEMsV0FBVyxDQUFDO1FBQ2Q7SUFDRjtBQU1PO0lBSUwsTUFBTSxFQUFFRSxHQUFBQSxjQUFpQixFQUFFQyxJQUFBQSxHQUFPLEVBQUVDLE9BQU8sRUFBRUM7SUFFN0MsTUFBTUMsRUFBQUEsUUFTRjtRQUNGO1FBQ0EsQ0FBQ0Msd0JBQUFBO1FBQ0QsbUNBQW1DO1FBQ25DLENBQUNDLGtDQUFBQTtRQUdIO0lBRUE7Ozs7OztRQU9FRixFQUFBQSxLQUFPLENBQUNRLFdBQUFBLG9CQUFBQSxZQUFBQSxDQUFBQSxDQUEyQixDQUFDLEdBQUc7UUFDekM7SUFFQTtRQUNFUixLQUFRVSxJQUFBQSxPQUF1QixDQUFDLEdBQUc7UUFDckM7SUFFQTtRQUNFVixPQUFP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O1lBQ0FFLFlBQUFBLENBQUFBLENBQWNBLEVBQUFBLG1CQUFBQSxtQkFBQUEsRUFBQUEsU0FBQUEsQ0FBQUE7WUFDZEUsY0FBQUEsTUFBb0JzQztZQUNwQnJDLGFBQWFxRCxPQUFBQSxFQUFTTSxDQUFDO1lBQ3ZCMUQsYUFBQUEsU0FBQUEsQ0FBQUE7WUFDQUM7WUFDRjtRQUNBO1FBQ0EyRCxLQUFBQSxHQUFRQyxFQUFBQTtRQUlSLGlEQUFpRDtRQUNqRDtRQUNBLGlHQUFpRztRQUNqRyxPQUFPO1lBQ0xuRSxHQUFBQTtZQUNBRSxZQUFBQSxFQUFjQyxFQUFBQSxRQUFBQTtZQUNkQyxjQUFBQSxNQUFvQjtZQUNwQkMsYUFBYTtZQUNiQyxXQUFXO1lBQ1hDLFdBQVcsQ0FBQztZQUNkO1FBQ0Y7SUFDRjtBQUVBO0lBR0U7SUFDQTtJQUNBLHVFQUF1RTtJQUN2RTtJQUNBLDhEQUE4RDtJQUM5RCwyQ0FBMkM7SUFDM0MsRUFBRTtJQUNGO0lBQ0EsMEVBQTBFO0lBQzFFO0lBQ0EsK0JBQStCO0lBQy9CLE1BQU04RCxTQUFTRCxnQkFBQUE7SUFDZixPQUFPLElBQUlHLElBQUFBLFdBQWU7UUFDeEIsTUFBTUMsQ0FBQUEsS0FBS0MsVUFBVTtZQUNuQixNQUFPLEtBQU07Z0JBQ1gsTUFBTSxFQUFFQztnQkFDUixJQUFJLENBQUNBLENBQUFBLEVBQUFBLEdBQU07b0JBQ1Q7b0JBQ0EsbUJBQW1CO29CQUNuQkQsV0FBV0ksT0FBTyxDQUFDRjtvQkFDbkI7b0JBQ0Y7Z0JBQ0E7Z0JBQ0EscUJBQXFCO2dCQUNyQjtnQkFDRjtZQUNGO1FBQ0Y7SUFDRiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxzcmNcXGNsaWVudFxcY29tcG9uZW50c1xccm91dGVyLXJlZHVjZXJcXGZldGNoLXNlcnZlci1yZXNwb25zZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuLy8gQHRzLWlnbm9yZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuLy8gaW1wb3J0IHsgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtIH0gZnJvbSAncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCdcbmNvbnN0IHsgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtIH0gPSAoXG4gICEhcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FXG4gICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG4gICAgICByZXF1aXJlKCdyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmVkZ2UnKVxuICAgIDogLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuICAgICAgcmVxdWlyZSgncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCcpXG4pIGFzIHR5cGVvZiBpbXBvcnQoJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQnKVxuXG5pbXBvcnQgdHlwZSB7XG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBOYXZpZ2F0aW9uRmxpZ2h0UmVzcG9uc2UsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHtcbiAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSLFxuICBORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUixcbiAgTkVYVF9SU0NfVU5JT05fUVVFUlksXG4gIE5FWFRfVVJMLFxuICBSU0NfSEVBREVSLFxuICBSU0NfQ09OVEVOVF9UWVBFX0hFQURFUixcbiAgTkVYVF9ITVJfUkVGUkVTSF9IRUFERVIsXG4gIE5FWFRfRElEX1BPU1RQT05FX0hFQURFUixcbiAgTkVYVF9ST1VURVJfU1RBTEVfVElNRV9IRUFERVIsXG59IGZyb20gJy4uL2FwcC1yb3V0ZXItaGVhZGVycydcbmltcG9ydCB7IGNhbGxTZXJ2ZXIgfSBmcm9tICcuLi8uLi9hcHAtY2FsbC1zZXJ2ZXInXG5pbXBvcnQgeyBmaW5kU291cmNlTWFwVVJMIH0gZnJvbSAnLi4vLi4vYXBwLWZpbmQtc291cmNlLW1hcC11cmwnXG5pbXBvcnQgeyBQcmVmZXRjaEtpbmQgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgaGV4SGFzaCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvaGFzaCdcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZUZsaWdodERhdGEsXG4gIHR5cGUgTm9ybWFsaXplZEZsaWdodERhdGEsXG59IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hTZXJ2ZXJSZXNwb25zZU9wdGlvbnMge1xuICByZWFkb25seSBmbGlnaHRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgcmVhZG9ubHkgbmV4dFVybDogc3RyaW5nIHwgbnVsbFxuICByZWFkb25seSBidWlsZElkOiBzdHJpbmdcbiAgcmVhZG9ubHkgcHJlZmV0Y2hLaW5kPzogUHJlZmV0Y2hLaW5kXG4gIHJlYWRvbmx5IGlzSG1yUmVmcmVzaD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCA9IHtcbiAgZmxpZ2h0RGF0YTogTm9ybWFsaXplZEZsaWdodERhdGFbXSB8IHN0cmluZ1xuICBjYW5vbmljYWxVcmw6IFVSTCB8IHVuZGVmaW5lZFxuICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGJvb2xlYW5cbiAgcHJlcmVuZGVyZWQ6IGJvb2xlYW5cbiAgcG9zdHBvbmVkOiBib29sZWFuXG4gIHN0YWxlVGltZTogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIHVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcih1cmw6IHN0cmluZyk6IFVSTCB7XG4gIGNvbnN0IHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzID0gbmV3IFVSTCh1cmwsIGxvY2F0aW9uLm9yaWdpbilcbiAgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMuc2VhcmNoUGFyYW1zLmRlbGV0ZShORVhUX1JTQ19VTklPTl9RVUVSWSlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gJ2V4cG9ydCcgJiZcbiAgICAgIHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzLnBhdGhuYW1lLmVuZHNXaXRoKCcudHh0JylcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9IHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzXG4gICAgICBjb25zdCBsZW5ndGggPSBwYXRobmFtZS5lbmRzV2l0aCgnL2luZGV4LnR4dCcpID8gMTAgOiA0XG4gICAgICAvLyBTbGljZSBvZmYgYC9pbmRleC50eHRgIG9yIGAudHh0YCBmcm9tIHRoZSBlbmQgb2YgdGhlIHBhdGhuYW1lXG4gICAgICB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5wYXRobmFtZSA9IHBhdGhuYW1lLnNsaWNlKDAsIC1sZW5ndGgpXG4gICAgfVxuICB9XG4gIHJldHVybiB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVyc1xufVxuXG5mdW5jdGlvbiBkb01wYU5hdmlnYXRpb24odXJsOiBzdHJpbmcpOiBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBmbGlnaHREYXRhOiB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIodXJsKS50b1N0cmluZygpLFxuICAgIGNhbm9uaWNhbFVybDogdW5kZWZpbmVkLFxuICAgIGNvdWxkQmVJbnRlcmNlcHRlZDogZmFsc2UsXG4gICAgcHJlcmVuZGVyZWQ6IGZhbHNlLFxuICAgIHBvc3Rwb25lZDogZmFsc2UsXG4gICAgc3RhbGVUaW1lOiAtMSxcbiAgfVxufVxuXG4vKipcbiAqIEZldGNoIHRoZSBmbGlnaHQgZGF0YSBmb3IgdGhlIHByb3ZpZGVkIHVybC4gVGFrZXMgaW4gdGhlIGN1cnJlbnQgcm91dGVyIHN0YXRlXG4gKiB0byBkZWNpZGUgd2hhdCB0byByZW5kZXIgc2VydmVyLXNpZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFNlcnZlclJlc3BvbnNlKFxuICB1cmw6IFVSTCxcbiAgb3B0aW9uczogRmV0Y2hTZXJ2ZXJSZXNwb25zZU9wdGlvbnNcbik6IFByb21pc2U8RmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdD4ge1xuICBjb25zdCB7IGZsaWdodFJvdXRlclN0YXRlLCBuZXh0VXJsLCBidWlsZElkLCBwcmVmZXRjaEtpbmQgfSA9IG9wdGlvbnNcblxuICBjb25zdCBoZWFkZXJzOiB7XG4gICAgW1JTQ19IRUFERVJdOiAnMSdcbiAgICBbTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVJdOiBzdHJpbmdcbiAgICBbTkVYVF9VUkxdPzogc3RyaW5nXG4gICAgW05FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0/OiAnMSdcbiAgICAneC1kZXBsb3ltZW50LWlkJz86IHN0cmluZ1xuICAgIFtORVhUX0hNUl9SRUZSRVNIX0hFQURFUl0/OiAnMSdcbiAgICAvLyBBIGhlYWRlciB0aGF0IGlzIG9ubHkgYWRkZWQgaW4gdGVzdCBtb2RlIHRvIGFzc2VydCBvbiBmZXRjaCBwcmlvcml0eVxuICAgICdOZXh0LVRlc3QtRmV0Y2gtUHJpb3JpdHknPzogUmVxdWVzdEluaXRbJ3ByaW9yaXR5J11cbiAgfSA9IHtcbiAgICAvLyBFbmFibGUgZmxpZ2h0IHJlc3BvbnNlXG4gICAgW1JTQ19IRUFERVJdOiAnMScsXG4gICAgLy8gUHJvdmlkZSB0aGUgY3VycmVudCByb3V0ZXIgc3RhdGVcbiAgICBbTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVJdOiBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBKU09OLnN0cmluZ2lmeShmbGlnaHRSb3V0ZXJTdGF0ZSlcbiAgICApLFxuICB9XG5cbiAgLyoqXG4gICAqIFRocmVlIGNhc2VzOlxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGB1bmRlZmluZWRgLCBpdCBtZWFucyBpdCdzIGEgbm9ybWFsIG5hdmlnYXRpb24sIHNvIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBmdWxsYCAtIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHdob2xlIHBhZ2Ugc28gc2FtZSBhcyBhYm92ZVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBhdXRvYCAtIGlmIHRoZSBwYWdlIGlzIGR5bmFtaWMsIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgcGFydGlhbGx5LCBpZiBzdGF0aWMgcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKi9cbiAgaWYgKHByZWZldGNoS2luZCA9PT0gUHJlZmV0Y2hLaW5kLkFVVE8pIHtcbiAgICBoZWFkZXJzW05FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0gPSAnMSdcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiBvcHRpb25zLmlzSG1yUmVmcmVzaCkge1xuICAgIGhlYWRlcnNbTkVYVF9ITVJfUkVGUkVTSF9IRUFERVJdID0gJzEnXG4gIH1cblxuICBpZiAobmV4dFVybCkge1xuICAgIGhlYWRlcnNbTkVYVF9VUkxdID0gbmV4dFVybFxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRCkge1xuICAgIGhlYWRlcnNbJ3gtZGVwbG95bWVudC1pZCddID0gcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gIH1cblxuICBjb25zdCB1bmlxdWVDYWNoZVF1ZXJ5ID0gaGV4SGFzaChcbiAgICBbXG4gICAgICBoZWFkZXJzW05FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0gfHwgJzAnLFxuICAgICAgaGVhZGVyc1tORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUl0sXG4gICAgICBoZWFkZXJzW05FWFRfVVJMXSxcbiAgICBdLmpvaW4oJywnKVxuICApXG5cbiAgdHJ5IHtcbiAgICBsZXQgZmV0Y2hVcmwgPSBuZXcgVVJMKHVybClcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DT05GSUdfT1VUUFVUID09PSAnZXhwb3J0Jykge1xuICAgICAgICBpZiAoZmV0Y2hVcmwucGF0aG5hbWUuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICAgIGZldGNoVXJsLnBhdGhuYW1lICs9ICdpbmRleC50eHQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmV0Y2hVcmwucGF0aG5hbWUgKz0gJy50eHQnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pcXVlIGNhY2hlIHF1ZXJ5IHRvIGF2b2lkIGNhY2hpbmcgY29uZmxpY3RzIG9uIENETiB3aGljaCBkb24ndCByZXNwZWN0IHRoZSBWYXJ5IGhlYWRlclxuICAgIGZldGNoVXJsLnNlYXJjaFBhcmFtcy5zZXQoTkVYVF9SU0NfVU5JT05fUVVFUlksIHVuaXF1ZUNhY2hlUXVlcnkpXG5cbiAgICAvLyBXaGVuIGNyZWF0aW5nIGEgXCJ0ZW1wb3JhcnlcIiBwcmVmZXRjaCAodGhlIFwib24tZGVtYW5kXCIgcHJlZmV0Y2ggdGhhdCBnZXRzIGNyZWF0ZWQgb24gbmF2aWdhdGlvbiwgaWYgb25lIGRvZXNuJ3QgZXhpc3QpXG4gICAgLy8gd2Ugc2VuZCB0aGUgcmVxdWVzdCB3aXRoIGEgXCJoaWdoXCIgcHJpb3JpdHkgYXMgaXQncyBpbiByZXNwb25zZSB0byBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCBjb3VsZCBiZSBibG9ja2luZyBhIHRyYW5zaXRpb24uXG4gICAgLy8gT3RoZXJ3aXNlLCBhbGwgb3RoZXIgcHJlZmV0Y2hlcyBhcmUgc2VudCB3aXRoIGEgXCJsb3dcIiBwcmlvcml0eS5cbiAgICAvLyBXZSB1c2UgXCJhdXRvXCIgZm9yIGluIGFsbCBvdGhlciBjYXNlcyB0byBtYXRjaCB0aGUgZXhpc3RpbmcgZGVmYXVsdCwgYXMgdGhpcyBmdW5jdGlvbiBpcyBzaGFyZWQgb3V0c2lkZSBvZiBwcmVmZXRjaGluZy5cbiAgICBjb25zdCBmZXRjaFByaW9yaXR5ID0gcHJlZmV0Y2hLaW5kXG4gICAgICA/IHByZWZldGNoS2luZCA9PT0gUHJlZmV0Y2hLaW5kLlRFTVBPUkFSWVxuICAgICAgICA/ICdoaWdoJ1xuICAgICAgICA6ICdsb3cnXG4gICAgICA6ICdhdXRvJ1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgIGhlYWRlcnNbJ05leHQtVGVzdC1GZXRjaC1Qcmlvcml0eSddID0gZmV0Y2hQcmlvcml0eVxuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGZldGNoVXJsLCB7XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0IGZvciBvbGRlciBicm93c2Vycy4gYHNhbWUtb3JpZ2luYCBpcyB0aGUgZGVmYXVsdCBpbiBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBwcmlvcml0eTogZmV0Y2hQcmlvcml0eSxcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzcG9uc2VVcmwgPSB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIocmVzLnVybClcbiAgICBjb25zdCBjYW5vbmljYWxVcmwgPSByZXMucmVkaXJlY3RlZCA/IHJlc3BvbnNlVXJsIDogdW5kZWZpbmVkXG5cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJydcbiAgICBjb25zdCBpbnRlcmNlcHRpb24gPSAhIXJlcy5oZWFkZXJzLmdldCgndmFyeScpPy5pbmNsdWRlcyhORVhUX1VSTClcbiAgICBjb25zdCBwb3N0cG9uZWQgPSAhIXJlcy5oZWFkZXJzLmdldChORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIpXG4gICAgY29uc3Qgc3RhbGVUaW1lSGVhZGVyID0gcmVzLmhlYWRlcnMuZ2V0KE5FWFRfUk9VVEVSX1NUQUxFX1RJTUVfSEVBREVSKVxuICAgIGNvbnN0IHN0YWxlVGltZSA9XG4gICAgICBzdGFsZVRpbWVIZWFkZXIgIT09IG51bGwgPyBwYXJzZUludChzdGFsZVRpbWVIZWFkZXIsIDEwKSA6IC0xXG4gICAgbGV0IGlzRmxpZ2h0UmVzcG9uc2UgPSBjb250ZW50VHlwZS5zdGFydHNXaXRoKFJTQ19DT05URU5UX1RZUEVfSEVBREVSKVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgICAgaWYgKCFpc0ZsaWdodFJlc3BvbnNlKSB7XG4gICAgICAgICAgaXNGbGlnaHRSZXNwb25zZSA9IGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvcGxhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZmV0Y2ggcmV0dXJucyBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gZmxpZ2h0IHJlc3BvbnNlIGhhbmRsZSBpdCBsaWtlIGEgbXBhIG5hdmlnYXRpb25cbiAgICAvLyBJZiB0aGUgZmV0Y2ggd2FzIG5vdCAyMDAsIHdlIGFsc28gaGFuZGxlIGl0IGxpa2UgYSBtcGEgbmF2aWdhdGlvblxuICAgIGlmICghaXNGbGlnaHRSZXNwb25zZSB8fCAhcmVzLm9rIHx8ICFyZXMuYm9keSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3JpZ2luYWwgVVJMIGNhbWUgd2l0aCBhIGhhc2gsIHByZXNlcnZlIGl0IGJlZm9yZSByZWRpcmVjdGluZyB0byB0aGUgbmV3IFVSTFxuICAgICAgaWYgKHVybC5oYXNoKSB7XG4gICAgICAgIHJlc3BvbnNlVXJsLmhhc2ggPSB1cmwuaGFzaFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG9NcGFOYXZpZ2F0aW9uKHJlc3BvbnNlVXJsLnRvU3RyaW5nKCkpXG4gICAgfVxuXG4gICAgLy8gV2UgbWF5IG5hdmlnYXRlIHRvIGEgcGFnZSB0aGF0IHJlcXVpcmVzIGEgZGlmZmVyZW50IFdlYnBhY2sgcnVudGltZS5cbiAgICAvLyBJbiBwcm9kLCBldmVyeSBwYWdlIHdpbGwgaGF2ZSB0aGUgc2FtZSBXZWJwYWNrIHJ1bnRpbWUuXG4gICAgLy8gSW4gZGV2LCB0aGUgV2VicGFjayBydW50aW1lIGlzIG1pbmltYWwgZm9yIGVhY2ggcGFnZS5cbiAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgV2VicGFjayBydW50aW1lIGlzIHVwZGF0ZWQgYmVmb3JlIGV4ZWN1dGluZyBjbGllbnQtc2lkZSBKUyBvZiB0aGUgbmV3IHBhZ2UuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgYXdhaXQgcmVxdWlyZSgnLi4vcmVhY3QtZGV2LW92ZXJsYXkvYXBwL2hvdC1yZWxvYWRlci1jbGllbnQnKS53YWl0Rm9yV2VicGFja1J1bnRpbWVIb3RVcGRhdGUoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgYGZldGNoYCByZWFkYWJsZSBzdHJlYW0gdGhhdCBjYW4gYmUgdW53cmFwcGVkIGJ5IGBSZWFjdC51c2VgLlxuICAgIGNvbnN0IGZsaWdodFN0cmVhbSA9IHBvc3Rwb25lZFxuICAgICAgPyBjcmVhdGVVbmNsb3NpbmdQcmVmZXRjaFN0cmVhbShyZXMuYm9keSlcbiAgICAgIDogcmVzLmJvZHlcbiAgICBjb25zdCByZXNwb25zZTogTmF2aWdhdGlvbkZsaWdodFJlc3BvbnNlID0gYXdhaXQgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtKFxuICAgICAgZmxpZ2h0U3RyZWFtLFxuICAgICAgeyBjYWxsU2VydmVyLCBmaW5kU291cmNlTWFwVVJMIH1cbiAgICApXG5cbiAgICBpZiAoYnVpbGRJZCAhPT0gcmVzcG9uc2UuYikge1xuICAgICAgcmV0dXJuIGRvTXBhTmF2aWdhdGlvbihyZXMudXJsKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmbGlnaHREYXRhOiBub3JtYWxpemVGbGlnaHREYXRhKHJlc3BvbnNlLmYpLFxuICAgICAgY2Fub25pY2FsVXJsOiBjYW5vbmljYWxVcmwsXG4gICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGludGVyY2VwdGlvbixcbiAgICAgIHByZXJlbmRlcmVkOiByZXNwb25zZS5TLFxuICAgICAgcG9zdHBvbmVkLFxuICAgICAgc3RhbGVUaW1lLFxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggUlNDIHBheWxvYWQgZm9yICR7dXJsfS4gRmFsbGluZyBiYWNrIHRvIGJyb3dzZXIgbmF2aWdhdGlvbi5gLFxuICAgICAgZXJyXG4gICAgKVxuICAgIC8vIElmIGZldGNoIGZhaWxzIGhhbmRsZSBpdCBsaWtlIGEgbXBhIG5hdmlnYXRpb25cbiAgICAvLyBUT0RPLUFQUDogQWRkIGEgdGVzdCBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBDT1JTIHJlcXVlc3QgZmFpbHMsIGUuZy4gZXh0ZXJuYWwgdXJsIHJlZGlyZWN0IGNvbWluZyBmcm9tIHRoZSByZXNwb25zZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy80MzYwNSNpc3N1ZWNvbW1lbnQtMTQ1MTYxNzUyMSBmb3IgYSByZXByb2R1Y3Rpb24uXG4gICAgcmV0dXJuIHtcbiAgICAgIGZsaWdodERhdGE6IHVybC50b1N0cmluZygpLFxuICAgICAgY2Fub25pY2FsVXJsOiB1bmRlZmluZWQsXG4gICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGZhbHNlLFxuICAgICAgcHJlcmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgcG9zdHBvbmVkOiBmYWxzZSxcbiAgICAgIHN0YWxlVGltZTogLTEsXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVuY2xvc2luZ1ByZWZldGNoU3RyZWFtKFxuICBvcmlnaW5hbEZsaWdodFN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT5cbik6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgLy8gV2hlbiBQUFIgaXMgZW5hYmxlZCwgcHJlZmV0Y2ggc3RyZWFtcyBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRoYXQgbmV2ZXJcbiAgLy8gcmVzb2x2ZSwgYmVjYXVzZSB0aGF0J3MgaG93IHdlIGVuY29kZSBkeW5hbWljIGRhdGEgYWNjZXNzLiBJbiB0aGUgZGVjb2RlZFxuICAvLyBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIEZsaWdodCBjbGllbnQsIHRoZXNlIGFyZSByZWlmaWVkIGludG8gaGFuZ2luZ1xuICAvLyBwcm9taXNlcyB0aGF0IHN1c3BlbmQgZHVyaW5nIHJlbmRlciwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgd2hhdCB3ZSB3YW50LlxuICAvLyBUaGUgVUkgcmVzb2x2ZXMgd2hlbiBpdCBzd2l0Y2hlcyB0byB0aGUgZHluYW1pYyBkYXRhIHN0cmVhbVxuICAvLyAodmlhIHVzZURlZmVycmVkVmFsdWUoZHluYW1pYywgc3RhdGljKSkuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHRoZSBGbGlnaHQgaW1wbGVtZW50YXRpb24gY3VycmVudGx5IGVycm9ycyBpZiB0aGUgc2VydmVyIGNsb3Nlc1xuICAvLyB0aGUgcmVzcG9uc2UgYmVmb3JlIGFsbCB0aGUgcmVmZXJlbmNlcyBhcmUgcmVzb2x2ZWQuIEFzIGEgY2hlYXQgdG8gd29ya1xuICAvLyBhcm91bmQgdGhpcywgd2Ugd3JhcCB0aGUgb3JpZ2luYWwgc3RyZWFtIGluIGEgbmV3IHN0cmVhbSB0aGF0IG5ldmVyIGNsb3NlcyxcbiAgLy8gYW5kIHRoZXJlZm9yZSBkb2Vzbid0IGVycm9yLlxuICBjb25zdCByZWFkZXIgPSBvcmlnaW5hbEZsaWdodFN0cmVhbS5nZXRSZWFkZXIoKVxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgLy8gUGFzcyB0byB0aGUgdGFyZ2V0IHN0cmVhbSBhbmQga2VlcCBjb25zdW1pbmcgdGhlIEZsaWdodCByZXNwb25zZVxuICAgICAgICAgIC8vIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgc2VydmVyIHN0cmVhbSBoYXMgY2xvc2VkLiBFeGl0LCBidXQgaW50ZW50aW9uYWxseSBkbyBub3QgY2xvc2VcbiAgICAgICAgLy8gdGhlIHRhcmdldCBzdHJlYW0uXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsImNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJyZXF1aXJlIiwidXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyIiwidXJsIiwidXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlYXJjaFBhcmFtcyIsImRlbGV0ZSIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwiTk9ERV9FTlYiLCJfX05FWFRfQ09ORklHX09VVFBVVCIsInBhdGhuYW1lIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJzbGljZSIsImRvTXBhTmF2aWdhdGlvbiIsImZsaWdodERhdGEiLCJ0b1N0cmluZyIsImNhbm9uaWNhbFVybCIsInVuZGVmaW5lZCIsImNvdWxkQmVJbnRlcmNlcHRlZCIsInByZXJlbmRlcmVkIiwicG9zdHBvbmVkIiwic3RhbGVUaW1lIiwib3B0aW9ucyIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsImJ1aWxkSWQiLCJwcmVmZXRjaEtpbmQiLCJoZWFkZXJzIiwiUlNDX0hFQURFUiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIlByZWZldGNoS2luZCIsIkFVVE8iLCJORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIiLCJpc0htclJlZnJlc2giLCJORVhUX0hNUl9SRUZSRVNIX0hFQURFUiIsIk5FWFRfVVJMIiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwidW5pcXVlQ2FjaGVRdWVyeSIsImhleEhhc2giLCJqb2luIiwicmVzIiwiZmV0Y2hVcmwiLCJzZXQiLCJmZXRjaFByaW9yaXR5IiwiVEVNUE9SQVJZIiwiX19ORVhUX1RFU1RfTU9ERSIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJwcmlvcml0eSIsInJlc3BvbnNlVXJsIiwicmVkaXJlY3RlZCIsImNvbnRlbnRUeXBlIiwiZ2V0IiwiaW50ZXJjZXB0aW9uIiwiaW5jbHVkZXMiLCJORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIiLCJzdGFsZVRpbWVIZWFkZXIiLCJORVhUX1JPVVRFUl9TVEFMRV9USU1FX0hFQURFUiIsInBhcnNlSW50IiwiaXNGbGlnaHRSZXNwb25zZSIsInN0YXJ0c1dpdGgiLCJSU0NfQ09OVEVOVF9UWVBFX0hFQURFUiIsIm9rIiwiYm9keSIsImhhc2giLCJUVVJCT1BBQ0siLCJ3YWl0Rm9yV2VicGFja1J1bnRpbWVIb3RVcGRhdGUiLCJmbGlnaHRTdHJlYW0iLCJjcmVhdGVVbmNsb3NpbmdQcmVmZXRjaFN0cmVhbSIsInJlc3BvbnNlIiwiY2FsbFNlcnZlciIsImZpbmRTb3VyY2VNYXBVUkwiLCJiIiwibm9ybWFsaXplRmxpZ2h0RGF0YSIsImYiLCJTIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwib3JpZ2luYWxGbGlnaHRTdHJlYW0iLCJyZWFkZXIiLCJnZXRSZWFkZXIiLCJSZWFkYWJsZVN0cmVhbSIsInB1bGwiLCJjb250cm9sbGVyIiwiZG9uZSIsInZhbHVlIiwicmVhZCIsImVucXVldWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\n");
|
1063
|
+
eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fetchServerResponse\", ({\n enumerable: true,\n get: function() {\n return fetchServerResponse;\n }\n}));\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(ssr)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _appcallserver = __webpack_require__(/*! ../../app-call-server */ \"(ssr)/./node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ../../app-find-source-map-url */ \"(ssr)/./node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _hash = __webpack_require__(/*! ../../../shared/lib/hash */ \"(ssr)/./node_modules/next/dist/shared/lib/hash.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(ssr)/./node_modules/next/dist/client/flight-data-helpers.js\");\n// @ts-ignore\n// eslint-disable-next-line import/no-extraneous-dependencies\n// import { createFromReadableStream } from 'react-server-dom-webpack/client'\nconst { createFromReadableStream } = true ? __webpack_require__(/*! react-server-dom-webpack/client.edge */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client-edge.js\") : 0;\nfunction urlToUrlWithoutFlightMarker(url) {\n const urlWithoutFlightParameters = new URL(url, location.origin);\n urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n if (false) {}\n return urlWithoutFlightParameters;\n}\nfunction doMpaNavigation(url) {\n return {\n flightData: urlToUrlWithoutFlightMarker(url).toString(),\n canonicalUrl: undefined,\n couldBeIntercepted: false,\n prerendered: false,\n postponed: false,\n staleTime: -1\n };\n}\nasync function fetchServerResponse(url, options) {\n const { flightRouterState, nextUrl, buildId, prefetchKind } = options;\n const headers = {\n // Enable flight response\n [_approuterheaders.RSC_HEADER]: '1',\n // Provide the current router state\n [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: encodeURIComponent(JSON.stringify(flightRouterState))\n };\n /**\n * Three cases:\n * - `prefetchKind` is `undefined`, it means it's a normal navigation, so we want to prefetch the page data fully\n * - `prefetchKind` is `full` - we want to prefetch the whole page so same as above\n * - `prefetchKind` is `auto` - if the page is dynamic, prefetch the page data partially, if static prefetch the page data fully\n */ if (prefetchKind === _routerreducertypes.PrefetchKind.AUTO) {\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1';\n }\n if ( true && options.isHmrRefresh) {\n headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] = '1';\n }\n if (nextUrl) {\n headers[_approuterheaders.NEXT_URL] = nextUrl;\n }\n if (false) {}\n const uniqueCacheQuery = (0, _hash.hexHash)([\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] || '0',\n headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER],\n headers[_approuterheaders.NEXT_URL]\n ].join(','));\n try {\n var _res_headers_get;\n let fetchUrl = new URL(url);\n if (false) {}\n // Add unique cache query to avoid caching conflicts on CDN which don't respect the Vary header\n fetchUrl.searchParams.set(_approuterheaders.NEXT_RSC_UNION_QUERY, uniqueCacheQuery);\n // When creating a \"temporary\" prefetch (the \"on-demand\" prefetch that gets created on navigation, if one doesn't exist)\n // we send the request with a \"high\" priority as it's in response to a user interaction that could be blocking a transition.\n // Otherwise, all other prefetches are sent with a \"low\" priority.\n // We use \"auto\" for in all other cases to match the existing default, as this function is shared outside of prefetching.\n const fetchPriority = prefetchKind ? prefetchKind === _routerreducertypes.PrefetchKind.TEMPORARY ? 'high' : 'low' : 'auto';\n if (false) {}\n const res = await fetch(fetchUrl, {\n // Backwards compat for older browsers. `same-origin` is the default in modern browsers.\n credentials: 'same-origin',\n headers,\n priority: fetchPriority\n });\n const responseUrl = urlToUrlWithoutFlightMarker(res.url);\n const canonicalUrl = res.redirected ? responseUrl : undefined;\n const contentType = res.headers.get('content-type') || '';\n const interception = !!((_res_headers_get = res.headers.get('vary')) == null ? void 0 : _res_headers_get.includes(_approuterheaders.NEXT_URL));\n const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER);\n const staleTimeHeader = res.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER);\n const staleTime = staleTimeHeader !== null ? parseInt(staleTimeHeader, 10) : -1;\n let isFlightResponse = contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER);\n if (false) {}\n // If fetch returns something different than flight response handle it like a mpa navigation\n // If the fetch was not 200, we also handle it like a mpa navigation\n if (!isFlightResponse || !res.ok || !res.body) {\n // in case the original URL came with a hash, preserve it before redirecting to the new URL\n if (url.hash) {\n responseUrl.hash = url.hash;\n }\n return doMpaNavigation(responseUrl.toString());\n }\n // We may navigate to a page that requires a different Webpack runtime.\n // In prod, every page will have the same Webpack runtime.\n // In dev, the Webpack runtime is minimal for each page.\n // We need to ensure the Webpack runtime is updated before executing client-side JS of the new page.\n if (true) {\n await (__webpack_require__(/*! ../react-dev-overlay/app/hot-reloader-client */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/app/hot-reloader-client.js\").waitForWebpackRuntimeHotUpdate)();\n }\n // Handle the `fetch` readable stream that can be unwrapped by `React.use`.\n const flightStream = postponed ? createUnclosingPrefetchStream(res.body) : res.body;\n const response = await createFromReadableStream(flightStream, {\n callServer: _appcallserver.callServer,\n findSourceMapURL: _appfindsourcemapurl.findSourceMapURL\n });\n if (buildId !== response.b) {\n return doMpaNavigation(res.url);\n }\n return {\n flightData: (0, _flightdatahelpers.normalizeFlightData)(response.f),\n canonicalUrl: canonicalUrl,\n couldBeIntercepted: interception,\n prerendered: response.S,\n postponed,\n staleTime\n };\n } catch (err) {\n console.error(\"Failed to fetch RSC payload for \" + url + \". Falling back to browser navigation.\", err);\n // If fetch fails handle it like a mpa navigation\n // TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response.\n // See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction.\n return {\n flightData: url.toString(),\n canonicalUrl: undefined,\n couldBeIntercepted: false,\n prerendered: false,\n postponed: false,\n staleTime: -1\n };\n }\n}\nfunction createUnclosingPrefetchStream(originalFlightStream) {\n // When PPR is enabled, prefetch streams may contain references that never\n // resolve, because that's how we encode dynamic data access. In the decoded\n // object returned by the Flight client, these are reified into hanging\n // promises that suspend during render, which is effectively what we want.\n // The UI resolves when it switches to the dynamic data stream\n // (via useDeferredValue(dynamic, static)).\n //\n // However, the Flight implementation currently errors if the server closes\n // the response before all the references are resolved. As a cheat to work\n // around this, we wrap the original stream in a new stream that never closes,\n // and therefore doesn't error.\n const reader = originalFlightStream.getReader();\n return new ReadableStream({\n async pull (controller) {\n while(true){\n const { done, value } = await reader.read();\n if (!done) {\n // Pass to the target stream and keep consuming the Flight response\n // from the server.\n controller.enqueue(value);\n continue;\n }\n // The server stream has closed. Exit, but intentionally do not close\n // the target stream.\n return;\n }\n }\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fetch-server-response.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZldGNoLXNlcnZlci1yZXNwb25zZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7ZUFzRnNCQTs7Ozs2Q0ExREs7a0lBQ007Z0RBQ0o7c0JBQ0w7cUhBSWpCO0FBakNQLGFBQWE7QUFDYjtBQUNBO0FBQ0EsTUFBTSxFQUFFQyx3QkFBd0IsRUFBRSxHQUNoQyxDQUFDLENBQUNDLFFBQVFDLEdBQUcsQ0FBQ0MsWUFBWSxHQUV0QkMsUUFBUTtBQThDZCxTQUFTQyx1QkFBQUEsRUFBQUEsR0FBNEJDLEtBQVc7SUFDOUMsTUFBTUMsMkJBQUFBLEVBQTZCLElBQUlDO0lBQ3ZDRCxNQUFBQSxxQkFBMkJJLFFBQUFBLElBQVksQ0FBQ0MsR0FBQUEsR0FBTSxDQUFDQyxDQUFBQSxTQUFBQSxNQUFBQTtJQUMvQyxJQUFJWixRQUFRQyxHQUFHLENBQUNZLFFBQVEsS0FBSyxjQUFjO1FBQ3pDLEtBQ2tDLElBU3BDO0lBQ0Y7QUFFQTtJQUNFLE9BQU87UUFDTE8sR0FBQUE7UUFDQUUsWUFBQUEsRUFBY0MsMEJBQUFBLEtBQUFBLFFBQUFBO1FBQ2RDLGNBQUFBLE1BQW9CO1FBQ3BCQyxhQUFhO1FBQ2JDLFdBQVc7UUFDWEMsV0FBVyxDQUFDO1FBQ2Q7SUFDRjtBQU1PO0lBSUwsTUFBTSxFQUFFRSxHQUFBQSxjQUFpQixFQUFFQyxJQUFBQSxHQUFPLEVBQUVDLE9BQU8sRUFBRUM7SUFFN0MsTUFBTUMsRUFBQUEsUUFTRjtRQUNGO1FBQ0EsQ0FBQ0Msd0JBQUFBO1FBQ0QsbUNBQW1DO1FBQ25DLENBQUNDLGtDQUFBQTtRQUdIO0lBRUE7Ozs7OztRQU9FRixFQUFBQSxLQUFPLENBQUNRLFdBQUFBLG9CQUFBQSxZQUFBQSxDQUFBQSxDQUEyQixDQUFDLEdBQUc7UUFDekM7SUFFQTtRQUNFUixLQUFRVSxJQUFBQSxPQUF1QixDQUFDLEdBQUc7UUFDckM7SUFFQTtRQUNFVixPQUFP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O1lBQ0FFLFlBQUFBLENBQUFBLENBQWNBLEVBQUFBLG1CQUFBQSxtQkFBQUEsRUFBQUEsU0FBQUEsQ0FBQUE7WUFDZEUsY0FBQUEsTUFBb0JzQztZQUNwQnJDLGFBQWFxRCxPQUFBQSxFQUFTTSxDQUFDO1lBQ3ZCMUQsYUFBQUEsU0FBQUEsQ0FBQUE7WUFDQUM7WUFDRjtRQUNBO1FBQ0EyRCxLQUFBQSxHQUFRQyxFQUFBQTtRQUlSLGlEQUFpRDtRQUNqRDtRQUNBLHFIQUFpRztRQUNqRyxPQUFPO1lBQ0xuRSxHQUFBQTtZQUNBRSxZQUFBQSxFQUFjQyxFQUFBQSxRQUFBQTtZQUNkQyxjQUFBQSxNQUFvQjtZQUNwQkMsYUFBYTtZQUNiQyxXQUFXO1lBQ1hDLFdBQVcsQ0FBQztZQUNkO1FBQ0Y7SUFDRjtBQUVBO0lBR0U7SUFDQTtJQUNBLHVFQUF1RTtJQUN2RTtJQUNBLDhEQUE4RDtJQUM5RCwyQ0FBMkM7SUFDM0MsRUFBRTtJQUNGO0lBQ0EsMEVBQTBFO0lBQzFFO0lBQ0EsK0JBQStCO0lBQy9CLE1BQU04RCxTQUFTRCxnQkFBQUE7SUFDZixPQUFPLElBQUlHLElBQUFBLFdBQWU7UUFDeEIsTUFBTUMsQ0FBQUEsS0FBS0MsVUFBVTtZQUNuQixNQUFPLEtBQU07Z0JBQ1gsTUFBTSxFQUFFQztnQkFDUixJQUFJLENBQUNBLENBQUFBLEVBQUFBLEdBQU07b0JBQ1Q7b0JBQ0EsbUJBQW1CO29CQUNuQkQsV0FBV0ksT0FBTyxDQUFDRjtvQkFDbkI7b0JBQ0Y7Z0JBQ0E7Z0JBQ0EscUJBQXFCO2dCQUNyQjtnQkFDRjtZQUNGO1FBQ0Y7SUFDRiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxzcmNcXGNsaWVudFxcY29tcG9uZW50c1xccm91dGVyLXJlZHVjZXJcXGZldGNoLXNlcnZlci1yZXNwb25zZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuLy8gQHRzLWlnbm9yZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuLy8gaW1wb3J0IHsgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtIH0gZnJvbSAncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCdcbmNvbnN0IHsgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtIH0gPSAoXG4gICEhcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FXG4gICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG4gICAgICByZXF1aXJlKCdyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmVkZ2UnKVxuICAgIDogLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuICAgICAgcmVxdWlyZSgncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCcpXG4pIGFzIHR5cGVvZiBpbXBvcnQoJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQnKVxuXG5pbXBvcnQgdHlwZSB7XG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBOYXZpZ2F0aW9uRmxpZ2h0UmVzcG9uc2UsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHtcbiAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSLFxuICBORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUixcbiAgTkVYVF9SU0NfVU5JT05fUVVFUlksXG4gIE5FWFRfVVJMLFxuICBSU0NfSEVBREVSLFxuICBSU0NfQ09OVEVOVF9UWVBFX0hFQURFUixcbiAgTkVYVF9ITVJfUkVGUkVTSF9IRUFERVIsXG4gIE5FWFRfRElEX1BPU1RQT05FX0hFQURFUixcbiAgTkVYVF9ST1VURVJfU1RBTEVfVElNRV9IRUFERVIsXG59IGZyb20gJy4uL2FwcC1yb3V0ZXItaGVhZGVycydcbmltcG9ydCB7IGNhbGxTZXJ2ZXIgfSBmcm9tICcuLi8uLi9hcHAtY2FsbC1zZXJ2ZXInXG5pbXBvcnQgeyBmaW5kU291cmNlTWFwVVJMIH0gZnJvbSAnLi4vLi4vYXBwLWZpbmQtc291cmNlLW1hcC11cmwnXG5pbXBvcnQgeyBQcmVmZXRjaEtpbmQgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgaGV4SGFzaCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvaGFzaCdcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZUZsaWdodERhdGEsXG4gIHR5cGUgTm9ybWFsaXplZEZsaWdodERhdGEsXG59IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hTZXJ2ZXJSZXNwb25zZU9wdGlvbnMge1xuICByZWFkb25seSBmbGlnaHRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgcmVhZG9ubHkgbmV4dFVybDogc3RyaW5nIHwgbnVsbFxuICByZWFkb25seSBidWlsZElkOiBzdHJpbmdcbiAgcmVhZG9ubHkgcHJlZmV0Y2hLaW5kPzogUHJlZmV0Y2hLaW5kXG4gIHJlYWRvbmx5IGlzSG1yUmVmcmVzaD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCA9IHtcbiAgZmxpZ2h0RGF0YTogTm9ybWFsaXplZEZsaWdodERhdGFbXSB8IHN0cmluZ1xuICBjYW5vbmljYWxVcmw6IFVSTCB8IHVuZGVmaW5lZFxuICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGJvb2xlYW5cbiAgcHJlcmVuZGVyZWQ6IGJvb2xlYW5cbiAgcG9zdHBvbmVkOiBib29sZWFuXG4gIHN0YWxlVGltZTogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIHVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcih1cmw6IHN0cmluZyk6IFVSTCB7XG4gIGNvbnN0IHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzID0gbmV3IFVSTCh1cmwsIGxvY2F0aW9uLm9yaWdpbilcbiAgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMuc2VhcmNoUGFyYW1zLmRlbGV0ZShORVhUX1JTQ19VTklPTl9RVUVSWSlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gJ2V4cG9ydCcgJiZcbiAgICAgIHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzLnBhdGhuYW1lLmVuZHNXaXRoKCcudHh0JylcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9IHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzXG4gICAgICBjb25zdCBsZW5ndGggPSBwYXRobmFtZS5lbmRzV2l0aCgnL2luZGV4LnR4dCcpID8gMTAgOiA0XG4gICAgICAvLyBTbGljZSBvZmYgYC9pbmRleC50eHRgIG9yIGAudHh0YCBmcm9tIHRoZSBlbmQgb2YgdGhlIHBhdGhuYW1lXG4gICAgICB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5wYXRobmFtZSA9IHBhdGhuYW1lLnNsaWNlKDAsIC1sZW5ndGgpXG4gICAgfVxuICB9XG4gIHJldHVybiB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVyc1xufVxuXG5mdW5jdGlvbiBkb01wYU5hdmlnYXRpb24odXJsOiBzdHJpbmcpOiBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBmbGlnaHREYXRhOiB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIodXJsKS50b1N0cmluZygpLFxuICAgIGNhbm9uaWNhbFVybDogdW5kZWZpbmVkLFxuICAgIGNvdWxkQmVJbnRlcmNlcHRlZDogZmFsc2UsXG4gICAgcHJlcmVuZGVyZWQ6IGZhbHNlLFxuICAgIHBvc3Rwb25lZDogZmFsc2UsXG4gICAgc3RhbGVUaW1lOiAtMSxcbiAgfVxufVxuXG4vKipcbiAqIEZldGNoIHRoZSBmbGlnaHQgZGF0YSBmb3IgdGhlIHByb3ZpZGVkIHVybC4gVGFrZXMgaW4gdGhlIGN1cnJlbnQgcm91dGVyIHN0YXRlXG4gKiB0byBkZWNpZGUgd2hhdCB0byByZW5kZXIgc2VydmVyLXNpZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFNlcnZlclJlc3BvbnNlKFxuICB1cmw6IFVSTCxcbiAgb3B0aW9uczogRmV0Y2hTZXJ2ZXJSZXNwb25zZU9wdGlvbnNcbik6IFByb21pc2U8RmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdD4ge1xuICBjb25zdCB7IGZsaWdodFJvdXRlclN0YXRlLCBuZXh0VXJsLCBidWlsZElkLCBwcmVmZXRjaEtpbmQgfSA9IG9wdGlvbnNcblxuICBjb25zdCBoZWFkZXJzOiB7XG4gICAgW1JTQ19IRUFERVJdOiAnMSdcbiAgICBbTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVJdOiBzdHJpbmdcbiAgICBbTkVYVF9VUkxdPzogc3RyaW5nXG4gICAgW05FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0/OiAnMSdcbiAgICAneC1kZXBsb3ltZW50LWlkJz86IHN0cmluZ1xuICAgIFtORVhUX0hNUl9SRUZSRVNIX0hFQURFUl0/OiAnMSdcbiAgICAvLyBBIGhlYWRlciB0aGF0IGlzIG9ubHkgYWRkZWQgaW4gdGVzdCBtb2RlIHRvIGFzc2VydCBvbiBmZXRjaCBwcmlvcml0eVxuICAgICdOZXh0LVRlc3QtRmV0Y2gtUHJpb3JpdHknPzogUmVxdWVzdEluaXRbJ3ByaW9yaXR5J11cbiAgfSA9IHtcbiAgICAvLyBFbmFibGUgZmxpZ2h0IHJlc3BvbnNlXG4gICAgW1JTQ19IRUFERVJdOiAnMScsXG4gICAgLy8gUHJvdmlkZSB0aGUgY3VycmVudCByb3V0ZXIgc3RhdGVcbiAgICBbTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVJdOiBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBKU09OLnN0cmluZ2lmeShmbGlnaHRSb3V0ZXJTdGF0ZSlcbiAgICApLFxuICB9XG5cbiAgLyoqXG4gICAqIFRocmVlIGNhc2VzOlxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGB1bmRlZmluZWRgLCBpdCBtZWFucyBpdCdzIGEgbm9ybWFsIG5hdmlnYXRpb24sIHNvIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBmdWxsYCAtIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHdob2xlIHBhZ2Ugc28gc2FtZSBhcyBhYm92ZVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBhdXRvYCAtIGlmIHRoZSBwYWdlIGlzIGR5bmFtaWMsIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgcGFydGlhbGx5LCBpZiBzdGF0aWMgcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKi9cbiAgaWYgKHByZWZldGNoS2luZCA9PT0gUHJlZmV0Y2hLaW5kLkFVVE8pIHtcbiAgICBoZWFkZXJzW05FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0gPSAnMSdcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiBvcHRpb25zLmlzSG1yUmVmcmVzaCkge1xuICAgIGhlYWRlcnNbTkVYVF9ITVJfUkVGUkVTSF9IRUFERVJdID0gJzEnXG4gIH1cblxuICBpZiAobmV4dFVybCkge1xuICAgIGhlYWRlcnNbTkVYVF9VUkxdID0gbmV4dFVybFxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRCkge1xuICAgIGhlYWRlcnNbJ3gtZGVwbG95bWVudC1pZCddID0gcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gIH1cblxuICBjb25zdCB1bmlxdWVDYWNoZVF1ZXJ5ID0gaGV4SGFzaChcbiAgICBbXG4gICAgICBoZWFkZXJzW05FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0gfHwgJzAnLFxuICAgICAgaGVhZGVyc1tORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUl0sXG4gICAgICBoZWFkZXJzW05FWFRfVVJMXSxcbiAgICBdLmpvaW4oJywnKVxuICApXG5cbiAgdHJ5IHtcbiAgICBsZXQgZmV0Y2hVcmwgPSBuZXcgVVJMKHVybClcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DT05GSUdfT1VUUFVUID09PSAnZXhwb3J0Jykge1xuICAgICAgICBpZiAoZmV0Y2hVcmwucGF0aG5hbWUuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICAgIGZldGNoVXJsLnBhdGhuYW1lICs9ICdpbmRleC50eHQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmV0Y2hVcmwucGF0aG5hbWUgKz0gJy50eHQnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pcXVlIGNhY2hlIHF1ZXJ5IHRvIGF2b2lkIGNhY2hpbmcgY29uZmxpY3RzIG9uIENETiB3aGljaCBkb24ndCByZXNwZWN0IHRoZSBWYXJ5IGhlYWRlclxuICAgIGZldGNoVXJsLnNlYXJjaFBhcmFtcy5zZXQoTkVYVF9SU0NfVU5JT05fUVVFUlksIHVuaXF1ZUNhY2hlUXVlcnkpXG5cbiAgICAvLyBXaGVuIGNyZWF0aW5nIGEgXCJ0ZW1wb3JhcnlcIiBwcmVmZXRjaCAodGhlIFwib24tZGVtYW5kXCIgcHJlZmV0Y2ggdGhhdCBnZXRzIGNyZWF0ZWQgb24gbmF2aWdhdGlvbiwgaWYgb25lIGRvZXNuJ3QgZXhpc3QpXG4gICAgLy8gd2Ugc2VuZCB0aGUgcmVxdWVzdCB3aXRoIGEgXCJoaWdoXCIgcHJpb3JpdHkgYXMgaXQncyBpbiByZXNwb25zZSB0byBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCBjb3VsZCBiZSBibG9ja2luZyBhIHRyYW5zaXRpb24uXG4gICAgLy8gT3RoZXJ3aXNlLCBhbGwgb3RoZXIgcHJlZmV0Y2hlcyBhcmUgc2VudCB3aXRoIGEgXCJsb3dcIiBwcmlvcml0eS5cbiAgICAvLyBXZSB1c2UgXCJhdXRvXCIgZm9yIGluIGFsbCBvdGhlciBjYXNlcyB0byBtYXRjaCB0aGUgZXhpc3RpbmcgZGVmYXVsdCwgYXMgdGhpcyBmdW5jdGlvbiBpcyBzaGFyZWQgb3V0c2lkZSBvZiBwcmVmZXRjaGluZy5cbiAgICBjb25zdCBmZXRjaFByaW9yaXR5ID0gcHJlZmV0Y2hLaW5kXG4gICAgICA/IHByZWZldGNoS2luZCA9PT0gUHJlZmV0Y2hLaW5kLlRFTVBPUkFSWVxuICAgICAgICA/ICdoaWdoJ1xuICAgICAgICA6ICdsb3cnXG4gICAgICA6ICdhdXRvJ1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgIGhlYWRlcnNbJ05leHQtVGVzdC1GZXRjaC1Qcmlvcml0eSddID0gZmV0Y2hQcmlvcml0eVxuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGZldGNoVXJsLCB7XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0IGZvciBvbGRlciBicm93c2Vycy4gYHNhbWUtb3JpZ2luYCBpcyB0aGUgZGVmYXVsdCBpbiBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBwcmlvcml0eTogZmV0Y2hQcmlvcml0eSxcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzcG9uc2VVcmwgPSB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIocmVzLnVybClcbiAgICBjb25zdCBjYW5vbmljYWxVcmwgPSByZXMucmVkaXJlY3RlZCA/IHJlc3BvbnNlVXJsIDogdW5kZWZpbmVkXG5cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJydcbiAgICBjb25zdCBpbnRlcmNlcHRpb24gPSAhIXJlcy5oZWFkZXJzLmdldCgndmFyeScpPy5pbmNsdWRlcyhORVhUX1VSTClcbiAgICBjb25zdCBwb3N0cG9uZWQgPSAhIXJlcy5oZWFkZXJzLmdldChORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIpXG4gICAgY29uc3Qgc3RhbGVUaW1lSGVhZGVyID0gcmVzLmhlYWRlcnMuZ2V0KE5FWFRfUk9VVEVSX1NUQUxFX1RJTUVfSEVBREVSKVxuICAgIGNvbnN0IHN0YWxlVGltZSA9XG4gICAgICBzdGFsZVRpbWVIZWFkZXIgIT09IG51bGwgPyBwYXJzZUludChzdGFsZVRpbWVIZWFkZXIsIDEwKSA6IC0xXG4gICAgbGV0IGlzRmxpZ2h0UmVzcG9uc2UgPSBjb250ZW50VHlwZS5zdGFydHNXaXRoKFJTQ19DT05URU5UX1RZUEVfSEVBREVSKVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgICAgaWYgKCFpc0ZsaWdodFJlc3BvbnNlKSB7XG4gICAgICAgICAgaXNGbGlnaHRSZXNwb25zZSA9IGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvcGxhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZmV0Y2ggcmV0dXJucyBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gZmxpZ2h0IHJlc3BvbnNlIGhhbmRsZSBpdCBsaWtlIGEgbXBhIG5hdmlnYXRpb25cbiAgICAvLyBJZiB0aGUgZmV0Y2ggd2FzIG5vdCAyMDAsIHdlIGFsc28gaGFuZGxlIGl0IGxpa2UgYSBtcGEgbmF2aWdhdGlvblxuICAgIGlmICghaXNGbGlnaHRSZXNwb25zZSB8fCAhcmVzLm9rIHx8ICFyZXMuYm9keSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3JpZ2luYWwgVVJMIGNhbWUgd2l0aCBhIGhhc2gsIHByZXNlcnZlIGl0IGJlZm9yZSByZWRpcmVjdGluZyB0byB0aGUgbmV3IFVSTFxuICAgICAgaWYgKHVybC5oYXNoKSB7XG4gICAgICAgIHJlc3BvbnNlVXJsLmhhc2ggPSB1cmwuaGFzaFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG9NcGFOYXZpZ2F0aW9uKHJlc3BvbnNlVXJsLnRvU3RyaW5nKCkpXG4gICAgfVxuXG4gICAgLy8gV2UgbWF5IG5hdmlnYXRlIHRvIGEgcGFnZSB0aGF0IHJlcXVpcmVzIGEgZGlmZmVyZW50IFdlYnBhY2sgcnVudGltZS5cbiAgICAvLyBJbiBwcm9kLCBldmVyeSBwYWdlIHdpbGwgaGF2ZSB0aGUgc2FtZSBXZWJwYWNrIHJ1bnRpbWUuXG4gICAgLy8gSW4gZGV2LCB0aGUgV2VicGFjayBydW50aW1lIGlzIG1pbmltYWwgZm9yIGVhY2ggcGFnZS5cbiAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgV2VicGFjayBydW50aW1lIGlzIHVwZGF0ZWQgYmVmb3JlIGV4ZWN1dGluZyBjbGllbnQtc2lkZSBKUyBvZiB0aGUgbmV3IHBhZ2UuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgYXdhaXQgcmVxdWlyZSgnLi4vcmVhY3QtZGV2LW92ZXJsYXkvYXBwL2hvdC1yZWxvYWRlci1jbGllbnQnKS53YWl0Rm9yV2VicGFja1J1bnRpbWVIb3RVcGRhdGUoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgYGZldGNoYCByZWFkYWJsZSBzdHJlYW0gdGhhdCBjYW4gYmUgdW53cmFwcGVkIGJ5IGBSZWFjdC51c2VgLlxuICAgIGNvbnN0IGZsaWdodFN0cmVhbSA9IHBvc3Rwb25lZFxuICAgICAgPyBjcmVhdGVVbmNsb3NpbmdQcmVmZXRjaFN0cmVhbShyZXMuYm9keSlcbiAgICAgIDogcmVzLmJvZHlcbiAgICBjb25zdCByZXNwb25zZTogTmF2aWdhdGlvbkZsaWdodFJlc3BvbnNlID0gYXdhaXQgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtKFxuICAgICAgZmxpZ2h0U3RyZWFtLFxuICAgICAgeyBjYWxsU2VydmVyLCBmaW5kU291cmNlTWFwVVJMIH1cbiAgICApXG5cbiAgICBpZiAoYnVpbGRJZCAhPT0gcmVzcG9uc2UuYikge1xuICAgICAgcmV0dXJuIGRvTXBhTmF2aWdhdGlvbihyZXMudXJsKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmbGlnaHREYXRhOiBub3JtYWxpemVGbGlnaHREYXRhKHJlc3BvbnNlLmYpLFxuICAgICAgY2Fub25pY2FsVXJsOiBjYW5vbmljYWxVcmwsXG4gICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGludGVyY2VwdGlvbixcbiAgICAgIHByZXJlbmRlcmVkOiByZXNwb25zZS5TLFxuICAgICAgcG9zdHBvbmVkLFxuICAgICAgc3RhbGVUaW1lLFxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggUlNDIHBheWxvYWQgZm9yICR7dXJsfS4gRmFsbGluZyBiYWNrIHRvIGJyb3dzZXIgbmF2aWdhdGlvbi5gLFxuICAgICAgZXJyXG4gICAgKVxuICAgIC8vIElmIGZldGNoIGZhaWxzIGhhbmRsZSBpdCBsaWtlIGEgbXBhIG5hdmlnYXRpb25cbiAgICAvLyBUT0RPLUFQUDogQWRkIGEgdGVzdCBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBDT1JTIHJlcXVlc3QgZmFpbHMsIGUuZy4gZXh0ZXJuYWwgdXJsIHJlZGlyZWN0IGNvbWluZyBmcm9tIHRoZSByZXNwb25zZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy80MzYwNSNpc3N1ZWNvbW1lbnQtMTQ1MTYxNzUyMSBmb3IgYSByZXByb2R1Y3Rpb24uXG4gICAgcmV0dXJuIHtcbiAgICAgIGZsaWdodERhdGE6IHVybC50b1N0cmluZygpLFxuICAgICAgY2Fub25pY2FsVXJsOiB1bmRlZmluZWQsXG4gICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGZhbHNlLFxuICAgICAgcHJlcmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgcG9zdHBvbmVkOiBmYWxzZSxcbiAgICAgIHN0YWxlVGltZTogLTEsXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVuY2xvc2luZ1ByZWZldGNoU3RyZWFtKFxuICBvcmlnaW5hbEZsaWdodFN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT5cbik6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgLy8gV2hlbiBQUFIgaXMgZW5hYmxlZCwgcHJlZmV0Y2ggc3RyZWFtcyBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRoYXQgbmV2ZXJcbiAgLy8gcmVzb2x2ZSwgYmVjYXVzZSB0aGF0J3MgaG93IHdlIGVuY29kZSBkeW5hbWljIGRhdGEgYWNjZXNzLiBJbiB0aGUgZGVjb2RlZFxuICAvLyBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIEZsaWdodCBjbGllbnQsIHRoZXNlIGFyZSByZWlmaWVkIGludG8gaGFuZ2luZ1xuICAvLyBwcm9taXNlcyB0aGF0IHN1c3BlbmQgZHVyaW5nIHJlbmRlciwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgd2hhdCB3ZSB3YW50LlxuICAvLyBUaGUgVUkgcmVzb2x2ZXMgd2hlbiBpdCBzd2l0Y2hlcyB0byB0aGUgZHluYW1pYyBkYXRhIHN0cmVhbVxuICAvLyAodmlhIHVzZURlZmVycmVkVmFsdWUoZHluYW1pYywgc3RhdGljKSkuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHRoZSBGbGlnaHQgaW1wbGVtZW50YXRpb24gY3VycmVudGx5IGVycm9ycyBpZiB0aGUgc2VydmVyIGNsb3Nlc1xuICAvLyB0aGUgcmVzcG9uc2UgYmVmb3JlIGFsbCB0aGUgcmVmZXJlbmNlcyBhcmUgcmVzb2x2ZWQuIEFzIGEgY2hlYXQgdG8gd29ya1xuICAvLyBhcm91bmQgdGhpcywgd2Ugd3JhcCB0aGUgb3JpZ2luYWwgc3RyZWFtIGluIGEgbmV3IHN0cmVhbSB0aGF0IG5ldmVyIGNsb3NlcyxcbiAgLy8gYW5kIHRoZXJlZm9yZSBkb2Vzbid0IGVycm9yLlxuICBjb25zdCByZWFkZXIgPSBvcmlnaW5hbEZsaWdodFN0cmVhbS5nZXRSZWFkZXIoKVxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgLy8gUGFzcyB0byB0aGUgdGFyZ2V0IHN0cmVhbSBhbmQga2VlcCBjb25zdW1pbmcgdGhlIEZsaWdodCByZXNwb25zZVxuICAgICAgICAgIC8vIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgc2VydmVyIHN0cmVhbSBoYXMgY2xvc2VkLiBFeGl0LCBidXQgaW50ZW50aW9uYWxseSBkbyBub3QgY2xvc2VcbiAgICAgICAgLy8gdGhlIHRhcmdldCBzdHJlYW0uXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsImNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJyZXF1aXJlIiwidXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyIiwidXJsIiwidXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlYXJjaFBhcmFtcyIsImRlbGV0ZSIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwiTk9ERV9FTlYiLCJfX05FWFRfQ09ORklHX09VVFBVVCIsInBhdGhuYW1lIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJzbGljZSIsImRvTXBhTmF2aWdhdGlvbiIsImZsaWdodERhdGEiLCJ0b1N0cmluZyIsImNhbm9uaWNhbFVybCIsInVuZGVmaW5lZCIsImNvdWxkQmVJbnRlcmNlcHRlZCIsInByZXJlbmRlcmVkIiwicG9zdHBvbmVkIiwic3RhbGVUaW1lIiwib3B0aW9ucyIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsImJ1aWxkSWQiLCJwcmVmZXRjaEtpbmQiLCJoZWFkZXJzIiwiUlNDX0hFQURFUiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIlByZWZldGNoS2luZCIsIkFVVE8iLCJORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIiLCJpc0htclJlZnJlc2giLCJORVhUX0hNUl9SRUZSRVNIX0hFQURFUiIsIk5FWFRfVVJMIiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwidW5pcXVlQ2FjaGVRdWVyeSIsImhleEhhc2giLCJqb2luIiwicmVzIiwiZmV0Y2hVcmwiLCJzZXQiLCJmZXRjaFByaW9yaXR5IiwiVEVNUE9SQVJZIiwiX19ORVhUX1RFU1RfTU9ERSIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJwcmlvcml0eSIsInJlc3BvbnNlVXJsIiwicmVkaXJlY3RlZCIsImNvbnRlbnRUeXBlIiwiZ2V0IiwiaW50ZXJjZXB0aW9uIiwiaW5jbHVkZXMiLCJORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIiLCJzdGFsZVRpbWVIZWFkZXIiLCJORVhUX1JPVVRFUl9TVEFMRV9USU1FX0hFQURFUiIsInBhcnNlSW50IiwiaXNGbGlnaHRSZXNwb25zZSIsInN0YXJ0c1dpdGgiLCJSU0NfQ09OVEVOVF9UWVBFX0hFQURFUiIsIm9rIiwiYm9keSIsImhhc2giLCJUVVJCT1BBQ0siLCJ3YWl0Rm9yV2VicGFja1J1bnRpbWVIb3RVcGRhdGUiLCJmbGlnaHRTdHJlYW0iLCJjcmVhdGVVbmNsb3NpbmdQcmVmZXRjaFN0cmVhbSIsInJlc3BvbnNlIiwiY2FsbFNlcnZlciIsImZpbmRTb3VyY2VNYXBVUkwiLCJiIiwibm9ybWFsaXplRmxpZ2h0RGF0YSIsImYiLCJTIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwib3JpZ2luYWxGbGlnaHRTdHJlYW0iLCJyZWFkZXIiLCJnZXRSZWFkZXIiLCJSZWFkYWJsZVN0cmVhbSIsInB1bGwiLCJjb250cm9sbGVyIiwiZG9uZSIsInZhbHVlIiwicmVhZCIsImVucXVldWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\n");
|
1481
1064
|
|
1482
1065
|
/***/ }),
|
1483
1066
|
|
@@ -2318,7 +1901,7 @@ eval("(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwp
|
|
2318
1901
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
2319
1902
|
|
2320
1903
|
"use strict";
|
2321
|
-
eval("/**\n * @license React\n * react-server-dom-webpack-client.edge.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */ \n true && function() {\n function _defineProperty(obj, key, value) {\n key in obj ? Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : obj[key] = value;\n return obj;\n }\n function resolveClientReference(bundlerConfig, metadata) {\n if (bundlerConfig) {\n var moduleExports = bundlerConfig[metadata[0]];\n if (bundlerConfig = moduleExports && moduleExports[metadata[2]]) moduleExports = bundlerConfig.name;\n else {\n bundlerConfig = moduleExports && moduleExports[\"*\"];\n if (!bundlerConfig) throw Error('Could not find the module \"' + metadata[0] + '\" in the React Server Consumer Manifest. This is probably a bug in the React Server Components bundler.');\n moduleExports = metadata[2];\n }\n return 4 === metadata.length ? [\n bundlerConfig.id,\n bundlerConfig.chunks,\n moduleExports,\n 1\n ] : [\n bundlerConfig.id,\n bundlerConfig.chunks,\n moduleExports\n ];\n }\n return metadata;\n }\n function resolveServerReference(bundlerConfig, id) {\n var name = \"\", resolvedModuleData = bundlerConfig[id];\n if (resolvedModuleData) name = resolvedModuleData.name;\n else {\n var idx = id.lastIndexOf(\"#\");\n -1 !== idx && (name = id.slice(idx + 1), resolvedModuleData = bundlerConfig[id.slice(0, idx)]);\n if (!resolvedModuleData) throw Error('Could not find the module \"' + id + '\" in the React Server Manifest. This is probably a bug in the React Server Components bundler.');\n }\n return resolvedModuleData.async ? [\n resolvedModuleData.id,\n resolvedModuleData.chunks,\n name,\n 1\n ] : [\n resolvedModuleData.id,\n resolvedModuleData.chunks,\n name\n ];\n }\n function requireAsyncModule(id) {\n var promise = globalThis.__next_require__(id);\n if (\"function\" !== typeof promise.then || \"fulfilled\" === promise.status) return null;\n promise.then(function(value) {\n promise.status = \"fulfilled\";\n promise.value = value;\n }, function(reason) {\n promise.status = \"rejected\";\n promise.reason = reason;\n });\n return promise;\n }\n function ignoreReject() {}\n function preloadModule(metadata) {\n for(var chunks = metadata[1], promises = [], i = 0; i < chunks.length;){\n var chunkId = chunks[i++];\n chunks[i++];\n var entry = chunkCache.get(chunkId);\n if (void 0 === entry) {\n entry = __webpack_require__.e(chunkId);\n promises.push(entry);\n var resolve = chunkCache.set.bind(chunkCache, chunkId, null);\n entry.then(resolve, ignoreReject);\n chunkCache.set(chunkId, entry);\n } else null !== entry && promises.push(entry);\n }\n return 4 === metadata.length ? 0 === promises.length ? requireAsyncModule(metadata[0]) : Promise.all(promises).then(function() {\n return requireAsyncModule(metadata[0]);\n }) : 0 < promises.length ? Promise.all(promises) : null;\n }\n function requireModule(metadata) {\n var moduleExports = globalThis.__next_require__(metadata[0]);\n if (4 === metadata.length && \"function\" === typeof moduleExports.then) if (\"fulfilled\" === moduleExports.status) moduleExports = moduleExports.value;\n else throw moduleExports.reason;\n return \"*\" === metadata[2] ? moduleExports : \"\" === metadata[2] ? moduleExports.__esModule ? moduleExports.default : moduleExports : moduleExports[metadata[2]];\n }\n function prepareDestinationWithChunks(moduleLoading, chunks, nonce$jscomp$0) {\n if (null !== moduleLoading) for(var i = 1; i < chunks.length; i += 2){\n var nonce = nonce$jscomp$0, JSCompiler_temp_const = ReactDOMSharedInternals.d, JSCompiler_temp_const$jscomp$0 = JSCompiler_temp_const.X, JSCompiler_temp_const$jscomp$1 = moduleLoading.prefix + chunks[i];\n var JSCompiler_inline_result = moduleLoading.crossOrigin;\n JSCompiler_inline_result = \"string\" === typeof JSCompiler_inline_result ? \"use-credentials\" === JSCompiler_inline_result ? JSCompiler_inline_result : \"\" : void 0;\n JSCompiler_temp_const$jscomp$0.call(JSCompiler_temp_const, JSCompiler_temp_const$jscomp$1, {\n crossOrigin: JSCompiler_inline_result,\n nonce: nonce\n });\n }\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function isObjectPrototype(object) {\n if (!object) return !1;\n var ObjectPrototype = Object.prototype;\n if (object === ObjectPrototype) return !0;\n if (getPrototypeOf(object)) return !1;\n object = Object.getOwnPropertyNames(object);\n for(var i = 0; i < object.length; i++)if (!(object[i] in ObjectPrototype)) return !1;\n return !0;\n }\n function isSimpleObject(object) {\n if (!isObjectPrototype(getPrototypeOf(object))) return !1;\n for(var names = Object.getOwnPropertyNames(object), i = 0; i < names.length; i++){\n var descriptor = Object.getOwnPropertyDescriptor(object, names[i]);\n if (!descriptor || !descriptor.enumerable && (\"key\" !== names[i] && \"ref\" !== names[i] || \"function\" !== typeof descriptor.get)) return !1;\n }\n return !0;\n }\n function objectName(object) {\n return Object.prototype.toString.call(object).replace(/^\\[object (.*)\\]$/, function(m, p0) {\n return p0;\n });\n }\n function describeKeyForErrorMessage(key) {\n var encodedKey = JSON.stringify(key);\n return '\"' + key + '\"' === encodedKey ? key : encodedKey;\n }\n function describeValueForErrorMessage(value) {\n switch(typeof value){\n case \"string\":\n return JSON.stringify(10 >= value.length ? value : value.slice(0, 10) + \"...\");\n case \"object\":\n if (isArrayImpl(value)) return \"[...]\";\n if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG) return \"client\";\n value = objectName(value);\n return \"Object\" === value ? \"{...}\" : value;\n case \"function\":\n return value.$$typeof === CLIENT_REFERENCE_TAG ? \"client\" : (value = value.displayName || value.name) ? \"function \" + value : \"function\";\n default:\n return String(value);\n }\n }\n function describeElementType(type) {\n if (\"string\" === typeof type) return type;\n switch(type){\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type) switch(type.$$typeof){\n case REACT_FORWARD_REF_TYPE:\n return describeElementType(type.render);\n case REACT_MEMO_TYPE:\n return describeElementType(type.type);\n case REACT_LAZY_TYPE:\n var payload = type._payload;\n type = type._init;\n try {\n return describeElementType(type(payload));\n } catch (x) {}\n }\n return \"\";\n }\n function describeObjectForErrorMessage(objectOrArray, expandedName) {\n var objKind = objectName(objectOrArray);\n if (\"Object\" !== objKind && \"Array\" !== objKind) return objKind;\n var start = -1, length = 0;\n if (isArrayImpl(objectOrArray)) if (jsxChildrenParents.has(objectOrArray)) {\n var type = jsxChildrenParents.get(objectOrArray);\n objKind = \"<\" + describeElementType(type) + \">\";\n for(var i = 0; i < objectOrArray.length; i++){\n var value = objectOrArray[i];\n value = \"string\" === typeof value ? value : \"object\" === typeof value && null !== value ? \"{\" + describeObjectForErrorMessage(value) + \"}\" : \"{\" + describeValueForErrorMessage(value) + \"}\";\n \"\" + i === expandedName ? (start = objKind.length, length = value.length, objKind += value) : objKind = 15 > value.length && 40 > objKind.length + value.length ? objKind + value : objKind + \"{...}\";\n }\n objKind += \"</\" + describeElementType(type) + \">\";\n } else {\n objKind = \"[\";\n for(type = 0; type < objectOrArray.length; type++)0 < type && (objKind += \", \"), i = objectOrArray[type], i = \"object\" === typeof i && null !== i ? describeObjectForErrorMessage(i) : describeValueForErrorMessage(i), \"\" + type === expandedName ? (start = objKind.length, length = i.length, objKind += i) : objKind = 10 > i.length && 40 > objKind.length + i.length ? objKind + i : objKind + \"...\";\n objKind += \"]\";\n }\n else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE) objKind = \"<\" + describeElementType(objectOrArray.type) + \"/>\";\n else {\n if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return \"client\";\n if (jsxPropsParents.has(objectOrArray)) {\n objKind = jsxPropsParents.get(objectOrArray);\n objKind = \"<\" + (describeElementType(objKind) || \"...\");\n type = Object.keys(objectOrArray);\n for(i = 0; i < type.length; i++){\n objKind += \" \";\n value = type[i];\n objKind += describeKeyForErrorMessage(value) + \"=\";\n var _value2 = objectOrArray[value];\n var _substr2 = value === expandedName && \"object\" === typeof _value2 && null !== _value2 ? describeObjectForErrorMessage(_value2) : describeValueForErrorMessage(_value2);\n \"string\" !== typeof _value2 && (_substr2 = \"{\" + _substr2 + \"}\");\n value === expandedName ? (start = objKind.length, length = _substr2.length, objKind += _substr2) : objKind = 10 > _substr2.length && 40 > objKind.length + _substr2.length ? objKind + _substr2 : objKind + \"...\";\n }\n objKind += \">\";\n } else {\n objKind = \"{\";\n type = Object.keys(objectOrArray);\n for(i = 0; i < type.length; i++)0 < i && (objKind += \", \"), value = type[i], objKind += describeKeyForErrorMessage(value) + \": \", _value2 = objectOrArray[value], _value2 = \"object\" === typeof _value2 && null !== _value2 ? describeObjectForErrorMessage(_value2) : describeValueForErrorMessage(_value2), value === expandedName ? (start = objKind.length, length = _value2.length, objKind += _value2) : objKind = 10 > _value2.length && 40 > objKind.length + _value2.length ? objKind + _value2 : objKind + \"...\";\n objKind += \"}\";\n }\n }\n return void 0 === expandedName ? objKind : -1 < start && 0 < length ? (objectOrArray = \" \".repeat(start) + \"^\".repeat(length), \"\\n \" + objKind + \"\\n \" + objectOrArray) : \"\\n \" + objKind;\n }\n function serializeNumber(number) {\n return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number ? \"$-0\" : number : Infinity === number ? \"$Infinity\" : -Infinity === number ? \"$-Infinity\" : \"$NaN\";\n }\n function processReply(root, formFieldPrefix, temporaryReferences, resolve, reject) {\n function serializeTypedArray(tag, typedArray) {\n typedArray = new Blob([\n new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength)\n ]);\n var blobId = nextPartId++;\n null === formData && (formData = new FormData());\n formData.append(formFieldPrefix + blobId, typedArray);\n return \"$\" + tag + blobId.toString(16);\n }\n function serializeBinaryReader(reader) {\n function progress(entry) {\n entry.done ? (entry = nextPartId++, data.append(formFieldPrefix + entry, new Blob(buffer)), data.append(formFieldPrefix + streamId, '\"$o' + entry.toString(16) + '\"'), data.append(formFieldPrefix + streamId, \"C\"), pendingParts--, 0 === pendingParts && resolve(data)) : (buffer.push(entry.value), reader.read(new Uint8Array(1024)).then(progress, reject));\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++, buffer = [];\n reader.read(new Uint8Array(1024)).then(progress, reject);\n return \"$r\" + streamId.toString(16);\n }\n function serializeReader(reader) {\n function progress(entry) {\n if (entry.done) data.append(formFieldPrefix + streamId, \"C\"), pendingParts--, 0 === pendingParts && resolve(data);\n else try {\n var partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, partJSON);\n reader.read().then(progress, reject);\n } catch (x) {\n reject(x);\n }\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++;\n reader.read().then(progress, reject);\n return \"$R\" + streamId.toString(16);\n }\n function serializeReadableStream(stream) {\n try {\n var binaryReader = stream.getReader({\n mode: \"byob\"\n });\n } catch (x) {\n return serializeReader(stream.getReader());\n }\n return serializeBinaryReader(binaryReader);\n }\n function serializeAsyncIterable(iterable, iterator) {\n function progress(entry) {\n if (entry.done) {\n if (void 0 === entry.value) data.append(formFieldPrefix + streamId, \"C\");\n else try {\n var partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, \"C\" + partJSON);\n } catch (x) {\n reject(x);\n return;\n }\n pendingParts--;\n 0 === pendingParts && resolve(data);\n } else try {\n var _partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, _partJSON);\n iterator.next().then(progress, reject);\n } catch (x$0) {\n reject(x$0);\n }\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++;\n iterable = iterable === iterator;\n iterator.next().then(progress, reject);\n return \"$\" + (iterable ? \"x\" : \"X\") + streamId.toString(16);\n }\n function resolveToJSON(key, value) {\n var originalValue = this[key];\n \"object\" !== typeof originalValue || originalValue === value || originalValue instanceof Date || (\"Object\" !== objectName(originalValue) ? console.error(\"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\", objectName(originalValue), describeObjectForErrorMessage(this, key)) : console.error(\"Only plain objects can be passed to Server Functions from the Client. Objects with toJSON methods are not supported. Convert it manually to a simple value before passing it to props.%s\", describeObjectForErrorMessage(this, key)));\n if (null === value) return null;\n if (\"object\" === typeof value) {\n switch(value.$$typeof){\n case REACT_ELEMENT_TYPE:\n if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\")) {\n var parentReference = writtenObjects.get(this);\n if (void 0 !== parentReference) return temporaryReferences.set(parentReference + \":\" + key, value), \"$T\";\n }\n throw Error(\"React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" + describeObjectForErrorMessage(this, key));\n case REACT_LAZY_TYPE:\n originalValue = value._payload;\n var init = value._init;\n null === formData && (formData = new FormData());\n pendingParts++;\n try {\n parentReference = init(originalValue);\n var lazyId = nextPartId++, partJSON = serializeModel(parentReference, lazyId);\n formData.append(formFieldPrefix + lazyId, partJSON);\n return \"$\" + lazyId.toString(16);\n } catch (x) {\n if (\"object\" === typeof x && null !== x && \"function\" === typeof x.then) {\n pendingParts++;\n var _lazyId = nextPartId++;\n parentReference = function() {\n try {\n var _partJSON2 = serializeModel(value, _lazyId), _data = formData;\n _data.append(formFieldPrefix + _lazyId, _partJSON2);\n pendingParts--;\n 0 === pendingParts && resolve(_data);\n } catch (reason) {\n reject(reason);\n }\n };\n x.then(parentReference, parentReference);\n return \"$\" + _lazyId.toString(16);\n }\n reject(x);\n return null;\n } finally{\n pendingParts--;\n }\n }\n if (\"function\" === typeof value.then) {\n null === formData && (formData = new FormData());\n pendingParts++;\n var promiseId = nextPartId++;\n value.then(function(partValue) {\n try {\n var _partJSON3 = serializeModel(partValue, promiseId);\n partValue = formData;\n partValue.append(formFieldPrefix + promiseId, _partJSON3);\n pendingParts--;\n 0 === pendingParts && resolve(partValue);\n } catch (reason) {\n reject(reason);\n }\n }, reject);\n return \"$@\" + promiseId.toString(16);\n }\n parentReference = writtenObjects.get(value);\n if (void 0 !== parentReference) if (modelRoot === value) modelRoot = null;\n else return parentReference;\n else -1 === key.indexOf(\":\") && (parentReference = writtenObjects.get(this), void 0 !== parentReference && (parentReference = parentReference + \":\" + key, writtenObjects.set(value, parentReference), void 0 !== temporaryReferences && temporaryReferences.set(parentReference, value)));\n if (isArrayImpl(value)) return value;\n if (value instanceof FormData) {\n null === formData && (formData = new FormData());\n var _data3 = formData;\n key = nextPartId++;\n var prefix = formFieldPrefix + key + \"_\";\n value.forEach(function(originalValue, originalKey) {\n _data3.append(prefix + originalKey, originalValue);\n });\n return \"$K\" + key.toString(16);\n }\n if (value instanceof Map) return key = nextPartId++, parentReference = serializeModel(Array.from(value), key), null === formData && (formData = new FormData()), formData.append(formFieldPrefix + key, parentReference), \"$Q\" + key.toString(16);\n if (value instanceof Set) return key = nextPartId++, parentReference = serializeModel(Array.from(value), key), null === formData && (formData = new FormData()), formData.append(formFieldPrefix + key, parentReference), \"$W\" + key.toString(16);\n if (value instanceof ArrayBuffer) return key = new Blob([\n value\n ]), parentReference = nextPartId++, null === formData && (formData = new FormData()), formData.append(formFieldPrefix + parentReference, key), \"$A\" + parentReference.toString(16);\n if (value instanceof Int8Array) return serializeTypedArray(\"O\", value);\n if (value instanceof Uint8Array) return serializeTypedArray(\"o\", value);\n if (value instanceof Uint8ClampedArray) return serializeTypedArray(\"U\", value);\n if (value instanceof Int16Array) return serializeTypedArray(\"S\", value);\n if (value instanceof Uint16Array) return serializeTypedArray(\"s\", value);\n if (value instanceof Int32Array) return serializeTypedArray(\"L\", value);\n if (value instanceof Uint32Array) return serializeTypedArray(\"l\", value);\n if (value instanceof Float32Array) return serializeTypedArray(\"G\", value);\n if (value instanceof Float64Array) return serializeTypedArray(\"g\", value);\n if (value instanceof BigInt64Array) return serializeTypedArray(\"M\", value);\n if (value instanceof BigUint64Array) return serializeTypedArray(\"m\", value);\n if (value instanceof DataView) return serializeTypedArray(\"V\", value);\n if (\"function\" === typeof Blob && value instanceof Blob) return null === formData && (formData = new FormData()), key = nextPartId++, formData.append(formFieldPrefix + key, value), \"$B\" + key.toString(16);\n if (parentReference = getIteratorFn(value)) return parentReference = parentReference.call(value), parentReference === value ? (key = nextPartId++, parentReference = serializeModel(Array.from(parentReference), key), null === formData && (formData = new FormData()), formData.append(formFieldPrefix + key, parentReference), \"$i\" + key.toString(16)) : Array.from(parentReference);\n if (\"function\" === typeof ReadableStream && value instanceof ReadableStream) return serializeReadableStream(value);\n parentReference = value[ASYNC_ITERATOR];\n if (\"function\" === typeof parentReference) return serializeAsyncIterable(value, parentReference.call(value));\n parentReference = getPrototypeOf(value);\n if (parentReference !== ObjectPrototype && (null === parentReference || null !== getPrototypeOf(parentReference))) {\n if (void 0 === temporaryReferences) throw Error(\"Only plain objects, and a few built-ins, can be passed to Server Actions. Classes or null prototypes are not supported.\" + describeObjectForErrorMessage(this, key));\n return \"$T\";\n }\n value.$$typeof === REACT_CONTEXT_TYPE ? console.error(\"React Context Providers cannot be passed to Server Functions from the Client.%s\", describeObjectForErrorMessage(this, key)) : \"Object\" !== objectName(value) ? console.error(\"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\", objectName(value), describeObjectForErrorMessage(this, key)) : isSimpleObject(value) ? Object.getOwnPropertySymbols && (parentReference = Object.getOwnPropertySymbols(value), 0 < parentReference.length && console.error(\"Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s\", parentReference[0].description, describeObjectForErrorMessage(this, key))) : console.error(\"Only plain objects can be passed to Server Functions from the Client. Classes or other objects with methods are not supported.%s\", describeObjectForErrorMessage(this, key));\n return value;\n }\n if (\"string\" === typeof value) {\n if (\"Z\" === value[value.length - 1] && this[key] instanceof Date) return \"$D\" + value;\n key = \"$\" === value[0] ? \"$\" + value : value;\n return key;\n }\n if (\"boolean\" === typeof value) return value;\n if (\"number\" === typeof value) return serializeNumber(value);\n if (\"undefined\" === typeof value) return \"$undefined\";\n if (\"function\" === typeof value) {\n parentReference = knownServerReferences.get(value);\n if (void 0 !== parentReference) return key = JSON.stringify(parentReference, resolveToJSON), null === formData && (formData = new FormData()), parentReference = nextPartId++, formData.set(formFieldPrefix + parentReference, key), \"$F\" + parentReference.toString(16);\n if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\") && (parentReference = writtenObjects.get(this), void 0 !== parentReference)) return temporaryReferences.set(parentReference + \":\" + key, value), \"$T\";\n throw Error(\"Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again.\");\n }\n if (\"symbol\" === typeof value) {\n if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\") && (parentReference = writtenObjects.get(this), void 0 !== parentReference)) return temporaryReferences.set(parentReference + \":\" + key, value), \"$T\";\n throw Error(\"Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" + describeObjectForErrorMessage(this, key));\n }\n if (\"bigint\" === typeof value) return \"$n\" + value.toString(10);\n throw Error(\"Type \" + typeof value + \" is not supported as an argument to a Server Function.\");\n }\n function serializeModel(model, id) {\n \"object\" === typeof model && null !== model && (id = \"$\" + id.toString(16), writtenObjects.set(model, id), void 0 !== temporaryReferences && temporaryReferences.set(id, model));\n modelRoot = model;\n return JSON.stringify(model, resolveToJSON);\n }\n var nextPartId = 1, pendingParts = 0, formData = null, writtenObjects = new WeakMap(), modelRoot = root, json = serializeModel(root, 0);\n null === formData ? resolve(json) : (formData.set(formFieldPrefix + \"0\", json), 0 === pendingParts && resolve(formData));\n return function() {\n 0 < pendingParts && (pendingParts = 0, null === formData ? resolve(json) : resolve(formData));\n };\n }\n function encodeFormData(reference) {\n var resolve, reject, thenable = new Promise(function(res, rej) {\n resolve = res;\n reject = rej;\n });\n processReply(reference, \"\", void 0, function(body) {\n if (\"string\" === typeof body) {\n var data = new FormData();\n data.append(\"0\", body);\n body = data;\n }\n thenable.status = \"fulfilled\";\n thenable.value = body;\n resolve(body);\n }, function(e) {\n thenable.status = \"rejected\";\n thenable.reason = e;\n reject(e);\n });\n return thenable;\n }\n function defaultEncodeFormAction(identifierPrefix) {\n var reference = knownServerReferences.get(this);\n if (!reference) throw Error(\"Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.\");\n var data = null;\n if (null !== reference.bound) {\n data = boundCache.get(reference);\n data || (data = encodeFormData(reference), boundCache.set(reference, data));\n if (\"rejected\" === data.status) throw data.reason;\n if (\"fulfilled\" !== data.status) throw data;\n reference = data.value;\n var prefixedData = new FormData();\n reference.forEach(function(value, key) {\n prefixedData.append(\"$ACTION_\" + identifierPrefix + \":\" + key, value);\n });\n data = prefixedData;\n reference = \"$ACTION_REF_\" + identifierPrefix;\n } else reference = \"$ACTION_ID_\" + reference.id;\n return {\n name: reference,\n method: \"POST\",\n encType: \"multipart/form-data\",\n data: data\n };\n }\n function isSignatureEqual(referenceId, numberOfBoundArgs) {\n var reference = knownServerReferences.get(this);\n if (!reference) throw Error(\"Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.\");\n if (reference.id !== referenceId) return !1;\n var boundPromise = reference.bound;\n if (null === boundPromise) return 0 === numberOfBoundArgs;\n switch(boundPromise.status){\n case \"fulfilled\":\n return boundPromise.value.length === numberOfBoundArgs;\n case \"pending\":\n throw boundPromise;\n case \"rejected\":\n throw boundPromise.reason;\n default:\n throw \"string\" !== typeof boundPromise.status && (boundPromise.status = \"pending\", boundPromise.then(function(boundArgs) {\n boundPromise.status = \"fulfilled\";\n boundPromise.value = boundArgs;\n }, function(error) {\n boundPromise.status = \"rejected\";\n boundPromise.reason = error;\n })), boundPromise;\n }\n }\n function createFakeServerFunction(name, filename, sourceMap, line, col, environmentName, innerFunction) {\n name || (name = \"<anonymous>\");\n var encodedName = JSON.stringify(name);\n 1 >= line ? (line = encodedName.length + 7, col = \"s=>({\" + encodedName + \" \".repeat(col < line ? 0 : col - line) + \":(...args) => s(...args)})\\n/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\") : col = \"/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\" + \"\\n\".repeat(line - 2) + \"server=>({\" + encodedName + \":\\n\" + \" \".repeat(1 > col ? 0 : col - 1) + \"(...args) => server(...args)})\";\n filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n sourceMap ? (col += \"\\n//# sourceURL=rsc://React/\" + encodeURIComponent(environmentName) + \"/\" + filename + \"?s\" + fakeServerFunctionIdx++, col += \"\\n//# sourceMappingURL=\" + sourceMap) : filename && (col += \"\\n//# sourceURL=\" + filename);\n try {\n return (0, eval)(col)(innerFunction)[name];\n } catch (x) {\n return innerFunction;\n }\n }\n function registerServerReference(proxy, reference$jscomp$0, encodeFormAction) {\n Object.defineProperties(proxy, {\n $$FORM_ACTION: {\n value: void 0 === encodeFormAction ? defaultEncodeFormAction : function() {\n var reference = knownServerReferences.get(this);\n if (!reference) throw Error(\"Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.\");\n var boundPromise = reference.bound;\n null === boundPromise && (boundPromise = Promise.resolve([]));\n return encodeFormAction(reference.id, boundPromise);\n }\n },\n $$IS_SIGNATURE_EQUAL: {\n value: isSignatureEqual\n },\n bind: {\n value: bind\n }\n });\n knownServerReferences.set(proxy, reference$jscomp$0);\n }\n function bind() {\n var newFn = FunctionBind.apply(this, arguments), reference = knownServerReferences.get(this);\n if (reference) {\n null != arguments[0] && console.error('Cannot bind \"this\" of a Server Action. Pass null or undefined as the first argument to .bind().');\n var args = ArraySlice.call(arguments, 1), boundPromise = null;\n boundPromise = null !== reference.bound ? Promise.resolve(reference.bound).then(function(boundArgs) {\n return boundArgs.concat(args);\n }) : Promise.resolve(args);\n Object.defineProperties(newFn, {\n $$FORM_ACTION: {\n value: this.$$FORM_ACTION\n },\n $$IS_SIGNATURE_EQUAL: {\n value: isSignatureEqual\n },\n bind: {\n value: bind\n }\n });\n knownServerReferences.set(newFn, {\n id: reference.id,\n bound: boundPromise\n });\n }\n return newFn;\n }\n function createBoundServerReference(metaData, callServer, encodeFormAction, findSourceMapURL) {\n function action() {\n var args = Array.prototype.slice.call(arguments);\n return bound ? \"fulfilled\" === bound.status ? callServer(id, bound.value.concat(args)) : Promise.resolve(bound).then(function(boundArgs) {\n return callServer(id, boundArgs.concat(args));\n }) : callServer(id, args);\n }\n var id = metaData.id, bound = metaData.bound, location = metaData.location;\n if (location) {\n var functionName = metaData.name || \"\", filename = location[1], line = location[2];\n location = location[3];\n metaData = metaData.env || \"Server\";\n findSourceMapURL = null == findSourceMapURL ? null : findSourceMapURL(filename, metaData);\n action = createFakeServerFunction(functionName, filename, findSourceMapURL, line, location, metaData, action);\n }\n registerServerReference(action, {\n id: id,\n bound: bound\n }, encodeFormAction);\n return action;\n }\n function parseStackLocation(error) {\n error = error.stack;\n error.startsWith(\"Error: react-stack-top-frame\\n\") && (error = error.slice(29));\n var endOfFirst = error.indexOf(\"\\n\");\n if (-1 !== endOfFirst) {\n var endOfSecond = error.indexOf(\"\\n\", endOfFirst + 1);\n endOfFirst = -1 === endOfSecond ? error.slice(endOfFirst + 1) : error.slice(endOfFirst + 1, endOfSecond);\n } else endOfFirst = error;\n error = v8FrameRegExp.exec(endOfFirst);\n if (!error && (error = jscSpiderMonkeyFrameRegExp.exec(endOfFirst), !error)) return null;\n endOfFirst = error[1] || \"\";\n \"<anonymous>\" === endOfFirst && (endOfFirst = \"\");\n endOfSecond = error[2] || error[5] || \"\";\n \"<anonymous>\" === endOfSecond && (endOfSecond = \"\");\n return [\n endOfFirst,\n endOfSecond,\n +(error[3] || error[6]),\n +(error[4] || error[7])\n ];\n }\n function createServerReference$1(id, callServer, encodeFormAction, findSourceMapURL, functionName) {\n function action() {\n var args = Array.prototype.slice.call(arguments);\n return callServer(id, args);\n }\n var location = parseStackLocation(Error(\"react-stack-top-frame\"));\n if (null !== location) {\n var filename = location[1], line = location[2];\n location = location[3];\n findSourceMapURL = null == findSourceMapURL ? null : findSourceMapURL(filename, \"Client\");\n action = createFakeServerFunction(functionName || \"\", filename, findSourceMapURL, line, location, \"Client\", action);\n }\n registerServerReference(action, {\n id: id,\n bound: null\n }, encodeFormAction);\n return action;\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type) return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch(type){\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type) switch(\"number\" === typeof type.tag && console.error(\"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"), type.$$typeof){\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type || (type = innerType.displayName || innerType.name || \"\", type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\");\n return type;\n case REACT_MEMO_TYPE:\n return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || \"Memo\";\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function ReactPromise(status, value, reason, response) {\n this.status = status;\n this.value = value;\n this.reason = reason;\n this._response = response;\n this._debugInfo = null;\n }\n function readChunk(chunk) {\n switch(chunk.status){\n case \"resolved_model\":\n initializeModelChunk(chunk);\n break;\n case \"resolved_module\":\n initializeModuleChunk(chunk);\n }\n switch(chunk.status){\n case \"fulfilled\":\n return chunk.value;\n case \"pending\":\n case \"blocked\":\n throw chunk;\n default:\n throw chunk.reason;\n }\n }\n function createPendingChunk(response) {\n return new ReactPromise(\"pending\", null, null, response);\n }\n function wakeChunk(listeners, value) {\n for(var i = 0; i < listeners.length; i++)(0, listeners[i])(value);\n }\n function wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners) {\n switch(chunk.status){\n case \"fulfilled\":\n wakeChunk(resolveListeners, chunk.value);\n break;\n case \"pending\":\n case \"blocked\":\n if (chunk.value) for(var i = 0; i < resolveListeners.length; i++)chunk.value.push(resolveListeners[i]);\n else chunk.value = resolveListeners;\n if (chunk.reason) {\n if (rejectListeners) for(resolveListeners = 0; resolveListeners < rejectListeners.length; resolveListeners++)chunk.reason.push(rejectListeners[resolveListeners]);\n } else chunk.reason = rejectListeners;\n break;\n case \"rejected\":\n rejectListeners && wakeChunk(rejectListeners, chunk.reason);\n }\n }\n function triggerErrorOnChunk(chunk, error) {\n if (\"pending\" !== chunk.status && \"blocked\" !== chunk.status) chunk.reason.error(error);\n else {\n var listeners = chunk.reason;\n chunk.status = \"rejected\";\n chunk.reason = error;\n null !== listeners && wakeChunk(listeners, error);\n }\n }\n function createResolvedIteratorResultChunk(response, value, done) {\n return new ReactPromise(\"resolved_model\", (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') + value + \"}\", null, response);\n }\n function resolveIteratorResultChunk(chunk, value, done) {\n resolveModelChunk(chunk, (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') + value + \"}\");\n }\n function resolveModelChunk(chunk, value) {\n if (\"pending\" !== chunk.status) chunk.reason.enqueueModel(value);\n else {\n var resolveListeners = chunk.value, rejectListeners = chunk.reason;\n chunk.status = \"resolved_model\";\n chunk.value = value;\n null !== resolveListeners && (initializeModelChunk(chunk), wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners));\n }\n }\n function resolveModuleChunk(chunk, value) {\n if (\"pending\" === chunk.status || \"blocked\" === chunk.status) {\n var resolveListeners = chunk.value, rejectListeners = chunk.reason;\n chunk.status = \"resolved_module\";\n chunk.value = value;\n null !== resolveListeners && (initializeModuleChunk(chunk), wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners));\n }\n }\n function initializeModelChunk(chunk) {\n var prevHandler = initializingHandler;\n initializingHandler = null;\n var resolvedModel = chunk.value;\n chunk.status = \"blocked\";\n chunk.value = null;\n chunk.reason = null;\n try {\n var value = JSON.parse(resolvedModel, chunk._response._fromJSON), resolveListeners = chunk.value;\n null !== resolveListeners && (chunk.value = null, chunk.reason = null, wakeChunk(resolveListeners, value));\n if (null !== initializingHandler) {\n if (initializingHandler.errored) throw initializingHandler.value;\n if (0 < initializingHandler.deps) {\n initializingHandler.value = value;\n initializingHandler.chunk = chunk;\n return;\n }\n }\n chunk.status = \"fulfilled\";\n chunk.value = value;\n } catch (error) {\n chunk.status = \"rejected\", chunk.reason = error;\n } finally{\n initializingHandler = prevHandler;\n }\n }\n function initializeModuleChunk(chunk) {\n try {\n var value = requireModule(chunk.value);\n chunk.status = \"fulfilled\";\n chunk.value = value;\n } catch (error) {\n chunk.status = \"rejected\", chunk.reason = error;\n }\n }\n function reportGlobalError(response, error) {\n response._chunks.forEach(function(chunk) {\n \"pending\" === chunk.status && triggerErrorOnChunk(chunk, error);\n });\n }\n function nullRefGetter() {\n return null;\n }\n function createLazyChunkWrapper(chunk) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: chunk,\n _init: readChunk\n };\n chunk = chunk._debugInfo || (chunk._debugInfo = []);\n lazyType._debugInfo = chunk;\n return lazyType;\n }\n function getChunk(response, id) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk || (chunk = createPendingChunk(response), chunks.set(id, chunk));\n return chunk;\n }\n function waitForReference(referencedChunk, parentObject, key, response, map, path) {\n function fulfill(value) {\n for(var i = 1; i < path.length; i++){\n for(; value.$$typeof === REACT_LAZY_TYPE;)if (value = value._payload, value === handler.chunk) value = handler.value;\n else if (\"fulfilled\" === value.status) value = value.value;\n else {\n path.splice(0, i - 1);\n value.then(fulfill, reject);\n return;\n }\n value = value[path[i]];\n }\n i = map(response, value, parentObject, key);\n parentObject[key] = i;\n \"\" === key && null === handler.value && (handler.value = i);\n if (parentObject[0] === REACT_ELEMENT_TYPE && \"object\" === typeof handler.value && null !== handler.value && handler.value.$$typeof === REACT_ELEMENT_TYPE) switch(value = handler.value, key){\n case \"3\":\n value.props = i;\n break;\n case \"4\":\n value._owner = i;\n }\n handler.deps--;\n 0 === handler.deps && (i = handler.chunk, null !== i && \"blocked\" === i.status && (value = i.value, i.status = \"fulfilled\", i.value = handler.value, null !== value && wakeChunk(value, handler.value)));\n }\n function reject(error) {\n if (!handler.errored) {\n var blockedValue = handler.value;\n handler.errored = !0;\n handler.value = error;\n var chunk = handler.chunk;\n null !== chunk && \"blocked\" === chunk.status && (\"object\" === typeof blockedValue && null !== blockedValue && blockedValue.$$typeof === REACT_ELEMENT_TYPE && (blockedValue = {\n name: getComponentNameFromType(blockedValue.type) || \"\",\n owner: blockedValue._owner\n }, (chunk._debugInfo || (chunk._debugInfo = [])).push(blockedValue)), triggerErrorOnChunk(chunk, error));\n }\n }\n if (initializingHandler) {\n var handler = initializingHandler;\n handler.deps++;\n } else handler = initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n };\n referencedChunk.then(fulfill, reject);\n return null;\n }\n function loadServerReference(response, metaData, parentObject, key) {\n if (!response._serverReferenceConfig) return createBoundServerReference(metaData, response._callServer, response._encodeFormAction, response._debugFindSourceMapURL);\n var serverReference = resolveServerReference(response._serverReferenceConfig, metaData.id);\n if (response = preloadModule(serverReference)) metaData.bound && (response = Promise.all([\n response,\n metaData.bound\n ]));\n else if (metaData.bound) response = Promise.resolve(metaData.bound);\n else return requireModule(serverReference);\n if (initializingHandler) {\n var handler = initializingHandler;\n handler.deps++;\n } else handler = initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n };\n response.then(function() {\n var resolvedValue = requireModule(serverReference);\n if (metaData.bound) {\n var boundArgs = metaData.bound.value.slice(0);\n boundArgs.unshift(null);\n resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs);\n }\n parentObject[key] = resolvedValue;\n \"\" === key && null === handler.value && (handler.value = resolvedValue);\n if (parentObject[0] === REACT_ELEMENT_TYPE && \"object\" === typeof handler.value && null !== handler.value && handler.value.$$typeof === REACT_ELEMENT_TYPE) switch(boundArgs = handler.value, key){\n case \"3\":\n boundArgs.props = resolvedValue;\n break;\n case \"4\":\n boundArgs._owner = resolvedValue;\n }\n handler.deps--;\n 0 === handler.deps && (resolvedValue = handler.chunk, null !== resolvedValue && \"blocked\" === resolvedValue.status && (boundArgs = resolvedValue.value, resolvedValue.status = \"fulfilled\", resolvedValue.value = handler.value, null !== boundArgs && wakeChunk(boundArgs, handler.value)));\n }, function(error) {\n if (!handler.errored) {\n var blockedValue = handler.value;\n handler.errored = !0;\n handler.value = error;\n var chunk = handler.chunk;\n null !== chunk && \"blocked\" === chunk.status && (\"object\" === typeof blockedValue && null !== blockedValue && blockedValue.$$typeof === REACT_ELEMENT_TYPE && (blockedValue = {\n name: getComponentNameFromType(blockedValue.type) || \"\",\n owner: blockedValue._owner\n }, (chunk._debugInfo || (chunk._debugInfo = [])).push(blockedValue)), triggerErrorOnChunk(chunk, error));\n }\n });\n return null;\n }\n function getOutlinedModel(response, reference, parentObject, key, map) {\n reference = reference.split(\":\");\n var id = parseInt(reference[0], 16);\n id = getChunk(response, id);\n switch(id.status){\n case \"resolved_model\":\n initializeModelChunk(id);\n break;\n case \"resolved_module\":\n initializeModuleChunk(id);\n }\n switch(id.status){\n case \"fulfilled\":\n for(var value = id.value, i = 1; i < reference.length; i++){\n for(; value.$$typeof === REACT_LAZY_TYPE;)if (value = value._payload, \"fulfilled\" === value.status) value = value.value;\n else return waitForReference(value, parentObject, key, response, map, reference.slice(i - 1));\n value = value[reference[i]];\n }\n response = map(response, value, parentObject, key);\n id._debugInfo && (\"object\" !== typeof response || null === response || !isArrayImpl(response) && \"function\" !== typeof response[ASYNC_ITERATOR] && response.$$typeof !== REACT_ELEMENT_TYPE || response._debugInfo || Object.defineProperty(response, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: id._debugInfo\n }));\n return response;\n case \"pending\":\n case \"blocked\":\n return waitForReference(id, parentObject, key, response, map, reference);\n default:\n return initializingHandler ? (initializingHandler.errored = !0, initializingHandler.value = id.reason) : initializingHandler = {\n parent: null,\n chunk: null,\n value: id.reason,\n deps: 0,\n errored: !0\n }, null;\n }\n }\n function createMap(response, model) {\n return new Map(model);\n }\n function createSet(response, model) {\n return new Set(model);\n }\n function createBlob(response, model) {\n return new Blob(model.slice(1), {\n type: model[0]\n });\n }\n function createFormData(response, model) {\n response = new FormData();\n for(var i = 0; i < model.length; i++)response.append(model[i][0], model[i][1]);\n return response;\n }\n function extractIterator(response, model) {\n return model[Symbol.iterator]();\n }\n function createModel(response, model) {\n return model;\n }\n function parseModelString(response, parentObject, key, value) {\n if (\"$\" === value[0]) {\n if (\"$\" === value) return null !== initializingHandler && \"0\" === key && (initializingHandler = {\n parent: initializingHandler,\n chunk: null,\n value: null,\n deps: 0,\n errored: !1\n }), REACT_ELEMENT_TYPE;\n switch(value[1]){\n case \"$\":\n return value.slice(1);\n case \"L\":\n return parentObject = parseInt(value.slice(2), 16), response = getChunk(response, parentObject), createLazyChunkWrapper(response);\n case \"@\":\n if (2 === value.length) return new Promise(function() {});\n parentObject = parseInt(value.slice(2), 16);\n return getChunk(response, parentObject);\n case \"S\":\n return Symbol.for(value.slice(2));\n case \"F\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, loadServerReference);\n case \"T\":\n parentObject = \"$\" + value.slice(2);\n response = response._tempRefs;\n if (null == response) throw Error(\"Missing a temporary reference set but the RSC response returned a temporary reference. Pass a temporaryReference option with the set that was used with the reply.\");\n return response.get(parentObject);\n case \"Q\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createMap);\n case \"W\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createSet);\n case \"B\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createBlob);\n case \"K\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createFormData);\n case \"Z\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, resolveErrorDev);\n case \"i\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, extractIterator);\n case \"I\":\n return Infinity;\n case \"-\":\n return \"$-0\" === value ? -0 : -Infinity;\n case \"N\":\n return NaN;\n case \"u\":\n return;\n case \"D\":\n return new Date(Date.parse(value.slice(2)));\n case \"n\":\n return BigInt(value.slice(2));\n case \"E\":\n try {\n return (0, eval)(value.slice(2));\n } catch (x) {\n return function() {};\n }\n case \"Y\":\n return Object.defineProperty(parentObject, key, {\n get: function() {\n return \"This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.\";\n },\n enumerable: !0,\n configurable: !1\n }), null;\n default:\n return value = value.slice(1), getOutlinedModel(response, value, parentObject, key, createModel);\n }\n }\n return value;\n }\n function missingCall() {\n throw Error('Trying to call a function from \"use server\" but the callServer option was not implemented in your router runtime.');\n }\n function ResponseInstance(bundlerConfig, serverReferenceConfig, moduleLoading, callServer, encodeFormAction, nonce, temporaryReferences, findSourceMapURL, replayConsole, environmentName) {\n var chunks = new Map();\n this._bundlerConfig = bundlerConfig;\n this._serverReferenceConfig = serverReferenceConfig;\n this._moduleLoading = moduleLoading;\n this._callServer = void 0 !== callServer ? callServer : missingCall;\n this._encodeFormAction = encodeFormAction;\n this._nonce = nonce;\n this._chunks = chunks;\n this._stringDecoder = new TextDecoder();\n this._fromJSON = null;\n this._rowLength = this._rowTag = this._rowID = this._rowState = 0;\n this._buffer = [];\n this._tempRefs = temporaryReferences;\n this._debugRootOwner = bundlerConfig = void 0 === ReactSharedInteralsServer || null === ReactSharedInteralsServer.A ? null : ReactSharedInteralsServer.A.getOwner();\n this._debugRootStack = null !== bundlerConfig ? Error(\"react-stack-top-frame\") : null;\n this._debugFindSourceMapURL = findSourceMapURL;\n this._replayConsole = replayConsole;\n this._rootEnvironmentName = void 0 === environmentName ? \"Server\" : environmentName;\n this._fromJSON = createFromJSONCallback(this);\n }\n function resolveModel(response, id, model) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk ? resolveModelChunk(chunk, model) : chunks.set(id, new ReactPromise(\"resolved_model\", model, null, response));\n }\n function resolveText(response, id, text) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk && \"pending\" !== chunk.status ? chunk.reason.enqueueValue(text) : chunks.set(id, new ReactPromise(\"fulfilled\", text, null, response));\n }\n function resolveBuffer(response, id, buffer) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk && \"pending\" !== chunk.status ? chunk.reason.enqueueValue(buffer) : chunks.set(id, new ReactPromise(\"fulfilled\", buffer, null, response));\n }\n function resolveModule(response, id, model) {\n var chunks = response._chunks, chunk = chunks.get(id);\n model = JSON.parse(model, response._fromJSON);\n var clientReference = resolveClientReference(response._bundlerConfig, model);\n prepareDestinationWithChunks(response._moduleLoading, model[1], response._nonce);\n if (model = preloadModule(clientReference)) {\n if (chunk) {\n var blockedChunk = chunk;\n blockedChunk.status = \"blocked\";\n } else blockedChunk = new ReactPromise(\"blocked\", null, null, response), chunks.set(id, blockedChunk);\n model.then(function() {\n return resolveModuleChunk(blockedChunk, clientReference);\n }, function(error) {\n return triggerErrorOnChunk(blockedChunk, error);\n });\n } else chunk ? resolveModuleChunk(chunk, clientReference) : chunks.set(id, new ReactPromise(\"resolved_module\", clientReference, null, response));\n }\n function resolveStream(response, id, stream, controller) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk ? \"pending\" === chunk.status && (response = chunk.value, chunk.status = \"fulfilled\", chunk.value = stream, chunk.reason = controller, null !== response && wakeChunk(response, chunk.value)) : chunks.set(id, new ReactPromise(\"fulfilled\", stream, controller, response));\n }\n function startReadableStream(response, id, type) {\n var controller = null;\n type = new ReadableStream({\n type: type,\n start: function(c) {\n controller = c;\n }\n });\n var previousBlockedChunk = null;\n resolveStream(response, id, type, {\n enqueueValue: function(value) {\n null === previousBlockedChunk ? controller.enqueue(value) : previousBlockedChunk.then(function() {\n controller.enqueue(value);\n });\n },\n enqueueModel: function(json) {\n if (null === previousBlockedChunk) {\n var chunk = new ReactPromise(\"resolved_model\", json, null, response);\n initializeModelChunk(chunk);\n \"fulfilled\" === chunk.status ? controller.enqueue(chunk.value) : (chunk.then(function(v) {\n return controller.enqueue(v);\n }, function(e) {\n return controller.error(e);\n }), previousBlockedChunk = chunk);\n } else {\n chunk = previousBlockedChunk;\n var _chunk3 = createPendingChunk(response);\n _chunk3.then(function(v) {\n return controller.enqueue(v);\n }, function(e) {\n return controller.error(e);\n });\n previousBlockedChunk = _chunk3;\n chunk.then(function() {\n previousBlockedChunk === _chunk3 && (previousBlockedChunk = null);\n resolveModelChunk(_chunk3, json);\n });\n }\n },\n close: function() {\n if (null === previousBlockedChunk) controller.close();\n else {\n var blockedChunk = previousBlockedChunk;\n previousBlockedChunk = null;\n blockedChunk.then(function() {\n return controller.close();\n });\n }\n },\n error: function(error) {\n if (null === previousBlockedChunk) controller.error(error);\n else {\n var blockedChunk = previousBlockedChunk;\n previousBlockedChunk = null;\n blockedChunk.then(function() {\n return controller.error(error);\n });\n }\n }\n });\n }\n function asyncIterator() {\n return this;\n }\n function createIterator(next) {\n next = {\n next: next\n };\n next[ASYNC_ITERATOR] = asyncIterator;\n return next;\n }\n function startAsyncIterable(response, id, iterator) {\n var buffer = [], closed = !1, nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function() {\n var nextReadIndex = 0;\n return createIterator(function(arg) {\n if (void 0 !== arg) throw Error(\"Values cannot be passed to next() of AsyncIterables passed to Client Components.\");\n if (nextReadIndex === buffer.length) {\n if (closed) return new ReactPromise(\"fulfilled\", {\n done: !0,\n value: void 0\n }, null, response);\n buffer[nextReadIndex] = createPendingChunk(response);\n }\n return buffer[nextReadIndex++];\n });\n });\n resolveStream(response, id, iterator ? iterable[ASYNC_ITERATOR]() : iterable, {\n enqueueValue: function(value) {\n if (nextWriteIndex === buffer.length) buffer[nextWriteIndex] = new ReactPromise(\"fulfilled\", {\n done: !1,\n value: value\n }, null, response);\n else {\n var chunk = buffer[nextWriteIndex], resolveListeners = chunk.value, rejectListeners = chunk.reason;\n chunk.status = \"fulfilled\";\n chunk.value = {\n done: !1,\n value: value\n };\n null !== resolveListeners && wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners);\n }\n nextWriteIndex++;\n },\n enqueueModel: function(value) {\n nextWriteIndex === buffer.length ? buffer[nextWriteIndex] = createResolvedIteratorResultChunk(response, value, !1) : resolveIteratorResultChunk(buffer[nextWriteIndex], value, !1);\n nextWriteIndex++;\n },\n close: function(value) {\n closed = !0;\n nextWriteIndex === buffer.length ? buffer[nextWriteIndex] = createResolvedIteratorResultChunk(response, value, !0) : resolveIteratorResultChunk(buffer[nextWriteIndex], value, !0);\n for(nextWriteIndex++; nextWriteIndex < buffer.length;)resolveIteratorResultChunk(buffer[nextWriteIndex++], '\"$undefined\"', !0);\n },\n error: function(error) {\n closed = !0;\n for(nextWriteIndex === buffer.length && (buffer[nextWriteIndex] = createPendingChunk(response)); nextWriteIndex < buffer.length;)triggerErrorOnChunk(buffer[nextWriteIndex++], error);\n }\n });\n }\n function stopStream(response, id, row) {\n (response = response._chunks.get(id)) && \"fulfilled\" === response.status && response.reason.close(\"\" === row ? '\"$undefined\"' : row);\n }\n function resolveErrorDev(response, errorInfo) {\n var env = errorInfo.env;\n errorInfo = buildFakeCallStack(response, errorInfo.stack, env, Error.bind(null, errorInfo.message || \"An error occurred in the Server Components render but no message was provided\"));\n response = getRootTask(response, env);\n response = null != response ? response.run(errorInfo) : errorInfo();\n response.environmentName = env;\n return response;\n }\n function resolveHint(response, code, model) {\n response = JSON.parse(model, response._fromJSON);\n model = ReactDOMSharedInternals.d;\n switch(code){\n case \"D\":\n model.D(response);\n break;\n case \"C\":\n \"string\" === typeof response ? model.C(response) : model.C(response[0], response[1]);\n break;\n case \"L\":\n code = response[0];\n var as = response[1];\n 3 === response.length ? model.L(code, as, response[2]) : model.L(code, as);\n break;\n case \"m\":\n \"string\" === typeof response ? model.m(response) : model.m(response[0], response[1]);\n break;\n case \"X\":\n \"string\" === typeof response ? model.X(response) : model.X(response[0], response[1]);\n break;\n case \"S\":\n \"string\" === typeof response ? model.S(response) : model.S(response[0], 0 === response[1] ? void 0 : response[1], 3 === response.length ? response[2] : void 0);\n break;\n case \"M\":\n \"string\" === typeof response ? model.M(response) : model.M(response[0], response[1]);\n }\n }\n function createFakeFunction(name, filename, sourceMap, line, col, environmentName) {\n name || (name = \"<anonymous>\");\n var encodedName = JSON.stringify(name);\n 1 >= line ? (line = encodedName.length + 7, col = \"({\" + encodedName + \":_=>\" + \" \".repeat(col < line ? 0 : col - line) + \"_()})\\n/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\") : col = \"/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\" + \"\\n\".repeat(line - 2) + \"({\" + encodedName + \":_=>\\n\" + \" \".repeat(1 > col ? 0 : col - 1) + \"_()})\";\n filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n sourceMap ? (col += \"\\n//# sourceURL=rsc://React/\" + encodeURIComponent(environmentName) + \"/\" + encodeURI(filename) + \"?\" + fakeFunctionIdx++, col += \"\\n//# sourceMappingURL=\" + sourceMap) : col = filename ? col + (\"\\n//# sourceURL=\" + encodeURI(filename)) : col + \"\\n//# sourceURL=<anonymous>\";\n try {\n var fn = (0, eval)(col)[name];\n } catch (x) {\n fn = function(_) {\n return _();\n };\n }\n return fn;\n }\n function buildFakeCallStack(response, stack, environmentName, innerCall) {\n for(var i = 0; i < stack.length; i++){\n var frame = stack[i], frameKey = frame.join(\"-\") + \"-\" + environmentName, fn = fakeFunctionCache.get(frameKey);\n if (void 0 === fn) {\n fn = frame[0];\n var filename = frame[1], line = frame[2];\n frame = frame[3];\n var findSourceMapURL = response._debugFindSourceMapURL;\n findSourceMapURL = findSourceMapURL ? findSourceMapURL(filename, environmentName) : null;\n fn = createFakeFunction(fn, filename, findSourceMapURL, line, frame, environmentName);\n fakeFunctionCache.set(frameKey, fn);\n }\n innerCall = fn.bind(null, innerCall);\n }\n return innerCall;\n }\n function getRootTask(response, childEnvironmentName) {\n var rootTask = response._debugRootTask;\n return rootTask ? response._rootEnvironmentName !== childEnvironmentName ? (response = console.createTask.bind(console, '\"use ' + childEnvironmentName.toLowerCase() + '\"'), rootTask.run(response)) : rootTask : null;\n }\n function fakeJSXCallSite() {\n return Error(\"react-stack-top-frame\");\n }\n function initializeFakeStack(response, debugInfo) {\n void 0 === debugInfo.debugStack && (null != debugInfo.stack && (debugInfo.debugStack = createFakeJSXCallStackInDEV(response, debugInfo.stack, null == debugInfo.env ? \"\" : debugInfo.env)), null != debugInfo.owner && initializeFakeStack(response, debugInfo.owner));\n }\n function resolveDebugInfo(response, id, debugInfo) {\n null === debugInfo.owner && null != response._debugRootOwner ? (debugInfo.owner = response._debugRootOwner, debugInfo.debugStack = response._debugRootStack) : initializeFakeStack(response, debugInfo);\n response = getChunk(response, id);\n (response._debugInfo || (response._debugInfo = [])).push(debugInfo);\n }\n function getCurrentStackInDEV() {\n return \"\";\n }\n function resolveConsoleEntry(response, value) {\n if (response._replayConsole) {\n var payload = JSON.parse(value, response._fromJSON);\n value = payload[0];\n var stackTrace = payload[1], owner = payload[2], env = payload[3];\n payload = payload.slice(4);\n replayConsoleWithCallStackInDEV(response, value, stackTrace, owner, env, payload);\n }\n }\n function mergeBuffer(buffer, lastChunk) {\n for(var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++)byteLength += buffer[i].byteLength;\n byteLength = new Uint8Array(byteLength);\n for(var _i2 = i = 0; _i2 < l; _i2++){\n var chunk = buffer[_i2];\n byteLength.set(chunk, i);\n i += chunk.byteLength;\n }\n byteLength.set(lastChunk, i);\n return byteLength;\n }\n function resolveTypedArray(response, id, buffer, lastChunk, constructor, bytesPerElement) {\n buffer = 0 === buffer.length && 0 === lastChunk.byteOffset % bytesPerElement ? lastChunk : mergeBuffer(buffer, lastChunk);\n constructor = new constructor(buffer.buffer, buffer.byteOffset, buffer.byteLength / bytesPerElement);\n resolveBuffer(response, id, constructor);\n }\n function processFullBinaryRow(response, id, tag, buffer, chunk) {\n switch(tag){\n case 65:\n resolveBuffer(response, id, mergeBuffer(buffer, chunk).buffer);\n return;\n case 79:\n resolveTypedArray(response, id, buffer, chunk, Int8Array, 1);\n return;\n case 111:\n resolveBuffer(response, id, 0 === buffer.length ? chunk : mergeBuffer(buffer, chunk));\n return;\n case 85:\n resolveTypedArray(response, id, buffer, chunk, Uint8ClampedArray, 1);\n return;\n case 83:\n resolveTypedArray(response, id, buffer, chunk, Int16Array, 2);\n return;\n case 115:\n resolveTypedArray(response, id, buffer, chunk, Uint16Array, 2);\n return;\n case 76:\n resolveTypedArray(response, id, buffer, chunk, Int32Array, 4);\n return;\n case 108:\n resolveTypedArray(response, id, buffer, chunk, Uint32Array, 4);\n return;\n case 71:\n resolveTypedArray(response, id, buffer, chunk, Float32Array, 4);\n return;\n case 103:\n resolveTypedArray(response, id, buffer, chunk, Float64Array, 8);\n return;\n case 77:\n resolveTypedArray(response, id, buffer, chunk, BigInt64Array, 8);\n return;\n case 109:\n resolveTypedArray(response, id, buffer, chunk, BigUint64Array, 8);\n return;\n case 86:\n resolveTypedArray(response, id, buffer, chunk, DataView, 1);\n return;\n }\n for(var stringDecoder = response._stringDecoder, row = \"\", i = 0; i < buffer.length; i++)row += stringDecoder.decode(buffer[i], decoderOptions);\n row += stringDecoder.decode(chunk);\n processFullStringRow(response, id, tag, row);\n }\n function processFullStringRow(response, id, tag, row) {\n switch(tag){\n case 73:\n resolveModule(response, id, row);\n break;\n case 72:\n resolveHint(response, row[0], row.slice(1));\n break;\n case 69:\n row = JSON.parse(row);\n tag = resolveErrorDev(response, row);\n tag.digest = row.digest;\n row = response._chunks;\n var chunk = row.get(id);\n chunk ? triggerErrorOnChunk(chunk, tag) : row.set(id, new ReactPromise(\"rejected\", null, tag, response));\n break;\n case 84:\n resolveText(response, id, row);\n break;\n case 68:\n tag = new ReactPromise(\"resolved_model\", row, null, response);\n initializeModelChunk(tag);\n \"fulfilled\" === tag.status ? resolveDebugInfo(response, id, tag.value) : tag.then(function(v) {\n return resolveDebugInfo(response, id, v);\n }, function() {});\n break;\n case 87:\n resolveConsoleEntry(response, row);\n break;\n case 82:\n startReadableStream(response, id, void 0);\n break;\n case 114:\n startReadableStream(response, id, \"bytes\");\n break;\n case 88:\n startAsyncIterable(response, id, !1);\n break;\n case 120:\n startAsyncIterable(response, id, !0);\n break;\n case 67:\n stopStream(response, id, row);\n break;\n default:\n resolveModel(response, id, row);\n }\n }\n function createFromJSONCallback(response) {\n return function(key, value) {\n if (\"string\" === typeof value) return parseModelString(response, this, key, value);\n if (\"object\" === typeof value && null !== value) {\n if (value[0] === REACT_ELEMENT_TYPE) if (key = value[4], value = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: value[1],\n key: value[2],\n props: value[3],\n _owner: null === key ? response._debugRootOwner : key\n }, Object.defineProperty(value, \"ref\", {\n enumerable: !1,\n get: nullRefGetter\n }), value._store = {}, Object.defineProperty(value._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 1\n }), Object.defineProperty(value, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n }), null !== initializingHandler) {\n var handler = initializingHandler;\n initializingHandler = handler.parent;\n handler.errored ? (key = new ReactPromise(\"rejected\", null, handler.value, response), value = {\n name: getComponentNameFromType(value.type) || \"\",\n owner: value._owner\n }, key._debugInfo = [\n value\n ], value = createLazyChunkWrapper(key)) : 0 < handler.deps && (key = new ReactPromise(\"blocked\", null, null, response), handler.value = value, handler.chunk = key, value = Object.freeze.bind(Object, value.props), key.then(value, value), value = createLazyChunkWrapper(key));\n } else Object.freeze(value.props);\n return value;\n }\n return value;\n };\n }\n function noServerCall() {\n throw Error(\"Server Functions cannot be called during initial render. This would create a fetch waterfall. Try to use a Server Component to pass data to Client Components instead.\");\n }\n function createResponseFromOptions(options) {\n return new ResponseInstance(options.serverConsumerManifest.moduleMap, options.serverConsumerManifest.serverModuleMap, options.serverConsumerManifest.moduleLoading, noServerCall, options.encodeFormAction, \"string\" === typeof options.nonce ? options.nonce : void 0, options && options.temporaryReferences ? options.temporaryReferences : void 0, options && options.findSourceMapURL ? options.findSourceMapURL : void 0, options ? !0 === options.replayConsoleLogs : !1, options && options.environmentName ? options.environmentName : void 0);\n }\n function startReadingFromStream(response, stream) {\n function progress(_ref) {\n var value = _ref.value;\n if (_ref.done) reportGlobalError(response, Error(\"Connection closed.\"));\n else {\n var i = 0, rowState = response._rowState;\n _ref = response._rowID;\n for(var rowTag = response._rowTag, rowLength = response._rowLength, buffer = response._buffer, chunkLength = value.length; i < chunkLength;){\n var lastIdx = -1;\n switch(rowState){\n case 0:\n lastIdx = value[i++];\n 58 === lastIdx ? rowState = 1 : _ref = _ref << 4 | (96 < lastIdx ? lastIdx - 87 : lastIdx - 48);\n continue;\n case 1:\n rowState = value[i];\n 84 === rowState || 65 === rowState || 79 === rowState || 111 === rowState || 85 === rowState || 83 === rowState || 115 === rowState || 76 === rowState || 108 === rowState || 71 === rowState || 103 === rowState || 77 === rowState || 109 === rowState || 86 === rowState ? (rowTag = rowState, rowState = 2, i++) : 64 < rowState && 91 > rowState || 35 === rowState || 114 === rowState || 120 === rowState ? (rowTag = rowState, rowState = 3, i++) : (rowTag = 0, rowState = 3);\n continue;\n case 2:\n lastIdx = value[i++];\n 44 === lastIdx ? rowState = 4 : rowLength = rowLength << 4 | (96 < lastIdx ? lastIdx - 87 : lastIdx - 48);\n continue;\n case 3:\n lastIdx = value.indexOf(10, i);\n break;\n case 4:\n lastIdx = i + rowLength, lastIdx > value.length && (lastIdx = -1);\n }\n var offset = value.byteOffset + i;\n if (-1 < lastIdx) rowLength = new Uint8Array(value.buffer, offset, lastIdx - i), processFullBinaryRow(response, _ref, rowTag, buffer, rowLength), i = lastIdx, 3 === rowState && i++, rowLength = _ref = rowTag = rowState = 0, buffer.length = 0;\n else {\n value = new Uint8Array(value.buffer, offset, value.byteLength - i);\n buffer.push(value);\n rowLength -= value.byteLength;\n break;\n }\n }\n response._rowState = rowState;\n response._rowID = _ref;\n response._rowTag = rowTag;\n response._rowLength = rowLength;\n return reader.read().then(progress).catch(error);\n }\n }\n function error(e) {\n reportGlobalError(response, e);\n }\n var reader = stream.getReader();\n reader.read().then(progress).catch(error);\n }\n var ReactDOM = __webpack_require__(/*! react-dom */ \"(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js\"), React = __webpack_require__(/*! react */ \"(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js\"), decoderOptions = {\n stream: !0\n }, bind$1 = Function.prototype.bind, chunkCache = new Map(), ReactDOMSharedInternals = ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"), REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"), REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"), REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"), REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"), REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"), REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"), REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"), REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"), REACT_MEMO_TYPE = Symbol.for(\"react.memo\"), REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, jsxPropsParents = new WeakMap(), jsxChildrenParents = new WeakMap(), CLIENT_REFERENCE_TAG = Symbol.for(\"react.client.reference\"), ObjectPrototype = Object.prototype, knownServerReferences = new WeakMap(), boundCache = new WeakMap(), fakeServerFunctionIdx = 0, FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice, v8FrameRegExp = /^ {3} at (?:(.+) \\((.+):(\\d+):(\\d+)\\)|(?:async )?(.+):(\\d+):(\\d+))$/, jscSpiderMonkeyFrameRegExp = /(?:(.*)@)?(.*):(\\d+):(\\d+)/, REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n new (\"function\" === typeof WeakMap ? WeakMap : Map)();\n var ReactSharedInteralsServer = React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE || ReactSharedInteralsServer;\n ReactPromise.prototype = Object.create(Promise.prototype);\n ReactPromise.prototype.then = function(resolve, reject) {\n switch(this.status){\n case \"resolved_model\":\n initializeModelChunk(this);\n break;\n case \"resolved_module\":\n initializeModuleChunk(this);\n }\n switch(this.status){\n case \"fulfilled\":\n resolve(this.value);\n break;\n case \"pending\":\n case \"blocked\":\n resolve && (null === this.value && (this.value = []), this.value.push(resolve));\n reject && (null === this.reason && (this.reason = []), this.reason.push(reject));\n break;\n default:\n reject && reject(this.reason);\n }\n };\n var initializingHandler = null, fakeFunctionCache = new Map(), fakeFunctionIdx = 0, createFakeJSXCallStack = {\n \"react-stack-bottom-frame\": function(response, stack, environmentName) {\n return buildFakeCallStack(response, stack, environmentName, fakeJSXCallSite)();\n }\n }, createFakeJSXCallStackInDEV = createFakeJSXCallStack[\"react-stack-bottom-frame\"].bind(createFakeJSXCallStack), replayConsoleWithCallStack = {\n \"react-stack-bottom-frame\": function(response, methodName, stackTrace, owner, env, args) {\n var prevStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;\n try {\n a: {\n var offset = 0;\n switch(methodName){\n case \"dir\":\n case \"dirxml\":\n case \"groupEnd\":\n case \"table\":\n var JSCompiler_inline_result = bind$1.apply(console[methodName], [\n console\n ].concat(args));\n break a;\n case \"assert\":\n offset = 1;\n }\n var newArgs = args.slice(0);\n \"string\" === typeof newArgs[offset] ? newArgs.splice(offset, 1, \"\\u001b[0m\\u001b[7m%c%s\\u001b[0m%c \" + newArgs[offset], \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\", \" \" + env + \" \", \"\") : newArgs.splice(offset, 0, \"\\u001b[0m\\u001b[7m%c%s\\u001b[0m%c \", \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\", \" \" + env + \" \", \"\");\n newArgs.unshift(console);\n JSCompiler_inline_result = bind$1.apply(console[methodName], newArgs);\n }\n var callStack = buildFakeCallStack(response, stackTrace, env, JSCompiler_inline_result);\n null != owner && initializeFakeStack(response, owner);\n var rootTask = getRootTask(response, env);\n null != rootTask ? rootTask.run(callStack) : callStack();\n } finally{\n ReactSharedInternals.getCurrentStack = prevStack;\n }\n }\n }, replayConsoleWithCallStackInDEV = replayConsoleWithCallStack[\"react-stack-bottom-frame\"].bind(replayConsoleWithCallStack);\n exports.createFromFetch = function(promiseForResponse, options) {\n var response = createResponseFromOptions(options);\n promiseForResponse.then(function(r) {\n startReadingFromStream(response, r.body);\n }, function(e) {\n reportGlobalError(response, e);\n });\n return getChunk(response, 0);\n };\n exports.createFromReadableStream = function(stream, options) {\n options = createResponseFromOptions(options);\n startReadingFromStream(options, stream);\n return getChunk(options, 0);\n };\n exports.createServerReference = function(id) {\n return createServerReference$1(id, noServerCall);\n };\n exports.createTemporaryReferenceSet = function() {\n return new Map();\n };\n exports.encodeReply = function(value, options) {\n return new Promise(function(resolve, reject) {\n var abort = processReply(value, \"\", options && options.temporaryReferences ? options.temporaryReferences : void 0, resolve, reject);\n if (options && options.signal) {\n var signal = options.signal;\n if (signal.aborted) abort(signal.reason);\n else {\n var listener = function() {\n abort(signal.reason);\n signal.removeEventListener(\"abort\", listener);\n };\n signal.addEventListener(\"abort\", listener);\n }\n }\n });\n };\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXNlcnZlci1kb20td2VicGFjay9janMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC5lZGdlLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztDQVFDLEdBRVk7QUFDYixLQThGMkIsSUE3RnpCO0lBQ0UsU0FBU0EsZ0JBQWdCQyxHQUFHLEVBQUVDLEdBQUcsRUFBRUMsS0FBSztRQUN0Q0QsT0FBT0QsTUFDSEcsT0FBT0MsY0FBYyxDQUFDSixLQUFLQyxLQUFLO1lBQzlCQyxPQUFPQTtZQUNQRyxZQUFZLENBQUM7WUFDYkMsY0FBYyxDQUFDO1lBQ2ZDLFVBQVUsQ0FBQztRQUNiLEtBQ0NQLEdBQUcsQ0FBQ0MsSUFBSSxHQUFHQztRQUNoQixPQUFPRjtJQUNUO0lBQ0EsU0FBU1EsdUJBQXVCQyxhQUFhLEVBQUVDLFFBQVE7UUFDckQsSUFBSUQsZUFBZTtZQUNqQixJQUFJRSxnQkFBZ0JGLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFLRCxnQkFBZ0JFLGlCQUFpQkEsYUFBYSxDQUFDRCxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQzlEQyxnQkFBZ0JGLGNBQWNHLElBQUk7aUJBQy9CO2dCQUNISCxnQkFBZ0JFLGlCQUFpQkEsYUFBYSxDQUFDLElBQUk7Z0JBQ25ELElBQUksQ0FBQ0YsZUFDSCxNQUFNSSxNQUNKLGdDQUNFSCxRQUFRLENBQUMsRUFBRSxHQUNYO2dCQUVOQyxnQkFBZ0JELFFBQVEsQ0FBQyxFQUFFO1lBQzdCO1lBQ0EsT0FBTyxNQUFNQSxTQUFTSSxNQUFNLEdBQ3hCO2dCQUFDTCxjQUFjTSxFQUFFO2dCQUFFTixjQUFjTyxNQUFNO2dCQUFFTDtnQkFBZTthQUFFLEdBQzFEO2dCQUFDRixjQUFjTSxFQUFFO2dCQUFFTixjQUFjTyxNQUFNO2dCQUFFTDthQUFjO1FBQzdEO1FBQ0EsT0FBT0Q7SUFDVDtJQUNBLFNB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QUFJQSxPQUFPQyxPQUFPLEVBQUVGLE1BQU1DLE9BQU83YyxNQUFNO3FCQUNsQztvQkFDSCxJQUFJK2MsV0FBVzt3QkFDYkgsTUFBTUMsT0FBTzdjLE1BQU07d0JBQ25CNmMsT0FBT0csbUJBQW1CLENBQUMsU0FBU0Q7b0JBQ3RDO29CQUNBRixPQUFPSSxnQkFBZ0IsQ0FBQyxTQUFTRjtnQkFDbkM7WUFDRjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxQaW5lc3VjY2VlZFxcRGVza3RvcFxcV29ya1NwYWNlXFx0ZXN0d2lkZ2V0XFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXGNvbXBpbGVkXFxyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2tcXGNqc1xccmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC5lZGdlLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuZWRnZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICBrZXkgaW4gb2JqXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgICB3cml0YWJsZTogITBcbiAgICAgICAgICB9KVxuICAgICAgICA6IChvYmpba2V5XSA9IHZhbHVlKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVDbGllbnRSZWZlcmVuY2UoYnVuZGxlckNvbmZpZywgbWV0YWRhdGEpIHtcbiAgICAgIGlmIChidW5kbGVyQ29uZmlnKSB7XG4gICAgICAgIHZhciBtb2R1bGVFeHBvcnRzID0gYnVuZGxlckNvbmZpZ1ttZXRhZGF0YVswXV07XG4gICAgICAgIGlmICgoYnVuZGxlckNvbmZpZyA9IG1vZHVsZUV4cG9ydHMgJiYgbW9kdWxlRXhwb3J0c1ttZXRhZGF0YVsyXV0pKVxuICAgICAgICAgIG1vZHVsZUV4cG9ydHMgPSBidW5kbGVyQ29uZmlnLm5hbWU7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGJ1bmRsZXJDb25maWcgPSBtb2R1bGVFeHBvcnRzICYmIG1vZHVsZUV4cG9ydHNbXCIqXCJdO1xuICAgICAgICAgIGlmICghYnVuZGxlckNvbmZpZylcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgdGhlIG1vZHVsZSBcIicgK1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhWzBdICtcbiAgICAgICAgICAgICAgICAnXCIgaW4gdGhlIFJlYWN0IFNlcnZlciBDb25zdW1lciBNYW5pZmVzdC4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgUmVhY3QgU2VydmVyIENvbXBvbmVudHMgYnVuZGxlci4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIG1vZHVsZUV4cG9ydHMgPSBtZXRhZGF0YVsyXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gNCA9PT0gbWV0YWRhdGEubGVuZ3RoXG4gICAgICAgICAgPyBbYnVuZGxlckNvbmZpZy5pZCwgYnVuZGxlckNvbmZpZy5jaHVua3MsIG1vZHVsZUV4cG9ydHMsIDFdXG4gICAgICAgICAgOiBbYnVuZGxlckNvbmZpZy5pZCwgYnVuZGxlckNvbmZpZy5jaHVua3MsIG1vZHVsZUV4cG9ydHNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlU2VydmVyUmVmZXJlbmNlKGJ1bmRsZXJDb25maWcsIGlkKSB7XG4gICAgICB2YXIgbmFtZSA9IFwiXCIsXG4gICAgICAgIHJlc29sdmVkTW9kdWxlRGF0YSA9IGJ1bmRsZXJDb25maWdbaWRdO1xuICAgICAgaWYgKHJlc29sdmVkTW9kdWxlRGF0YSkgbmFtZSA9IHJlc29sdmVkTW9kdWxlRGF0YS5uYW1lO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBpZHggPSBpZC5sYXN0SW5kZXhPZihcIiNcIik7XG4gICAgICAgIC0xICE9PSBpZHggJiZcbiAgICAgICAgICAoKG5hbWUgPSBpZC5zbGljZShpZHggKyAxKSksXG4gICAgICAgICAgKHJlc29sdmVkTW9kdWxlRGF0YSA9IGJ1bmRsZXJDb25maWdbaWQuc2xpY2UoMCwgaWR4KV0pKTtcbiAgICAgICAgaWYgKCFyZXNvbHZlZE1vZHVsZURhdGEpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgdGhlIG1vZHVsZSBcIicgK1xuICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICdcIiBpbiB0aGUgUmVhY3QgU2VydmVyIE1hbmlmZXN0LiBUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSBSZWFjdCBTZXJ2ZXIgQ29tcG9uZW50cyBidW5kbGVyLidcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmVkTW9kdWxlRGF0YS5hc3luY1xuICAgICAgICA/IFtyZXNvbHZlZE1vZHVsZURhdGEuaWQsIHJlc29sdmVkTW9kdWxlRGF0YS5jaHVua3MsIG5hbWUsIDFdXG4gICAgICAgIDogW3Jlc29sdmVkTW9kdWxlRGF0YS5pZCwgcmVzb2x2ZWRNb2R1bGVEYXRhLmNodW5rcywgbmFtZV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVpcmVBc3luY01vZHVsZShpZCkge1xuICAgICAgdmFyIHByb21pc2UgPSBnbG9iYWxUaGlzLl9fbmV4dF9yZXF1aXJlX18oaWQpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByb21pc2UudGhlbiB8fCBcImZ1bGZpbGxlZFwiID09PSBwcm9taXNlLnN0YXR1cylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBwcm9taXNlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHByb21pc2Uuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICBwcm9taXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBwcm9taXNlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgICBwcm9taXNlLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpZ25vcmVSZWplY3QoKSB7fVxuICAgIGZ1bmN0aW9uIHByZWxvYWRNb2R1bGUobWV0YWRhdGEpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBjaHVua3MgPSBtZXRhZGF0YVsxXSwgcHJvbWlzZXMgPSBbXSwgaSA9IDA7XG4gICAgICAgIGkgPCBjaHVua3MubGVuZ3RoO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIGNodW5rSWQgPSBjaHVua3NbaSsrXTtcbiAgICAgICAgY2h1bmtzW2krK107XG4gICAgICAgIHZhciBlbnRyeSA9IGNodW5rQ2FjaGUuZ2V0KGNodW5rSWQpO1xuICAgICAgICBpZiAodm9pZCAwID09PSBlbnRyeSkge1xuICAgICAgICAgIGVudHJ5ID0gX193ZWJwYWNrX2NodW5rX2xvYWRfXyhjaHVua0lkKTtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICB2YXIgcmVzb2x2ZSA9IGNodW5rQ2FjaGUuc2V0LmJpbmQoY2h1bmtDYWNoZSwgY2h1bmtJZCwgbnVsbCk7XG4gICAgICAgICAgZW50cnkudGhlbihyZXNvbHZlLCBpZ25vcmVSZWplY3QpO1xuICAgICAgICAgIGNodW5rQ2FjaGUuc2V0KGNodW5rSWQsIGVudHJ5KTtcbiAgICAgICAgfSBlbHNlIG51bGwgIT09IGVudHJ5ICYmIHByb21pc2VzLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDQgPT09IG1ldGFkYXRhLmxlbmd0aFxuICAgICAgICA/IDAgPT09IHByb21pc2VzLmxlbmd0aFxuICAgICAgICAgID8gcmVxdWlyZUFzeW5jTW9kdWxlKG1ldGFkYXRhWzBdKVxuICAgICAgICAgIDogUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZUFzeW5jTW9kdWxlKG1ldGFkYXRhWzBdKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIDogMCA8IHByb21pc2VzLmxlbmd0aFxuICAgICAgICAgID8gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1aXJlTW9kdWxlKG1ldGFkYXRhKSB7XG4gICAgICB2YXIgbW9kdWxlRXhwb3J0cyA9IGdsb2JhbFRoaXMuX19uZXh0X3JlcXVpcmVfXyhtZXRhZGF0YVswXSk7XG4gICAgICBpZiAoNCA9PT0gbWV0YWRhdGEubGVuZ3RoICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1vZHVsZUV4cG9ydHMudGhlbilcbiAgICAgICAgaWYgKFwiZnVsZmlsbGVkXCIgPT09IG1vZHVsZUV4cG9ydHMuc3RhdHVzKVxuICAgICAgICAgIG1vZHVsZUV4cG9ydHMgPSBtb2R1bGVFeHBvcnRzLnZhbHVlO1xuICAgICAgICBlbHNlIHRocm93IG1vZHVsZUV4cG9ydHMucmVhc29uO1xuICAgICAgcmV0dXJuIFwiKlwiID09PSBtZXRhZGF0YVsyXVxuICAgICAgICA/IG1vZHVsZUV4cG9ydHNcbiAgICAgICAgOiBcIlwiID09PSBtZXRhZGF0YVsyXVxuICAgICAgICAgID8gbW9kdWxlRXhwb3J0cy5fX2VzTW9kdWxlXG4gICAgICAgICAgICA/IG1vZHVsZUV4cG9ydHMuZGVmYXVsdFxuICAgICAgICAgICAgOiBtb2R1bGVFeHBvcnRzXG4gICAgICAgICAgOiBtb2R1bGVFeHBvcnRzW21ldGFkYXRhWzJdXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZURlc3RpbmF0aW9uV2l0aENodW5rcyhcbiAgICAgIG1vZHVsZUxvYWRpbmcsXG4gICAgICBjaHVua3MsXG4gICAgICBub25jZSRqc2NvbXAkMFxuICAgICkge1xuICAgICAgaWYgKG51bGwgIT09IG1vZHVsZUxvYWRpbmcpXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgY2h1bmtzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgdmFyIG5vbmNlID0gbm9uY2UkanNjb21wJDAsXG4gICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5kLFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0JGpzY29tcCQwID0gSlNDb21waWxlcl90ZW1wX2NvbnN0LlgsXG4gICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QkanNjb21wJDEgPSBtb2R1bGVMb2FkaW5nLnByZWZpeCArIGNodW5rc1tpXTtcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gbW9kdWxlTG9hZGluZy5jcm9zc09yaWdpbjtcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgICAgICA/IFwidXNlLWNyZWRlbnRpYWxzXCIgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgICAgICAgID8gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgIDogdm9pZCAwO1xuICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdCRqc2NvbXAkMC5jYWxsKFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0LFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0JGpzY29tcCQxLFxuICAgICAgICAgICAgeyBjcm9zc09yaWdpbjogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LCBub25jZTogbm9uY2UgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gbWF5YmVJdGVyYWJsZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBtYXliZUl0ZXJhYmxlID1cbiAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgIG1heWJlSXRlcmFibGVbXCJAQGl0ZXJhdG9yXCJdO1xuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlSXRlcmFibGUgPyBtYXliZUl0ZXJhYmxlIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNPYmplY3RQcm90b3R5cGUob2JqZWN0KSB7XG4gICAgICBpZiAoIW9iamVjdCkgcmV0dXJuICExO1xuICAgICAgdmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG4gICAgICBpZiAob2JqZWN0ID09PSBPYmplY3RQcm90b3R5cGUpIHJldHVybiAhMDtcbiAgICAgIGlmIChnZXRQcm90b3R5cGVPZihvYmplY3QpKSByZXR1cm4gITE7XG4gICAgICBvYmplY3QgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghKG9iamVjdFtpXSBpbiBPYmplY3RQcm90b3R5cGUpKSByZXR1cm4gITE7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2ltcGxlT2JqZWN0KG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdFByb3RvdHlwZShnZXRQcm90b3R5cGVPZihvYmplY3QpKSkgcmV0dXJuICExO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIG5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSwgaSA9IDA7XG4gICAgICAgIGkgPCBuYW1lcy5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIG5hbWVzW2ldKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFkZXNjcmlwdG9yIHx8XG4gICAgICAgICAgKCFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiZcbiAgICAgICAgICAgICgoXCJrZXlcIiAhPT0gbmFtZXNbaV0gJiYgXCJyZWZcIiAhPT0gbmFtZXNbaV0pIHx8XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGRlc2NyaXB0b3IuZ2V0KSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gb2JqZWN0TmFtZShvYmplY3QpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4gICAgICAgIC5jYWxsKG9iamVjdClcbiAgICAgICAgLnJlcGxhY2UoL15cXFtvYmplY3QgKC4qKVxcXSQvLCBmdW5jdGlvbiAobSwgcDApIHtcbiAgICAgICAgICByZXR1cm4gcDA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZShrZXkpIHtcbiAgICAgIHZhciBlbmNvZGVkS2V5ID0gSlNPTi5zdHJpbmdpZnkoa2V5KTtcbiAgICAgIHJldHVybiAnXCInICsga2V5ICsgJ1wiJyA9PT0gZW5jb2RlZEtleSA/IGtleSA6IGVuY29kZWRLZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAxMCA+PSB2YWx1ZS5sZW5ndGggPyB2YWx1ZSA6IHZhbHVlLnNsaWNlKDAsIDEwKSArIFwiLi4uXCJcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKHZhbHVlKSkgcmV0dXJuIFwiWy4uLl1cIjtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gdmFsdWUgJiYgdmFsdWUuJCR0eXBlb2YgPT09IENMSUVOVF9SRUZFUkVOQ0VfVEFHKVxuICAgICAgICAgICAgcmV0dXJuIFwiY2xpZW50XCI7XG4gICAgICAgICAgdmFsdWUgPSBvYmplY3ROYW1lKHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gXCJPYmplY3RcIiA9PT0gdmFsdWUgPyBcInsuLi59XCIgOiB2YWx1ZTtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLiQkdHlwZW9mID09PSBDTElFTlRfUkVGRVJFTkNFX1RBR1xuICAgICAgICAgICAgPyBcImNsaWVudFwiXG4gICAgICAgICAgICA6ICh2YWx1ZSA9IHZhbHVlLmRpc3BsYXlOYW1lIHx8IHZhbHVlLm5hbWUpXG4gICAgICAgICAgICAgID8gXCJmdW5jdGlvbiBcIiArIHZhbHVlXG4gICAgICAgICAgICAgIDogXCJmdW5jdGlvblwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlLnJlbmRlcik7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlLnR5cGUpO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlKHBheWxvYWQpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShvYmplY3RPckFycmF5LCBleHBhbmRlZE5hbWUpIHtcbiAgICAgIHZhciBvYmpLaW5kID0gb2JqZWN0TmFtZShvYmplY3RPckFycmF5KTtcbiAgICAgIGlmIChcIk9iamVjdFwiICE9PSBvYmpLaW5kICYmIFwiQXJyYXlcIiAhPT0gb2JqS2luZCkgcmV0dXJuIG9iaktpbmQ7XG4gICAgICB2YXIgc3RhcnQgPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gMDtcbiAgICAgIGlmIChpc0FycmF5SW1wbChvYmplY3RPckFycmF5KSlcbiAgICAgICAgaWYgKGpzeENoaWxkcmVuUGFyZW50cy5oYXMob2JqZWN0T3JBcnJheSkpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGpzeENoaWxkcmVuUGFyZW50cy5nZXQob2JqZWN0T3JBcnJheSk7XG4gICAgICAgICAgb2JqS2luZCA9IFwiPFwiICsgZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlKSArIFwiPlwiO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0T3JBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0T3JBcnJheVtpXTtcbiAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgIDogXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmIG51bGwgIT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICA/IFwie1wiICsgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodmFsdWUpICsgXCJ9XCJcbiAgICAgICAgICAgICAgICAgIDogXCJ7XCIgKyBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKHZhbHVlKSArIFwifVwiO1xuICAgICAgICAgICAgXCJcIiArIGkgPT09IGV4cGFuZGVkTmFtZVxuICAgICAgICAgICAgICA/ICgoc3RhcnQgPSBvYmpLaW5kLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgKGxlbmd0aCA9IHZhbHVlLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgKG9iaktpbmQgKz0gdmFsdWUpKVxuICAgICAgICAgICAgICA6IChvYmpLaW5kID1cbiAgICAgICAgICAgICAgICAgIDE1ID4gdmFsdWUubGVuZ3RoICYmIDQwID4gb2JqS2luZC5sZW5ndGggKyB2YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBvYmpLaW5kICsgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBvYmpLaW5kICsgXCJ7Li4ufVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqS2luZCArPSBcIjwvXCIgKyBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUpICsgXCI+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqS2luZCA9IFwiW1wiO1xuICAgICAgICAgIGZvciAodHlwZSA9IDA7IHR5cGUgPCBvYmplY3RPckFycmF5Lmxlbmd0aDsgdHlwZSsrKVxuICAgICAgICAgICAgMCA8IHR5cGUgJiYgKG9iaktpbmQgKz0gXCIsIFwiKSxcbiAgICAgICAgICAgICAgKGkgPSBvYmplY3RPckFycmF5W3R5cGVdKSxcbiAgICAgICAgICAgICAgKGkgPVxuICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBpICYmIG51bGwgIT09IGlcbiAgICAgICAgICAgICAgICAgID8gZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UoaSlcbiAgICAgICAgICAgICAgICAgIDogZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZShpKSksXG4gICAgICAgICAgICAgIFwiXCIgKyB0eXBlID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgICAgICAgICA/ICgoc3RhcnQgPSBvYmpLaW5kLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAobGVuZ3RoID0gaS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgKG9iaktpbmQgKz0gaSkpXG4gICAgICAgICAgICAgICAgOiAob2JqS2luZCA9XG4gICAgICAgICAgICAgICAgICAgIDEwID4gaS5sZW5ndGggJiYgNDAgPiBvYmpLaW5kLmxlbmd0aCArIGkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgPyBvYmpLaW5kICsgaVxuICAgICAgICAgICAgICAgICAgICAgIDogb2JqS2luZCArIFwiLi4uXCIpO1xuICAgICAgICAgIG9iaktpbmQgKz0gXCJdXCI7XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9iamVjdE9yQXJyYXkuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgb2JqS2luZCA9IFwiPFwiICsgZGVzY3JpYmVFbGVtZW50VHlwZShvYmplY3RPckFycmF5LnR5cGUpICsgXCIvPlwiO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChvYmplY3RPckFycmF5LiQkdHlwZW9mID09PSBDTElFTlRfUkVGRVJFTkNFX1RBRykgcmV0dXJuIFwiY2xpZW50XCI7XG4gICAgICAgIGlmIChqc3hQcm9wc1BhcmVudHMuaGFzKG9iamVjdE9yQXJyYXkpKSB7XG4gICAgICAgICAgb2JqS2luZCA9IGpzeFByb3BzUGFyZW50cy5nZXQob2JqZWN0T3JBcnJheSk7XG4gICAgICAgICAgb2JqS2luZCA9IFwiPFwiICsgKGRlc2NyaWJlRWxlbWVudFR5cGUob2JqS2luZCkgfHwgXCIuLi5cIik7XG4gICAgICAgICAgdHlwZSA9IE9iamVjdC5rZXlzKG9iamVjdE9yQXJyYXkpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBvYmpLaW5kICs9IFwiIFwiO1xuICAgICAgICAgICAgdmFsdWUgPSB0eXBlW2ldO1xuICAgICAgICAgICAgb2JqS2luZCArPSBkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZSh2YWx1ZSkgKyBcIj1cIjtcbiAgICAgICAgICAgIHZhciBfdmFsdWUyID0gb2JqZWN0T3JBcnJheVt2YWx1ZV07XG4gICAgICAgICAgICB2YXIgX3N1YnN0cjIgPVxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gZXhwYW5kZWROYW1lICYmXG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBfdmFsdWUyICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IF92YWx1ZTJcbiAgICAgICAgICAgICAgICA/IGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpXG4gICAgICAgICAgICAgICAgOiBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpO1xuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIF92YWx1ZTIgJiYgKF9zdWJzdHIyID0gXCJ7XCIgKyBfc3Vic3RyMiArIFwifVwiKTtcbiAgICAgICAgICAgIHZhbHVlID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgICAgICAgPyAoKHN0YXJ0ID0gb2JqS2luZC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIChsZW5ndGggPSBfc3Vic3RyMi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIChvYmpLaW5kICs9IF9zdWJzdHIyKSlcbiAgICAgICAgICAgICAgOiAob2JqS2luZCA9XG4gICAgICAgICAgICAgICAgICAxMCA+IF9zdWJzdHIyLmxlbmd0aCAmJiA0MCA+IG9iaktpbmQubGVuZ3RoICsgX3N1YnN0cjIubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gb2JqS2luZCArIF9zdWJzdHIyXG4gICAgICAgICAgICAgICAgICAgIDogb2JqS2luZCArIFwiLi4uXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmpLaW5kICs9IFwiPlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9iaktpbmQgPSBcIntcIjtcbiAgICAgICAgICB0eXBlID0gT2JqZWN0LmtleXMob2JqZWN0T3JBcnJheSk7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAwIDwgaSAmJiAob2JqS2luZCArPSBcIiwgXCIpLFxuICAgICAgICAgICAgICAodmFsdWUgPSB0eXBlW2ldKSxcbiAgICAgICAgICAgICAgKG9iaktpbmQgKz0gZGVzY3JpYmVLZXlGb3JFcnJvck1lc3NhZ2UodmFsdWUpICsgXCI6IFwiKSxcbiAgICAgICAgICAgICAgKF92YWx1ZTIgPSBvYmplY3RPckFycmF5W3ZhbHVlXSksXG4gICAgICAgICAgICAgIChfdmFsdWUyID1cbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgX3ZhbHVlMiAmJiBudWxsICE9PSBfdmFsdWUyXG4gICAgICAgICAgICAgICAgICA/IGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpXG4gICAgICAgICAgICAgICAgICA6IGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UoX3ZhbHVlMikpLFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gZXhwYW5kZWROYW1lXG4gICAgICAgICAgICAgICAgPyAoKHN0YXJ0ID0gb2JqS2luZC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgKGxlbmd0aCA9IF92YWx1ZTIubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgIChvYmpLaW5kICs9IF92YWx1ZTIpKVxuICAgICAgICAgICAgICAgIDogKG9iaktpbmQgPVxuICAgICAgICAgICAgICAgICAgICAxMCA+IF92YWx1ZTIubGVuZ3RoICYmIDQwID4gb2JqS2luZC5sZW5ndGggKyBfdmFsdWUyLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgID8gb2JqS2luZCArIF92YWx1ZTJcbiAgICAgICAgICAgICAgICAgICAgICA6IG9iaktpbmQgKyBcIi4uLlwiKTtcbiAgICAgICAgICBvYmpLaW5kICs9IFwifVwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdm9pZCAwID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgPyBvYmpLaW5kXG4gICAgICAgIDogLTEgPCBzdGFydCAmJiAwIDwgbGVuZ3RoXG4gICAgICAgICAgPyAoKG9iamVjdE9yQXJyYXkgPSBcIiBcIi5yZXBlYXQoc3RhcnQpICsgXCJeXCIucmVwZWF0KGxlbmd0aCkpLFxuICAgICAgICAgICAgXCJcXG4gIFwiICsgb2JqS2luZCArIFwiXFxuICBcIiArIG9iamVjdE9yQXJyYXkpXG4gICAgICAgICAgOiBcIlxcbiAgXCIgKyBvYmpLaW5kO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXJpYWxpemVOdW1iZXIobnVtYmVyKSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbiAgICAgICAgPyAwID09PSBudW1iZXIgJiYgLUluZmluaXR5ID09PSAxIC8gbnVtYmVyXG4gICAgICAgICAgPyBcIiQtMFwiXG4gICAgICAgICAgOiBudW1iZXJcbiAgICAgICAgOiBJbmZpbml0eSA9PT0gbnVtYmVyXG4gICAgICAgICAgPyBcIiRJbmZpbml0eVwiXG4gICAgICAgICAgOiAtSW5maW5pdHkgPT09IG51bWJlclxuICAgICAgICAgICAgPyBcIiQtSW5maW5pdHlcIlxuICAgICAgICAgICAgOiBcIiROYU5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlcGx5KFxuICAgICAgcm9vdCxcbiAgICAgIGZvcm1GaWVsZFByZWZpeCxcbiAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMsXG4gICAgICByZXNvbHZlLFxuICAgICAgcmVqZWN0XG4gICAgKSB7XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVUeXBlZEFycmF5KHRhZywgdHlwZWRBcnJheSkge1xuICAgICAgICB0eXBlZEFycmF5ID0gbmV3IEJsb2IoW1xuICAgICAgICAgIG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgdHlwZWRBcnJheS5idWZmZXIsXG4gICAgICAgICAgICB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICB0eXBlZEFycmF5LmJ5dGVMZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgIF0pO1xuICAgICAgICB2YXIgYmxvYklkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBibG9iSWQsIHR5cGVkQXJyYXkpO1xuICAgICAgICByZXR1cm4gXCIkXCIgKyB0YWcgKyBibG9iSWQudG9TdHJpbmcoMTYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2VyaWFsaXplQmluYXJ5UmVhZGVyKHJlYWRlcikge1xuICAgICAgICBmdW5jdGlvbiBwcm9ncmVzcyhlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LmRvbmVcbiAgICAgICAgICAgID8gKChlbnRyeSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGVudHJ5LCBuZXcgQmxvYihidWZmZXIpKSxcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgJ1wiJG8nICsgZW50cnkudG9TdHJpbmcoMTYpICsgJ1wiJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgXCJDXCIpLFxuICAgICAgICAgICAgICBwZW5kaW5nUGFydHMtLSxcbiAgICAgICAgICAgICAgMCA9PT0gcGVuZGluZ1BhcnRzICYmIHJlc29sdmUoZGF0YSkpXG4gICAgICAgICAgICA6IChidWZmZXIucHVzaChlbnRyeS52YWx1ZSksXG4gICAgICAgICAgICAgIHJlYWRlci5yZWFkKG5ldyBVaW50OEFycmF5KDEwMjQpKS50aGVuKHByb2dyZXNzLCByZWplY3QpKTtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgIHZhciBkYXRhID0gZm9ybURhdGE7XG4gICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICB2YXIgc3RyZWFtSWQgPSBuZXh0UGFydElkKyssXG4gICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgIHJlYWRlci5yZWFkKG5ldyBVaW50OEFycmF5KDEwMjQpKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICByZXR1cm4gXCIkclwiICsgc3RyZWFtSWQudG9TdHJpbmcoMTYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2VyaWFsaXplUmVhZGVyKHJlYWRlcikge1xuICAgICAgICBmdW5jdGlvbiBwcm9ncmVzcyhlbnRyeSkge1xuICAgICAgICAgIGlmIChlbnRyeS5kb25lKVxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIFwiQ1wiKSxcbiAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzLS0sXG4gICAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBwYXJ0SlNPTiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnZhbHVlLCByZXNvbHZlVG9KU09OKTtcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIHBhcnRKU09OKTtcbiAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICB2YXIgZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgICBwZW5kaW5nUGFydHMrKztcbiAgICAgICAgdmFyIHN0cmVhbUlkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MsIHJlamVjdCk7XG4gICAgICAgIHJldHVybiBcIiRSXCIgKyBzdHJlYW1JZC50b1N0cmluZygxNik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVSZWFkYWJsZVN0cmVhbShzdHJlYW0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgYmluYXJ5UmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcih7IG1vZGU6IFwiYnlvYlwiIH0pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVJlYWRlcihzdHJlYW0uZ2V0UmVhZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVCaW5hcnlSZWFkZXIoYmluYXJ5UmVhZGVyKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZUFzeW5jSXRlcmFibGUoaXRlcmFibGUsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKGVudHJ5LmRvbmUpIHtcbiAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IGVudHJ5LnZhbHVlKVxuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgXCJDXCIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0SlNPTiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnZhbHVlLCByZXNvbHZlVG9KU09OKTtcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgXCJDXCIgKyBwYXJ0SlNPTik7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBwZW5kaW5nUGFydHMtLTtcbiAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIF9wYXJ0SlNPTiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnZhbHVlLCByZXNvbHZlVG9KU09OKTtcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIF9wYXJ0SlNPTik7XG4gICAgICAgICAgICAgIGl0ZXJhdG9yLm5leHQoKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgIHJlamVjdCh4JDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgdmFyIGRhdGEgPSBmb3JtRGF0YTtcbiAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgIHZhciBzdHJlYW1JZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZSA9PT0gaXRlcmF0b3I7XG4gICAgICAgIGl0ZXJhdG9yLm5leHQoKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICByZXR1cm4gXCIkXCIgKyAoaXRlcmFibGUgPyBcInhcIiA6IFwiWFwiKSArIHN0cmVhbUlkLnRvU3RyaW5nKDE2KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVUb0pTT04oa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgb3JpZ2luYWxWYWx1ZSA9IHRoaXNba2V5XTtcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9yaWdpbmFsVmFsdWUgfHxcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID09PSB2YWx1ZSB8fFxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgKFwiT2JqZWN0XCIgIT09IG9iamVjdE5hbWUob3JpZ2luYWxWYWx1ZSlcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiAlcyBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiVzXCIsXG4gICAgICAgICAgICAgICAgb2JqZWN0TmFtZShvcmlnaW5hbFZhbHVlKSxcbiAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiBPYmplY3RzIHdpdGggdG9KU09OIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQuIENvbnZlcnQgaXQgbWFudWFsbHkgdG8gYSBzaW1wbGUgdmFsdWUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gcHJvcHMuJXNcIixcbiAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgc3dpdGNoICh2YWx1ZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHRlbXBvcmFyeVJlZmVyZW5jZXMgJiYgLTEgPT09IGtleS5pbmRleE9mKFwiOlwiKSkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRSZWZlcmVuY2UgPSB3cml0dGVuT2JqZWN0cy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXQocGFyZW50UmVmZXJlbmNlICsgXCI6XCIgKyBrZXksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgXCIkVFwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiUmVhY3QgRWxlbWVudCBjYW5ub3QgYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50IHdpdGhvdXQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNldC4gUGFzcyBhIFRlbXBvcmFyeVJlZmVyZW5jZVNldCB0byB0aGUgb3B0aW9ucy5cIiArXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlLl9wYXlsb2FkO1xuICAgICAgICAgICAgICB2YXIgaW5pdCA9IHZhbHVlLl9pbml0O1xuICAgICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IGluaXQob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFyIGxhenlJZCA9IG5leHRQYXJ0SWQrKyxcbiAgICAgICAgICAgICAgICAgIHBhcnRKU09OID0gc2VyaWFsaXplTW9kZWwocGFyZW50UmVmZXJlbmNlLCBsYXp5SWQpO1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBsYXp5SWQsIHBhcnRKU09OKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCIkXCIgKyBsYXp5SWQudG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHggJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHggJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHgudGhlblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgICAgICAgICAgICB2YXIgX2xhenlJZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgX3BhcnRKU09OMiA9IHNlcmlhbGl6ZU1vZGVsKHZhbHVlLCBfbGF6eUlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0gZm9ybURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgX2RhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIF9sYXp5SWQsIF9wYXJ0SlNPTjIpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tO1xuICAgICAgICAgICAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKF9kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB4LnRoZW4ocGFyZW50UmVmZXJlbmNlLCBwYXJlbnRSZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiJFwiICsgX2xhenlJZC50b1N0cmluZygxNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlamVjdCh4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUGFydHMtLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUudGhlbikge1xuICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUlkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICAgICAgdmFsdWUudGhlbihmdW5jdGlvbiAocGFydFZhbHVlKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIF9wYXJ0SlNPTjMgPSBzZXJpYWxpemVNb2RlbChwYXJ0VmFsdWUsIHByb21pc2VJZCk7XG4gICAgICAgICAgICAgICAgcGFydFZhbHVlID0gZm9ybURhdGE7XG4gICAgICAgICAgICAgICAgcGFydFZhbHVlLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBwcm9taXNlSWQsIF9wYXJ0SlNPTjMpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tO1xuICAgICAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKHBhcnRWYWx1ZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgcmV0dXJuIFwiJEBcIiArIHByb21pc2VJZC50b1N0cmluZygxNik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgaWYgKG1vZGVsUm9vdCA9PT0gdmFsdWUpIG1vZGVsUm9vdCA9IG51bGw7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBwYXJlbnRSZWZlcmVuY2U7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgLTEgPT09IGtleS5pbmRleE9mKFwiOlwiKSAmJlxuICAgICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh0aGlzKSksXG4gICAgICAgICAgICAgIHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlICYmXG4gICAgICAgICAgICAgICAgKChwYXJlbnRSZWZlcmVuY2UgPSBwYXJlbnRSZWZlcmVuY2UgKyBcIjpcIiArIGtleSksXG4gICAgICAgICAgICAgICAgd3JpdHRlbk9iamVjdHMuc2V0KHZhbHVlLCBwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gdGVtcG9yYXJ5UmVmZXJlbmNlcyAmJlxuICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXQocGFyZW50UmVmZXJlbmNlLCB2YWx1ZSkpKTtcbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgICAgIHZhciBfZGF0YTMgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgIGtleSA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgICAgIHZhciBwcmVmaXggPSBmb3JtRmllbGRQcmVmaXggKyBrZXkgKyBcIl9cIjtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsS2V5KSB7XG4gICAgICAgICAgICAgIF9kYXRhMy5hcHBlbmQocHJlZml4ICsgb3JpZ2luYWxLZXksIG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gXCIkS1wiICsga2V5LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIChwYXJlbnRSZWZlcmVuY2UgPSBzZXJpYWxpemVNb2RlbChBcnJheS5mcm9tKHZhbHVlKSwga2V5KSksXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGtleSwgcGFyZW50UmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgXCIkUVwiICsga2V5LnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IHNlcmlhbGl6ZU1vZGVsKEFycmF5LmZyb20odmFsdWUpLCBrZXkpKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsga2V5LCBwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICBcIiRXXCIgKyBrZXkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IG5ldyBCbG9iKFt2YWx1ZV0pKSxcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHBhcmVudFJlZmVyZW5jZSwga2V5KSxcbiAgICAgICAgICAgICAgXCIkQVwiICsgcGFyZW50UmVmZXJlbmNlLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIk9cIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIm9cIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJVXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJbnQxNkFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJTXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwic1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50MzJBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiTFwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDMyQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcImxcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiR1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJnXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCaWdJbnQ2NEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJNXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCaWdVaW50NjRBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwibVwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVZpZXcpIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiVlwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEJsb2IgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICAoa2V5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgICBcIiRCXCIgKyBrZXkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmICgocGFyZW50UmVmZXJlbmNlID0gZ2V0SXRlcmF0b3JGbih2YWx1ZSkpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IHBhcmVudFJlZmVyZW5jZS5jYWxsKHZhbHVlKSksXG4gICAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICA/ICgoa2V5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgICAgIChwYXJlbnRSZWZlcmVuY2UgPSBzZXJpYWxpemVNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGtleSwgcGFyZW50UmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgICAgIFwiJGlcIiArIGtleS50b1N0cmluZygxNikpXG4gICAgICAgICAgICAgICAgOiBBcnJheS5mcm9tKHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgUmVhZGFibGVTdHJlYW0gJiZcbiAgICAgICAgICAgIHZhbHVlIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplUmVhZGFibGVTdHJlYW0odmFsdWUpO1xuICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IHZhbHVlW0FTWU5DX0lURVJBVE9SXTtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUFzeW5jSXRlcmFibGUodmFsdWUsIHBhcmVudFJlZmVyZW5jZS5jYWxsKHZhbHVlKSk7XG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlID0gZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSAhPT0gT2JqZWN0UHJvdG90eXBlICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gcGFyZW50UmVmZXJlbmNlIHx8XG4gICAgICAgICAgICAgIG51bGwgIT09IGdldFByb3RvdHlwZU9mKHBhcmVudFJlZmVyZW5jZSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSB0ZW1wb3JhcnlSZWZlcmVuY2VzKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cywgYW5kIGEgZmV3IGJ1aWx0LWlucywgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgQWN0aW9ucy4gQ2xhc3NlcyBvciBudWxsIHByb3RvdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXCIgK1xuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIFwiJFRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRVxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiUmVhY3QgQ29udGV4dCBQcm92aWRlcnMgY2Fubm90IGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4lc1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBcIk9iamVjdFwiICE9PSBvYmplY3ROYW1lKHZhbHVlKVxuICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiAlcyBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiVzXCIsXG4gICAgICAgICAgICAgICAgICBvYmplY3ROYW1lKHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogaXNTaW1wbGVPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgICAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmXG4gICAgICAgICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgIDAgPCBwYXJlbnRSZWZlcmVuY2UubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gT2JqZWN0cyB3aXRoIHN5bWJvbCBwcm9wZXJ0aWVzIGxpa2UgJXMgYXJlIG5vdCBzdXBwb3J0ZWQuJXNcIixcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZWZlcmVuY2VbMF0uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gQ2xhc3NlcyBvciBvdGhlciBvYmplY3RzIHdpdGggbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZC4lc1wiLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKFwiWlwiID09PSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSAmJiB0aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgcmV0dXJuIFwiJERcIiArIHZhbHVlO1xuICAgICAgICAgIGtleSA9IFwiJFwiID09PSB2YWx1ZVswXSA/IFwiJFwiICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmIChcIm51bWJlclwiID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiBzZXJpYWxpemVOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gXCIkdW5kZWZpbmVkXCI7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IGtub3duU2VydmVyUmVmZXJlbmNlcy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBKU09OLnN0cmluZ2lmeShwYXJlbnRSZWZlcmVuY2UsIHJlc29sdmVUb0pTT04pKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICAocGFyZW50UmVmZXJlbmNlID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuc2V0KGZvcm1GaWVsZFByZWZpeCArIHBhcmVudFJlZmVyZW5jZSwga2V5KSxcbiAgICAgICAgICAgICAgXCIkRlwiICsgcGFyZW50UmVmZXJlbmNlLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2b2lkIDAgIT09IHRlbXBvcmFyeVJlZmVyZW5jZXMgJiZcbiAgICAgICAgICAgIC0xID09PSBrZXkuaW5kZXhPZihcIjpcIikgJiZcbiAgICAgICAgICAgICgocGFyZW50UmVmZXJlbmNlID0gd3JpdHRlbk9iamVjdHMuZ2V0KHRoaXMpKSxcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMuc2V0KHBhcmVudFJlZmVyZW5jZSArIFwiOlwiICsga2V5LCB2YWx1ZSksIFwiJFRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiQ2xpZW50IEZ1bmN0aW9ucyBjYW5ub3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIFNlcnZlciBGdW5jdGlvbnMuIE9ubHkgRnVuY3Rpb25zIHBhc3NlZCBmcm9tIHRoZSBTZXJ2ZXIgY2FuIGJlIHBhc3NlZCBiYWNrIGFnYWluLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmXG4gICAgICAgICAgICAtMSA9PT0ga2V5LmluZGV4T2YoXCI6XCIpICYmXG4gICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh0aGlzKSksXG4gICAgICAgICAgICB2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChwYXJlbnRSZWZlcmVuY2UgKyBcIjpcIiArIGtleSwgdmFsdWUpLCBcIiRUXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlN5bWJvbHMgY2Fubm90IGJlIHBhc3NlZCB0byBhIFNlcnZlciBGdW5jdGlvbiB3aXRob3V0IGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzZXQuIFBhc3MgYSBUZW1wb3JhcnlSZWZlcmVuY2VTZXQgdG8gdGhlIG9wdGlvbnMuXCIgK1xuICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJiaWdpbnRcIiA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gXCIkblwiICsgdmFsdWUudG9TdHJpbmcoMTApO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlR5cGUgXCIgK1xuICAgICAgICAgICAgdHlwZW9mIHZhbHVlICtcbiAgICAgICAgICAgIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYW4gYXJndW1lbnQgdG8gYSBTZXJ2ZXIgRnVuY3Rpb24uXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZU1vZGVsKG1vZGVsLCBpZCkge1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgbW9kZWwgJiZcbiAgICAgICAgICBudWxsICE9PSBtb2RlbCAmJlxuICAgICAgICAgICgoaWQgPSBcIiRcIiArIGlkLnRvU3RyaW5nKDE2KSksXG4gICAgICAgICAgd3JpdHRlbk9iamVjdHMuc2V0KG1vZGVsLCBpZCksXG4gICAgICAgICAgdm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmIHRlbXBvcmFyeVJlZmVyZW5jZXMuc2V0KGlkLCBtb2RlbCkpO1xuICAgICAgICBtb2RlbFJvb3QgPSBtb2RlbDtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1vZGVsLCByZXNvbHZlVG9KU09OKTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXh0UGFydElkID0gMSxcbiAgICAgICAgcGVuZGluZ1BhcnRzID0gMCxcbiAgICAgICAgZm9ybURhdGEgPSBudWxsLFxuICAgICAgICB3cml0dGVuT2JqZWN0cyA9IG5ldyBXZWFrTWFwKCksXG4gICAgICAgIG1vZGVsUm9vdCA9IHJvb3QsXG4gICAgICAgIGpzb24gPSBzZXJpYWxpemVNb2RlbChyb290LCAwKTtcbiAgICAgIG51bGwgPT09IGZvcm1EYXRhXG4gICAgICAgID8gcmVzb2x2ZShqc29uKVxuICAgICAgICA6IChmb3JtRGF0YS5zZXQoZm9ybUZpZWxkUHJlZml4ICsgXCIwXCIsIGpzb24pLFxuICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKGZvcm1EYXRhKSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAwIDwgcGVuZGluZ1BhcnRzICYmXG4gICAgICAgICAgKChwZW5kaW5nUGFydHMgPSAwKSxcbiAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSA/IHJlc29sdmUoanNvbikgOiByZXNvbHZlKGZvcm1EYXRhKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbmNvZGVGb3JtRGF0YShyZWZlcmVuY2UpIHtcbiAgICAgIHZhciByZXNvbHZlLFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHRoZW5hYmxlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7XG4gICAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICAgIH0pO1xuICAgICAgcHJvY2Vzc1JlcGx5KFxuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGJvZHkpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBkYXRhLmFwcGVuZChcIjBcIiwgYm9keSk7XG4gICAgICAgICAgICBib2R5ID0gZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICB0aGVuYWJsZS52YWx1ZSA9IGJvZHk7XG4gICAgICAgICAgcmVzb2x2ZShib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB0aGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgdGhlbmFibGUucmVhc29uID0gZTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmF1bHRFbmNvZGVGb3JtQWN0aW9uKGlkZW50aWZpZXJQcmVmaXgpIHtcbiAgICAgIHZhciByZWZlcmVuY2UgPSBrbm93blNlcnZlclJlZmVyZW5jZXMuZ2V0KHRoaXMpO1xuICAgICAgaWYgKCFyZWZlcmVuY2UpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiVHJpZWQgdG8gZW5jb2RlIGEgU2VydmVyIEFjdGlvbiBmcm9tIGEgZGlmZmVyZW50IGluc3RhbmNlIHRoYW4gdGhlIGVuY29kZXIgaXMgZnJvbS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICApO1xuICAgICAgdmFyIGRhdGEgPSBudWxsO1xuICAgICAgaWYgKG51bGwgIT09IHJlZmVyZW5jZS5ib3VuZCkge1xuICAgICAgICBkYXRhID0gYm91bmRDYWNoZS5nZXQocmVmZXJlbmNlKTtcbiAgICAgICAgZGF0YSB8fFxuICAgICAgICAgICgoZGF0YSA9IGVuY29kZUZvcm1EYXRhKHJlZmVyZW5jZSkpLCBib3VuZENhY2hlLnNldChyZWZlcmVuY2UsIGRhdGEpKTtcbiAgICAgICAgaWYgKFwicmVqZWN0ZWRcIiA9PT0gZGF0YS5zdGF0dXMpIHRocm93IGRhdGEucmVhc29uO1xuICAgICAgICBpZiAoXCJmdWxmaWxsZWRcIiAhPT0gZGF0YS5zdGF0dXMpIHRocm93IGRhdGE7XG4gICAgICAgIHJlZmVyZW5jZSA9IGRhdGEudmFsdWU7XG4gICAgICAgIHZhciBwcmVmaXhlZERhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgcmVmZXJlbmNlLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICBwcmVmaXhlZERhdGEuYXBwZW5kKFwiJEFDVElPTl9cIiArIGlkZW50aWZpZXJQcmVmaXggKyBcIjpcIiArIGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGF0YSA9IHByZWZpeGVkRGF0YTtcbiAgICAgICAgcmVmZXJlbmNlID0gXCIkQUNUSU9OX1JFRl9cIiArIGlkZW50aWZpZXJQcmVmaXg7XG4gICAgICB9IGVsc2UgcmVmZXJlbmNlID0gXCIkQUNUSU9OX0lEX1wiICsgcmVmZXJlbmNlLmlkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcmVmZXJlbmNlLFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBlbmNUeXBlOiBcIm11bHRpcGFydC9mb3JtLWRhdGFcIixcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNTaWduYXR1cmVFcXVhbChyZWZlcmVuY2VJZCwgbnVtYmVyT2ZCb3VuZEFyZ3MpIHtcbiAgICAgIHZhciByZWZlcmVuY2UgPSBrbm93blNlcnZlclJlZmVyZW5jZXMuZ2V0KHRoaXMpO1xuICAgICAgaWYgKCFyZWZlcmVuY2UpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiVHJpZWQgdG8gZW5jb2RlIGEgU2VydmVyIEFjdGlvbiBmcm9tIGEgZGlmZmVyZW50IGluc3RhbmNlIHRoYW4gdGhlIGVuY29kZXIgaXMgZnJvbS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICApO1xuICAgICAgaWYgKHJlZmVyZW5jZS5pZCAhPT0gcmVmZXJlbmNlSWQpIHJldHVybiAhMTtcbiAgICAgIHZhciBib3VuZFByb21pc2UgPSByZWZlcmVuY2UuYm91bmQ7XG4gICAgICBpZiAobnVsbCA9PT0gYm91bmRQcm9taXNlKSByZXR1cm4gMCA9PT0gbnVtYmVyT2ZCb3VuZEFyZ3M7XG4gICAgICBzd2l0Y2ggKGJvdW5kUHJvbWlzZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgIHJldHVybiBib3VuZFByb21pc2UudmFsdWUubGVuZ3RoID09PSBudW1iZXJPZkJvdW5kQXJncztcbiAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgICB0aHJvdyBib3VuZFByb21pc2U7XG4gICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgIHRocm93IGJvdW5kUHJvbWlzZS5yZWFzb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBib3VuZFByb21pc2Uuc3RhdHVzICYmXG4gICAgICAgICAgICAgICgoYm91bmRQcm9taXNlLnN0YXR1cyA9IFwicGVuZGluZ1wiKSxcbiAgICAgICAgICAgICAgYm91bmRQcm9taXNlLnRoZW4oXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGJvdW5kQXJncykge1xuICAgICAgICAgICAgICAgICAgYm91bmRQcm9taXNlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICAgICAgICBib3VuZFByb21pc2UudmFsdWUgPSBib3VuZEFyZ3M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGJvdW5kUHJvbWlzZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICBib3VuZFByb21pc2UucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGJvdW5kUHJvbWlzZSlcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGYWtlU2VydmVyRnVuY3Rpb24oXG4gICAgICBuYW1lLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2VNYXAsXG4gICAgICBsaW5lLFxuICAgICAgY29sLFxuICAgICAgZW52aXJvbm1lbnROYW1lLFxuICAgICAgaW5uZXJGdW5jdGlvblxuICAgICkge1xuICAgICAgbmFtZSB8fCAobmFtZSA9IFwiPGFub255bW91cz5cIik7XG4gICAgICB2YXIgZW5jb2RlZE5hbWUgPSBKU09OLnN0cmluZ2lmeShuYW1lKTtcbiAgICAgIDEgPj0gbGluZVxuICAgICAgICA/ICgobGluZSA9IGVuY29kZWROYW1lLmxlbmd0aCArIDcpLFxuICAgICAgICAgIChjb2wgPVxuICAgICAgICAgICAgXCJzPT4oe1wiICtcbiAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgIFwiIFwiLnJlcGVhdChjb2wgPCBsaW5lID8gMCA6IGNvbCAtIGxpbmUpICtcbiAgICAgICAgICAgIFwiOiguLi5hcmdzKSA9PiBzKC4uLmFyZ3MpfSlcXG4vKiBUaGlzIG1vZHVsZSBpcyBhIHByb3h5IHRvIGEgU2VydmVyIEFjdGlvbi4gVHVybiBvbiBTb3VyY2UgTWFwcyB0byBzZWUgdGhlIHNlcnZlciBzb3VyY2UuICovXCIpKVxuICAgICAgICA6IChjb2wgPVxuICAgICAgICAgICAgXCIvKiBUaGlzIG1vZHVsZSBpcyBhIHByb3h5IHRvIGEgU2VydmVyIEFjdGlvbi4gVHVybiBvbiBTb3VyY2UgTWFwcyB0byBzZWUgdGhlIHNlcnZlciBzb3VyY2UuICovXCIgK1xuICAgICAgICAgICAgXCJcXG5cIi5yZXBlYXQobGluZSAtIDIpICtcbiAgICAgICAgICAgIFwic2VydmVyPT4oe1wiICtcbiAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgIFwiOlxcblwiICtcbiAgICAgICAgICAgIFwiIFwiLnJlcGVhdCgxID4gY29sID8gMCA6IGNvbCAtIDEpICtcbiAgICAgICAgICAgIFwiKC4uLmFyZ3MpID0+IHNlcnZlciguLi5hcmdzKX0pXCIpO1xuICAgICAgZmlsZW5hbWUuc3RhcnRzV2l0aChcIi9cIikgJiYgKGZpbGVuYW1lID0gXCJmaWxlOi8vXCIgKyBmaWxlbmFtZSk7XG4gICAgICBzb3VyY2VNYXBcbiAgICAgICAgPyAoKGNvbCArPVxuICAgICAgICAgICAgXCJcXG4vLyMgc291cmNlVVJMPXJzYzovL1JlYWN0L1wiICtcbiAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnZpcm9ubWVudE5hbWUpICtcbiAgICAgICAgICAgIFwiL1wiICtcbiAgICAgICAgICAgIGZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiP3NcIiArXG4gICAgICAgICAgICBmYWtlU2VydmVyRnVuY3Rpb25JZHgrKyksXG4gICAgICAgICAgKGNvbCArPSBcIlxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiICsgc291cmNlTWFwKSlcbiAgICAgICAgOiBmaWxlbmFtZSAmJiAoY29sICs9IFwiXFxuLy8jIHNvdXJjZVVSTD1cIiArIGZpbGVuYW1lKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoMCwgZXZhbCkoY29sKShpbm5lckZ1bmN0aW9uKVtuYW1lXTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIGlubmVyRnVuY3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKFxuICAgICAgcHJveHksXG4gICAgICByZWZlcmVuY2UkanNjb21wJDAsXG4gICAgICBlbmNvZGVGb3JtQWN0aW9uXG4gICAgKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwcm94eSwge1xuICAgICAgICAkJEZPUk1fQUNUSU9OOiB7XG4gICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICB2b2lkIDAgPT09IGVuY29kZUZvcm1BY3Rpb25cbiAgICAgICAgICAgICAgPyBkZWZhdWx0RW5jb2RlRm9ybUFjdGlvblxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZWZlcmVuY2UgPSBrbm93blNlcnZlclJlZmVyZW5jZXMuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiVHJpZWQgdG8gZW5jb2RlIGEgU2VydmVyIEFjdGlvbiBmcm9tIGEgZGlmZmVyZW50IGluc3RhbmNlIHRoYW4gdGhlIGVuY29kZXIgaXMgZnJvbS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kUHJvbWlzZSA9IHJlZmVyZW5jZS5ib3VuZDtcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGJvdW5kUHJvbWlzZSAmJiAoYm91bmRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFtdKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlRm9ybUFjdGlvbihyZWZlcmVuY2UuaWQsIGJvdW5kUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAkJElTX1NJR05BVFVSRV9FUVVBTDogeyB2YWx1ZTogaXNTaWduYXR1cmVFcXVhbCB9LFxuICAgICAgICBiaW5kOiB7IHZhbHVlOiBiaW5kIH1cbiAgICAgIH0pO1xuICAgICAga25vd25TZXJ2ZXJSZWZlcmVuY2VzLnNldChwcm94eSwgcmVmZXJlbmNlJGpzY29tcCQwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZCgpIHtcbiAgICAgIHZhciBuZXdGbiA9IEZ1bmN0aW9uQmluZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICByZWZlcmVuY2UgPSBrbm93blNlcnZlclJlZmVyZW5jZXMuZ2V0KHRoaXMpO1xuICAgICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgICBudWxsICE9IGFyZ3VtZW50c1swXSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQ2Fubm90IGJpbmQgXCJ0aGlzXCIgb2YgYSBTZXJ2ZXIgQWN0aW9uLiBQYXNzIG51bGwgb3IgdW5kZWZpbmVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byAuYmluZCgpLidcbiAgICAgICAgICApO1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgICAgIGJvdW5kUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIGJvdW5kUHJvbWlzZSA9XG4gICAgICAgICAgbnVsbCAhPT0gcmVmZXJlbmNlLmJvdW5kXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShyZWZlcmVuY2UuYm91bmQpLnRoZW4oZnVuY3Rpb24gKGJvdW5kQXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBib3VuZEFyZ3MuY29uY2F0KGFyZ3MpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoYXJncyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5ld0ZuLCB7XG4gICAgICAgICAgJCRGT1JNX0FDVElPTjogeyB2YWx1ZTogdGhpcy4kJEZPUk1fQUNUSU9OIH0sXG4gICAgICAgICAgJCRJU19TSUdOQVRVUkVfRVFVQUw6IHsgdmFsdWU6IGlzU2lnbmF0dXJlRXF1YWwgfSxcbiAgICAgICAgICBiaW5kOiB7IHZhbHVlOiBiaW5kIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGtub3duU2VydmVyUmVmZXJlbmNlcy5zZXQobmV3Rm4sIHtcbiAgICAgICAgICBpZDogcmVmZXJlbmNlLmlkLFxuICAgICAgICAgIGJvdW5kOiBib3VuZFByb21pc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3Rm47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJvdW5kU2VydmVyUmVmZXJlbmNlKFxuICAgICAgbWV0YURhdGEsXG4gICAgICBjYWxsU2VydmVyLFxuICAgICAgZW5jb2RlRm9ybUFjdGlvbixcbiAgICAgIGZpbmRTb3VyY2VNYXBVUkxcbiAgICApIHtcbiAgICAgIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gYm91bmRcbiAgICAgICAgICA/IFwiZnVsZmlsbGVkXCIgPT09IGJvdW5kLnN0YXR1c1xuICAgICAgICAgICAgPyBjYWxsU2VydmVyKGlkLCBib3VuZC52YWx1ZS5jb25jYXQoYXJncykpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShib3VuZCkudGhlbihmdW5jdGlvbiAoYm91bmRBcmdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoaWQsIGJvdW5kQXJncy5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogY2FsbFNlcnZlcihpZCwgYXJncyk7XG4gICAgICB9XG4gICAgICB2YXIgaWQgPSBtZXRhRGF0YS5pZCxcbiAgICAgICAgYm91bmQgPSBtZXRhRGF0YS5ib3VuZCxcbiAgICAgICAgbG9jYXRpb24gPSBtZXRhRGF0YS5sb2NhdGlvbjtcbiAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWV0YURhdGEubmFtZSB8fCBcIlwiLFxuICAgICAgICAgIGZpbGVuYW1lID0gbG9jYXRpb25bMV0sXG4gICAgICAgICAgbGluZSA9IGxvY2F0aW9uWzJdO1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uWzNdO1xuICAgICAgICBtZXRhRGF0YSA9IG1ldGFEYXRhLmVudiB8fCBcIlNlcnZlclwiO1xuICAgICAgICBmaW5kU291cmNlTWFwVVJMID1cbiAgICAgICAgICBudWxsID09IGZpbmRTb3VyY2VNYXBVUkxcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBmaW5kU291cmNlTWFwVVJMKGZpbGVuYW1lLCBtZXRhRGF0YSk7XG4gICAgICAgIGFjdGlvbiA9IGNyZWF0ZUZha2VTZXJ2ZXJGdW5jdGlvbihcbiAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgICAgICAgICBsaW5lLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIG1ldGFEYXRhLFxuICAgICAgICAgIGFjdGlvblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgeyBpZDogaWQsIGJvdW5kOiBib3VuZCB9LFxuICAgICAgICBlbmNvZGVGb3JtQWN0aW9uXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VTdGFja0xvY2F0aW9uKGVycm9yKSB7XG4gICAgICBlcnJvciA9IGVycm9yLnN0YWNrO1xuICAgICAgZXJyb3Iuc3RhcnRzV2l0aChcIkVycm9yOiByZWFjdC1zdGFjay10b3AtZnJhbWVcXG5cIikgJiZcbiAgICAgICAgKGVycm9yID0gZXJyb3Iuc2xpY2UoMjkpKTtcbiAgICAgIHZhciBlbmRPZkZpcnN0ID0gZXJyb3IuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgIGlmICgtMSAhPT0gZW5kT2ZGaXJzdCkge1xuICAgICAgICB2YXIgZW5kT2ZTZWNvbmQgPSBlcnJvci5pbmRleE9mKFwiXFxuXCIsIGVuZE9mRmlyc3QgKyAxKTtcbiAgICAgICAgZW5kT2ZGaXJzdCA9XG4gICAgICAgICAgLTEgPT09IGVuZE9mU2Vjb25kXG4gICAgICAgICAgICA/IGVycm9yLnNsaWNlKGVuZE9mRmlyc3QgKyAxKVxuICAgICAgICAgICAgOiBlcnJvci5zbGljZShlbmRPZkZpcnN0ICsgMSwgZW5kT2ZTZWNvbmQpO1xuICAgICAgfSBlbHNlIGVuZE9mRmlyc3QgPSBlcnJvcjtcbiAgICAgIGVycm9yID0gdjhGcmFtZVJlZ0V4cC5leGVjKGVuZE9mRmlyc3QpO1xuICAgICAgaWYgKFxuICAgICAgICAhZXJyb3IgJiZcbiAgICAgICAgKChlcnJvciA9IGpzY1NwaWRlck1vbmtleUZyYW1lUmVnRXhwLmV4ZWMoZW5kT2ZGaXJzdCkpLCAhZXJyb3IpXG4gICAgICApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgZW5kT2ZGaXJzdCA9IGVycm9yWzFdIHx8IFwiXCI7XG4gICAgICBcIjxhbm9ueW1vdXM+XCIgPT09IGVuZE9mRmlyc3QgJiYgKGVuZE9mRmlyc3QgPSBcIlwiKTtcbiAgICAgIGVuZE9mU2Vjb25kID0gZXJyb3JbMl0gfHwgZXJyb3JbNV0gfHwgXCJcIjtcbiAgICAgIFwiPGFub255bW91cz5cIiA9PT0gZW5kT2ZTZWNvbmQgJiYgKGVuZE9mU2Vjb25kID0gXCJcIik7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBlbmRPZkZpcnN0LFxuICAgICAgICBlbmRPZlNlY29uZCxcbiAgICAgICAgKyhlcnJvclszXSB8fCBlcnJvcls2XSksXG4gICAgICAgICsoZXJyb3JbNF0gfHwgZXJyb3JbN10pXG4gICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UkMShcbiAgICAgIGlkLFxuICAgICAgY2FsbFNlcnZlcixcbiAgICAgIGVuY29kZUZvcm1BY3Rpb24sXG4gICAgICBmaW5kU291cmNlTWFwVVJMLFxuICAgICAgZnVuY3Rpb25OYW1lXG4gICAgKSB7XG4gICAgICBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoaWQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgdmFyIGxvY2F0aW9uID0gcGFyc2VTdGFja0xvY2F0aW9uKEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpKTtcbiAgICAgIGlmIChudWxsICE9PSBsb2NhdGlvbikge1xuICAgICAgICB2YXIgZmlsZW5hbWUgPSBsb2NhdGlvblsxXSxcbiAgICAgICAgICBsaW5lID0gbG9jYXRpb25bMl07XG4gICAgICAgIGxvY2F0aW9uID0gbG9jYXRpb25bM107XG4gICAgICAgIGZpbmRTb3VyY2VNYXBVUkwgPVxuICAgICAgICAgIG51bGwgPT0gZmluZFNvdXJjZU1hcFVSTFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGZpbmRTb3VyY2VNYXBVUkwoZmlsZW5hbWUsIFwiQ2xpZW50XCIpO1xuICAgICAgICBhY3Rpb24gPSBjcmVhdGVGYWtlU2VydmVyRnVuY3Rpb24oXG4gICAgICAgICAgZnVuY3Rpb25OYW1lIHx8IFwiXCIsXG4gICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgICAgICAgICBsaW5lLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIFwiQ2xpZW50XCIsXG4gICAgICAgICAgYWN0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZWdpc3RlclNlcnZlclJlZmVyZW5jZShcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICB7IGlkOiBpZCwgYm91bmQ6IG51bGwgfSxcbiAgICAgICAgZW5jb2RlRm9ybUFjdGlvblxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQcm9maWxlclwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3RyaWN0TW9kZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlLnRhZyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHR5cGUuJCR0eXBlb2YpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgdmFyIGlubmVyVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0eXBlIHx8XG4gICAgICAgICAgICAgICgodHlwZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGlubmVyVHlwZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIGlubmVyVHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZShpbm5lclR5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdFByb21pc2Uoc3RhdHVzLCB2YWx1ZSwgcmVhc29uLCByZXNwb25zZSkge1xuICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLl9kZWJ1Z0luZm8gPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ2h1bmsoY2h1bmspIHtcbiAgICAgIHN3aXRjaCAoY2h1bmsuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2RlbFwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2RlbENodW5rKGNodW5rKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZHVsZVwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2R1bGVDaHVuayhjaHVuayk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIGNodW5rLnZhbHVlO1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgIHRocm93IGNodW5rO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IGNodW5rLnJlYXNvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gbmV3IFJlYWN0UHJvbWlzZShcInBlbmRpbmdcIiwgbnVsbCwgbnVsbCwgcmVzcG9uc2UpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YWtlQ2h1bmsobGlzdGVuZXJzLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspICgwLCBsaXN0ZW5lcnNbaV0pKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FrZUNodW5rSWZJbml0aWFsaXplZChjaHVuaywgcmVzb2x2ZUxpc3RlbmVycywgcmVqZWN0TGlzdGVuZXJzKSB7XG4gICAgICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgd2FrZUNodW5rKHJlc29sdmVMaXN0ZW5lcnMsIGNodW5rLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgY2FzZSBcImJsb2NrZWRcIjpcbiAgICAgICAgICBpZiAoY2h1bmsudmFsdWUpXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc29sdmVMaXN0ZW5lcnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgIGNodW5rLnZhbHVlLnB1c2gocmVzb2x2ZUxpc3RlbmVyc1tpXSk7XG4gICAgICAgICAgZWxzZSBjaHVuay52YWx1ZSA9IHJlc29sdmVMaXN0ZW5lcnM7XG4gICAgICAgICAgaWYgKGNodW5rLnJlYXNvbikge1xuICAgICAgICAgICAgaWYgKHJlamVjdExpc3RlbmVycylcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzID0gMDtcbiAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzIDwgcmVqZWN0TGlzdGVuZXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzKytcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNodW5rLnJlYXNvbi5wdXNoKHJlamVjdExpc3RlbmVyc1tyZXNvbHZlTGlzdGVuZXJzXSk7XG4gICAgICAgICAgfSBlbHNlIGNodW5rLnJlYXNvbiA9IHJlamVjdExpc3RlbmVycztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgcmVqZWN0TGlzdGVuZXJzICYmIHdha2VDaHVuayhyZWplY3RMaXN0ZW5lcnMsIGNodW5rLnJlYXNvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyaWdnZXJFcnJvck9uQ2h1bmsoY2h1bmssIGVycm9yKSB7XG4gICAgICBpZiAoXCJwZW5kaW5nXCIgIT09IGNodW5rLnN0YXR1cyAmJiBcImJsb2NrZWRcIiAhPT0gY2h1bmsuc3RhdHVzKVxuICAgICAgICBjaHVuay5yZWFzb24uZXJyb3IoZXJyb3IpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBjaHVuay5yZWFzb247XG4gICAgICAgIGNodW5rLnN0YXR1cyA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgY2h1bmsucmVhc29uID0gZXJyb3I7XG4gICAgICAgIG51bGwgIT09IGxpc3RlbmVycyAmJiB3YWtlQ2h1bmsobGlzdGVuZXJzLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVkSXRlcmF0b3JSZXN1bHRDaHVuayhyZXNwb25zZSwgdmFsdWUsIGRvbmUpIHtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICBcInJlc29sdmVkX21vZGVsXCIsXG4gICAgICAgIChkb25lID8gJ3tcImRvbmVcIjp0cnVlLFwidmFsdWVcIjonIDogJ3tcImRvbmVcIjpmYWxzZSxcInZhbHVlXCI6JykgK1xuICAgICAgICAgIHZhbHVlICtcbiAgICAgICAgICBcIn1cIixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcmVzcG9uc2VcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVJdGVyYXRvclJlc3VsdENodW5rKGNodW5rLCB2YWx1ZSwgZG9uZSkge1xuICAgICAgcmVzb2x2ZU1vZGVsQ2h1bmsoXG4gICAgICAgIGNodW5rLFxuICAgICAgICAoZG9uZSA/ICd7XCJkb25lXCI6dHJ1ZSxcInZhbHVlXCI6JyA6ICd7XCJkb25lXCI6ZmFsc2UsXCJ2YWx1ZVwiOicpICtcbiAgICAgICAgICB2YWx1ZSArXG4gICAgICAgICAgXCJ9XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVNb2RlbENodW5rKGNodW5rLCB2YWx1ZSkge1xuICAgICAgaWYgKFwicGVuZGluZ1wiICE9PSBjaHVuay5zdGF0dXMpIGNodW5rLnJlYXNvbi5lbnF1ZXVlTW9kZWwodmFsdWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciByZXNvbHZlTGlzdGVuZXJzID0gY2h1bmsudmFsdWUsXG4gICAgICAgICAgcmVqZWN0TGlzdGVuZXJzID0gY2h1bmsucmVhc29uO1xuICAgICAgICBjaHVuay5zdGF0dXMgPSBcInJlc29sdmVkX21vZGVsXCI7XG4gICAgICAgIGNodW5rLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIG51bGwgIT09IHJlc29sdmVMaXN0ZW5lcnMgJiZcbiAgICAgICAgICAoaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoY2h1bmspLFxuICAgICAgICAgIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoY2h1bmssIHJlc29sdmVMaXN0ZW5lcnMsIHJlamVjdExpc3RlbmVycykpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlTW9kdWxlQ2h1bmsoY2h1bmssIHZhbHVlKSB7XG4gICAgICBpZiAoXCJwZW5kaW5nXCIgPT09IGNodW5rLnN0YXR1cyB8fCBcImJsb2NrZWRcIiA9PT0gY2h1bmsuc3RhdHVzKSB7XG4gICAgICAgIHZhciByZXNvbHZlTGlzdGVuZXJzID0gY2h1bmsudmFsdWUsXG4gICAgICAgICAgcmVqZWN0TGlzdGVuZXJzID0gY2h1bmsucmVhc29uO1xuICAgICAgICBjaHVuay5zdGF0dXMgPSBcInJlc29sdmVkX21vZHVsZVwiO1xuICAgICAgICBjaHVuay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBudWxsICE9PSByZXNvbHZlTGlzdGVuZXJzICYmXG4gICAgICAgICAgKGluaXRpYWxpemVNb2R1bGVDaHVuayhjaHVuayksXG4gICAgICAgICAgd2FrZUNodW5rSWZJbml0aWFsaXplZChjaHVuaywgcmVzb2x2ZUxpc3RlbmVycywgcmVqZWN0TGlzdGVuZXJzKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVNb2RlbENodW5rKGNodW5rKSB7XG4gICAgICB2YXIgcHJldkhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyO1xuICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlciA9IG51bGw7XG4gICAgICB2YXIgcmVzb2x2ZWRNb2RlbCA9IGNodW5rLnZhbHVlO1xuICAgICAgY2h1bmsuc3RhdHVzID0gXCJibG9ja2VkXCI7XG4gICAgICBjaHVuay52YWx1ZSA9IG51bGw7XG4gICAgICBjaHVuay5yZWFzb24gPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHZhbHVlID0gSlNPTi5wYXJzZShyZXNvbHZlZE1vZGVsLCBjaHVuay5fcmVzcG9uc2UuX2Zyb21KU09OKSxcbiAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzID0gY2h1bmsudmFsdWU7XG4gICAgICAgIG51bGwgIT09IHJlc29sdmVMaXN0ZW5lcnMgJiZcbiAgICAgICAgICAoKGNodW5rLnZhbHVlID0gbnVsbCksXG4gICAgICAgICAgKGNodW5rLnJlYXNvbiA9IG51bGwpLFxuICAgICAgICAgIHdha2VDaHVuayhyZXNvbHZlTGlzdGVuZXJzLCB2YWx1ZSkpO1xuICAgICAgICBpZiAobnVsbCAhPT0gaW5pdGlhbGl6aW5nSGFuZGxlcikge1xuICAgICAgICAgIGlmIChpbml0aWFsaXppbmdIYW5kbGVyLmVycm9yZWQpIHRocm93IGluaXRpYWxpemluZ0hhbmRsZXIudmFsdWU7XG4gICAgICAgICAgaWYgKDAgPCBpbml0aWFsaXppbmdIYW5kbGVyLmRlcHMpIHtcbiAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIuY2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgY2h1bmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIChjaHVuay5zdGF0dXMgPSBcInJlamVjdGVkXCIpLCAoY2h1bmsucmVhc29uID0gZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlciA9IHByZXZIYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplTW9kdWxlQ2h1bmsoY2h1bmspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlcXVpcmVNb2R1bGUoY2h1bmsudmFsdWUpO1xuICAgICAgICBjaHVuay5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICBjaHVuay52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgKGNodW5rLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksIChjaHVuay5yZWFzb24gPSBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEdsb2JhbEVycm9yKHJlc3BvbnNlLCBlcnJvcikge1xuICAgICAgcmVzcG9uc2UuX2NodW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICBcInBlbmRpbmdcIiA9PT0gY2h1bmsuc3RhdHVzICYmIHRyaWdnZXJFcnJvck9uQ2h1bmsoY2h1bmssIGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudWxsUmVmR2V0dGVyKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxhenlDaHVua1dyYXBwZXIoY2h1bmspIHtcbiAgICAgIHZhciBsYXp5VHlwZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICAgICAgX3BheWxvYWQ6IGNodW5rLFxuICAgICAgICBfaW5pdDogcmVhZENodW5rXG4gICAgICB9O1xuICAgICAgY2h1bmsgPSBjaHVuay5fZGVidWdJbmZvIHx8IChjaHVuay5fZGVidWdJbmZvID0gW10pO1xuICAgICAgbGF6eVR5cGUuX2RlYnVnSW5mbyA9IGNodW5rO1xuICAgICAgcmV0dXJuIGxhenlUeXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDaHVuayhyZXNwb25zZSwgaWQpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmsgfHwgKChjaHVuayA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSkpLCBjaHVua3Muc2V0KGlkLCBjaHVuaykpO1xuICAgICAgcmV0dXJuIGNodW5rO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YWl0Rm9yUmVmZXJlbmNlKFxuICAgICAgcmVmZXJlbmNlZENodW5rLFxuICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAga2V5LFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBtYXAsXG4gICAgICBwYXRoXG4gICAgKSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvciAoOyB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFOyApXG4gICAgICAgICAgICBpZiAoKCh2YWx1ZSA9IHZhbHVlLl9wYXlsb2FkKSwgdmFsdWUgPT09IGhhbmRsZXIuY2h1bmspKVxuICAgICAgICAgICAgICB2YWx1ZSA9IGhhbmRsZXIudmFsdWU7XG4gICAgICAgICAgICBlbHNlIGlmIChcImZ1bGZpbGxlZFwiID09PSB2YWx1ZS5zdGF0dXMpIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgcGF0aC5zcGxpY2UoMCwgaSAtIDEpO1xuICAgICAgICAgICAgICB2YWx1ZS50aGVuKGZ1bGZpbGwsIHJlamVjdCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3BhdGhbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGkgPSBtYXAocmVzcG9uc2UsIHZhbHVlLCBwYXJlbnRPYmplY3QsIGtleSk7XG4gICAgICAgIHBhcmVudE9iamVjdFtrZXldID0gaTtcbiAgICAgICAgXCJcIiA9PT0ga2V5ICYmIG51bGwgPT09IGhhbmRsZXIudmFsdWUgJiYgKGhhbmRsZXIudmFsdWUgPSBpKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmVudE9iamVjdFswXSA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFICYmXG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGhhbmRsZXIudmFsdWUgJiZcbiAgICAgICAgICBudWxsICE9PSBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgaGFuZGxlci52YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKCgodmFsdWUgPSBoYW5kbGVyLnZhbHVlKSwga2V5KSkge1xuICAgICAgICAgICAgY2FzZSBcIjNcIjpcbiAgICAgICAgICAgICAgdmFsdWUucHJvcHMgPSBpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCI0XCI6XG4gICAgICAgICAgICAgIHZhbHVlLl9vd25lciA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICBoYW5kbGVyLmRlcHMtLTtcbiAgICAgICAgMCA9PT0gaGFuZGxlci5kZXBzICYmXG4gICAgICAgICAgKChpID0gaGFuZGxlci5jaHVuayksXG4gICAgICAgICAgbnVsbCAhPT0gaSAmJlxuICAgICAgICAgICAgXCJibG9ja2VkXCIgPT09IGkuc3RhdHVzICYmXG4gICAgICAgICAgICAoKHZhbHVlID0gaS52YWx1ZSksXG4gICAgICAgICAgICAoaS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKSxcbiAgICAgICAgICAgIChpLnZhbHVlID0gaGFuZGxlci52YWx1ZSksXG4gICAgICAgICAgICBudWxsICE9PSB2YWx1ZSAmJiB3YWtlQ2h1bmsodmFsdWUsIGhhbmRsZXIudmFsdWUpKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZWplY3QoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFoYW5kbGVyLmVycm9yZWQpIHtcbiAgICAgICAgICB2YXIgYmxvY2tlZFZhbHVlID0gaGFuZGxlci52YWx1ZTtcbiAgICAgICAgICBoYW5kbGVyLmVycm9yZWQgPSAhMDtcbiAgICAgICAgICBoYW5kbGVyLnZhbHVlID0gZXJyb3I7XG4gICAgICAgICAgdmFyIGNodW5rID0gaGFuZGxlci5jaHVuaztcbiAgICAgICAgICBudWxsICE9PSBjaHVuayAmJlxuICAgICAgICAgICAgXCJibG9ja2VkXCIgPT09IGNodW5rLnN0YXR1cyAmJlxuICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBibG9ja2VkVmFsdWUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gYmxvY2tlZFZhbHVlICYmXG4gICAgICAgICAgICAgIGJsb2NrZWRWYWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFICYmXG4gICAgICAgICAgICAgICgoYmxvY2tlZFZhbHVlID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShibG9ja2VkVmFsdWUudHlwZSkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICBvd25lcjogYmxvY2tlZFZhbHVlLl9vd25lclxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKGNodW5rLl9kZWJ1Z0luZm8gfHwgKGNodW5rLl9kZWJ1Z0luZm8gPSBbXSkpLnB1c2goYmxvY2tlZFZhbHVlKSksXG4gICAgICAgICAgICB0cmlnZ2VyRXJyb3JPbkNodW5rKGNodW5rLCBlcnJvcikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5pdGlhbGl6aW5nSGFuZGxlcikge1xuICAgICAgICB2YXIgaGFuZGxlciA9IGluaXRpYWxpemluZ0hhbmRsZXI7XG4gICAgICAgIGhhbmRsZXIuZGVwcysrO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyID0ge1xuICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkZXBzOiAxLFxuICAgICAgICAgIGVycm9yZWQ6ICExXG4gICAgICAgIH07XG4gICAgICByZWZlcmVuY2VkQ2h1bmsudGhlbihmdWxmaWxsLCByZWplY3QpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvYWRTZXJ2ZXJSZWZlcmVuY2UocmVzcG9uc2UsIG1ldGFEYXRhLCBwYXJlbnRPYmplY3QsIGtleSkge1xuICAgICAgaWYgKCFyZXNwb25zZS5fc2VydmVyUmVmZXJlbmNlQ29uZmlnKVxuICAgICAgICByZXR1cm4gY3JlYXRlQm91bmRTZXJ2ZXJSZWZlcmVuY2UoXG4gICAgICAgICAgbWV0YURhdGEsXG4gICAgICAgICAgcmVzcG9uc2UuX2NhbGxTZXJ2ZXIsXG4gICAgICAgICAgcmVzcG9uc2UuX2VuY29kZUZvcm1BY3Rpb24sXG4gICAgICAgICAgcmVzcG9uc2UuX2RlYnVnRmluZFNvdXJjZU1hcFVSTFxuICAgICAgICApO1xuICAgICAgdmFyIHNlcnZlclJlZmVyZW5jZSA9IHJlc29sdmVTZXJ2ZXJSZWZlcmVuY2UoXG4gICAgICAgIHJlc3BvbnNlLl9zZXJ2ZXJSZWZlcmVuY2VDb25maWcsXG4gICAgICAgIG1ldGFEYXRhLmlkXG4gICAgICApO1xuICAgICAgaWYgKChyZXNwb25zZSA9IHByZWxvYWRNb2R1bGUoc2VydmVyUmVmZXJlbmNlKSkpXG4gICAgICAgIG1ldGFEYXRhLmJvdW5kICYmIChyZXNwb25zZSA9IFByb21pc2UuYWxsKFtyZXNwb25zZSwgbWV0YURhdGEuYm91bmRdKSk7XG4gICAgICBlbHNlIGlmIChtZXRhRGF0YS5ib3VuZCkgcmVzcG9uc2UgPSBQcm9taXNlLnJlc29sdmUobWV0YURhdGEuYm91bmQpO1xuICAgICAgZWxzZSByZXR1cm4gcmVxdWlyZU1vZHVsZShzZXJ2ZXJSZWZlcmVuY2UpO1xuICAgICAgaWYgKGluaXRpYWxpemluZ0hhbmRsZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyO1xuICAgICAgICBoYW5kbGVyLmRlcHMrKztcbiAgICAgIH0gZWxzZVxuICAgICAgICBoYW5kbGVyID0gaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgZGVwczogMSxcbiAgICAgICAgICBlcnJvcmVkOiAhMVxuICAgICAgICB9O1xuICAgICAgcmVzcG9uc2UudGhlbihcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciByZXNvbHZlZFZhbHVlID0gcmVxdWlyZU1vZHVsZShzZXJ2ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgIGlmIChtZXRhRGF0YS5ib3VuZCkge1xuICAgICAgICAgICAgdmFyIGJvdW5kQXJncyA9IG1ldGFEYXRhLmJvdW5kLnZhbHVlLnNsaWNlKDApO1xuICAgICAgICAgICAgYm91bmRBcmdzLnVuc2hpZnQobnVsbCk7XG4gICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gcmVzb2x2ZWRWYWx1ZS5iaW5kLmFwcGx5KHJlc29sdmVkVmFsdWUsIGJvdW5kQXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudE9iamVjdFtrZXldID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICBcIlwiID09PSBrZXkgJiZcbiAgICAgICAgICAgIG51bGwgPT09IGhhbmRsZXIudmFsdWUgJiZcbiAgICAgICAgICAgIChoYW5kbGVyLnZhbHVlID0gcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50T2JqZWN0WzBdID09PSBSRUFDVF9FTEVNRU5UX1RZUEUgJiZcbiAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgICBudWxsICE9PSBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgICBoYW5kbGVyLnZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICApXG4gICAgICAgICAgICBzd2l0Y2ggKCgoYm91bmRBcmdzID0gaGFuZGxlci52YWx1ZSksIGtleSkpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIjNcIjpcbiAgICAgICAgICAgICAgICBib3VuZEFyZ3MucHJvcHMgPSByZXNvbHZlZFZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiNFwiOlxuICAgICAgICAgICAgICAgIGJvdW5kQXJncy5fb3duZXIgPSByZXNvbHZlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGhhbmRsZXIuZGVwcy0tO1xuICAgICAgICAgIDAgPT09IGhhbmRsZXIuZGVwcyAmJlxuICAgICAgICAgICAgKChyZXNvbHZlZFZhbHVlID0gaGFuZGxlci5jaHVuayksXG4gICAgICAgICAgICBudWxsICE9PSByZXNvbHZlZFZhbHVlICYmXG4gICAgICAgICAgICAgIFwiYmxvY2tlZFwiID09PSByZXNvbHZlZFZhbHVlLnN0YXR1cyAmJlxuICAgICAgICAgICAgICAoKGJvdW5kQXJncyA9IHJlc29sdmVkVmFsdWUudmFsdWUpLFxuICAgICAgICAgICAgICAocmVzb2x2ZWRWYWx1ZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKSxcbiAgICAgICAgICAgICAgKHJlc29sdmVkVmFsdWUudmFsdWUgPSBoYW5kbGVyLnZhbHVlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gYm91bmRBcmdzICYmIHdha2VDaHVuayhib3VuZEFyZ3MsIGhhbmRsZXIudmFsdWUpKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmICghaGFuZGxlci5lcnJvcmVkKSB7XG4gICAgICAgICAgICB2YXIgYmxvY2tlZFZhbHVlID0gaGFuZGxlci52YWx1ZTtcbiAgICAgICAgICAgIGhhbmRsZXIuZXJyb3JlZCA9ICEwO1xuICAgICAgICAgICAgaGFuZGxlci52YWx1ZSA9IGVycm9yO1xuICAgICAgICAgICAgdmFyIGNodW5rID0gaGFuZGxlci5jaHVuaztcbiAgICAgICAgICAgIG51bGwgIT09IGNodW5rICYmXG4gICAgICAgICAgICAgIFwiYmxvY2tlZFwiID09PSBjaHVuay5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBibG9ja2VkVmFsdWUgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSBibG9ja2VkVmFsdWUgJiZcbiAgICAgICAgICAgICAgICBibG9ja2VkVmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICAgICAgICAgICgoYmxvY2tlZFZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGJsb2NrZWRWYWx1ZS50eXBlKSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgb3duZXI6IGJsb2NrZWRWYWx1ZS5fb3duZXJcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAoY2h1bmsuX2RlYnVnSW5mbyB8fCAoY2h1bmsuX2RlYnVnSW5mbyA9IFtdKSkucHVzaChcbiAgICAgICAgICAgICAgICAgIGJsb2NrZWRWYWx1ZVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICB0cmlnZ2VyRXJyb3JPbkNodW5rKGNodW5rLCBlcnJvcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCByZWZlcmVuY2UsIHBhcmVudE9iamVjdCwga2V5LCBtYXApIHtcbiAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZS5zcGxpdChcIjpcIik7XG4gICAgICB2YXIgaWQgPSBwYXJzZUludChyZWZlcmVuY2VbMF0sIDE2KTtcbiAgICAgIGlkID0gZ2V0Q2h1bmsocmVzcG9uc2UsIGlkKTtcbiAgICAgIHN3aXRjaCAoaWQuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2RlbFwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2RlbENodW5rKGlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZHVsZVwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2R1bGVDaHVuayhpZCk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGlkLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgZm9yICh2YXIgdmFsdWUgPSBpZC52YWx1ZSwgaSA9IDE7IGkgPCByZWZlcmVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAoOyB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFOyApXG4gICAgICAgICAgICAgIGlmICgoKHZhbHVlID0gdmFsdWUuX3BheWxvYWQpLCBcImZ1bGZpbGxlZFwiID09PSB2YWx1ZS5zdGF0dXMpKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvclJlZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICBtYXAsXG4gICAgICAgICAgICAgICAgICByZWZlcmVuY2Uuc2xpY2UoaSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbcmVmZXJlbmNlW2ldXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzcG9uc2UgPSBtYXAocmVzcG9uc2UsIHZhbHVlLCBwYXJlbnRPYmplY3QsIGtleSk7XG4gICAgICAgICAgaWQuX2RlYnVnSW5mbyAmJlxuICAgICAgICAgICAgKFwib2JqZWN0XCIgIT09IHR5cGVvZiByZXNwb25zZSB8fFxuICAgICAgICAgICAgICBudWxsID09PSByZXNwb25zZSB8fFxuICAgICAgICAgICAgICAoIWlzQXJyYXlJbXBsKHJlc3BvbnNlKSAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlc3BvbnNlW0FTWU5DX0lURVJBVE9SXSAmJlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLiQkdHlwZW9mICE9PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHx8XG4gICAgICAgICAgICAgIHJlc3BvbnNlLl9kZWJ1Z0luZm8gfHxcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3BvbnNlLCBcIl9kZWJ1Z0luZm9cIiwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBpZC5fZGVidWdJbmZvXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgIGNhc2UgXCJibG9ja2VkXCI6XG4gICAgICAgICAgcmV0dXJuIHdhaXRGb3JSZWZlcmVuY2UoXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgbWFwLFxuICAgICAgICAgICAgcmVmZXJlbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlclxuICAgICAgICAgICAgICA/ICgoaW5pdGlhbGl6aW5nSGFuZGxlci5lcnJvcmVkID0gITApLFxuICAgICAgICAgICAgICAgIChpbml0aWFsaXppbmdIYW5kbGVyLnZhbHVlID0gaWQucmVhc29uKSlcbiAgICAgICAgICAgICAgOiAoaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICAgIGNodW5rOiBudWxsLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IGlkLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgIGRlcHM6IDAsXG4gICAgICAgICAgICAgICAgICBlcnJvcmVkOiAhMFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU1hcChyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBuZXcgTWFwKG1vZGVsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU2V0KHJlc3BvbnNlLCBtb2RlbCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQobW9kZWwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCbG9iKHJlc3BvbnNlLCBtb2RlbCkge1xuICAgICAgcmV0dXJuIG5ldyBCbG9iKG1vZGVsLnNsaWNlKDEpLCB7IHR5cGU6IG1vZGVsWzBdIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JtRGF0YShyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJlc3BvbnNlID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGVsLmxlbmd0aDsgaSsrKVxuICAgICAgICByZXNwb25zZS5hcHBlbmQobW9kZWxbaV1bMF0sIG1vZGVsW2ldWzFdKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdEl0ZXJhdG9yKHJlc3BvbnNlLCBtb2RlbCkge1xuICAgICAgcmV0dXJuIG1vZGVsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTW9kZWwocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlTW9kZWxTdHJpbmcocmVzcG9uc2UsIHBhcmVudE9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKFwiJFwiID09PSB2YWx1ZVswXSkge1xuICAgICAgICBpZiAoXCIkXCIgPT09IHZhbHVlKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBudWxsICE9PSBpbml0aWFsaXppbmdIYW5kbGVyICYmXG4gICAgICAgICAgICAgIFwiMFwiID09PSBrZXkgJiZcbiAgICAgICAgICAgICAgKGluaXRpYWxpemluZ0hhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgcGFyZW50OiBpbml0aWFsaXppbmdIYW5kbGVyLFxuICAgICAgICAgICAgICAgIGNodW5rOiBudWxsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIGRlcHM6IDAsXG4gICAgICAgICAgICAgICAgZXJyb3JlZDogITFcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICApO1xuICAgICAgICBzd2l0Y2ggKHZhbHVlWzFdKSB7XG4gICAgICAgICAgY2FzZSBcIiRcIjpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHBhcmVudE9iamVjdCA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAxNikpLFxuICAgICAgICAgICAgICAocmVzcG9uc2UgPSBnZXRDaHVuayhyZXNwb25zZSwgcGFyZW50T2JqZWN0KSksXG4gICAgICAgICAgICAgIGNyZWF0ZUxhenlDaHVua1dyYXBwZXIocmVzcG9uc2UpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJAXCI6XG4gICAgICAgICAgICBpZiAoMiA9PT0gdmFsdWUubGVuZ3RoKSByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgcGFyZW50T2JqZWN0ID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDE2KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRDaHVuayhyZXNwb25zZSwgcGFyZW50T2JqZWN0KTtcbiAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3IodmFsdWUuc2xpY2UoMikpO1xuICAgICAgICAgIGNhc2UgXCJGXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodmFsdWUgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBsb2FkU2VydmVyUmVmZXJlbmNlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIlRcIjpcbiAgICAgICAgICAgIHBhcmVudE9iamVjdCA9IFwiJFwiICsgdmFsdWUuc2xpY2UoMik7XG4gICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLl90ZW1wUmVmcztcbiAgICAgICAgICAgIGlmIChudWxsID09IHJlc3BvbnNlKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIk1pc3NpbmcgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNldCBidXQgdGhlIFJTQyByZXNwb25zZSByZXR1cm5lZCBhIHRlbXBvcmFyeSByZWZlcmVuY2UuIFBhc3MgYSB0ZW1wb3JhcnlSZWZlcmVuY2Ugb3B0aW9uIHdpdGggdGhlIHNldCB0aGF0IHdhcyB1c2VkIHdpdGggdGhlIHJlcGx5LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZ2V0KHBhcmVudE9iamVjdCk7XG4gICAgICAgICAgY2FzZSBcIlFcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh2YWx1ZSA9IHZhbHVlLnNsaWNlKDIpKSxcbiAgICAgICAgICAgICAgZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgdmFsdWUsIHBhcmVudE9iamVjdCwga2V5LCBjcmVhdGVNYXApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodmFsdWUgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIHZhbHVlLCBwYXJlbnRPYmplY3QsIGtleSwgY3JlYXRlU2V0KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiQlwiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHZhbHVlID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCB2YWx1ZSwgcGFyZW50T2JqZWN0LCBrZXksIGNyZWF0ZUJsb2IpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJLXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodmFsdWUgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBjcmVhdGVGb3JtRGF0YVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJaXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodmFsdWUgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICByZXNvbHZlRXJyb3JEZXZcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHZhbHVlID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgZXh0cmFjdEl0ZXJhdG9yXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiJC0wXCIgPT09IHZhbHVlID8gLTAgOiAtSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIk5cIjpcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlIFwiRFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUuc2xpY2UoMikpKTtcbiAgICAgICAgICBjYXNlIFwiblwiOlxuICAgICAgICAgICAgcmV0dXJuIEJpZ0ludCh2YWx1ZS5zbGljZSgyKSk7XG4gICAgICAgICAgY2FzZSBcIkVcIjpcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiAoMCwgZXZhbCkodmFsdWUuc2xpY2UoMikpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIllcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnRPYmplY3QsIGtleSwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVGhpcyBvYmplY3QgaGFzIGJlZW4gb21pdHRlZCBieSBSZWFjdCBpbiB0aGUgY29uc29sZSBsb2cgdG8gYXZvaWQgc2VuZGluZyB0b28gbXVjaCBkYXRhIGZyb20gdGhlIHNlcnZlci4gVHJ5IGxvZ2dpbmcgc21hbGxlciBvciBtb3JlIHNwZWNpZmljIG9iamVjdHMuXCI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodmFsdWUgPSB2YWx1ZS5zbGljZSgxKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIHZhbHVlLCBwYXJlbnRPYmplY3QsIGtleSwgY3JlYXRlTW9kZWwpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1pc3NpbmdDYWxsKCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdUcnlpbmcgdG8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gXCJ1c2Ugc2VydmVyXCIgYnV0IHRoZSBjYWxsU2VydmVyIG9wdGlvbiB3YXMgbm90IGltcGxlbWVudGVkIGluIHlvdXIgcm91dGVyIHJ1bnRpbWUuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVzcG9uc2VJbnN0YW5jZShcbiAgICAgIGJ1bmRsZXJDb25maWcsXG4gICAgICBzZXJ2ZXJSZWZlcmVuY2VDb25maWcsXG4gICAgICBtb2R1bGVMb2FkaW5nLFxuICAgICAgY2FsbFNlcnZlcixcbiAgICAgIGVuY29kZUZvcm1BY3Rpb24sXG4gICAgICBub25jZSxcbiAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMsXG4gICAgICBmaW5kU291cmNlTWFwVVJMLFxuICAgICAgcmVwbGF5Q29uc29sZSxcbiAgICAgIGVudmlyb25tZW50TmFtZVxuICAgICkge1xuICAgICAgdmFyIGNodW5rcyA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMuX2J1bmRsZXJDb25maWcgPSBidW5kbGVyQ29uZmlnO1xuICAgICAgdGhpcy5fc2VydmVyUmVmZXJlbmNlQ29uZmlnID0gc2VydmVyUmVmZXJlbmNlQ29uZmlnO1xuICAgICAgdGhpcy5fbW9kdWxlTG9hZGluZyA9IG1vZHVsZUxvYWRpbmc7XG4gICAgICB0aGlzLl9jYWxsU2VydmVyID0gdm9pZCAwICE9PSBjYWxsU2VydmVyID8gY2FsbFNlcnZlciA6IG1pc3NpbmdDYWxsO1xuICAgICAgdGhpcy5fZW5jb2RlRm9ybUFjdGlvbiA9IGVuY29kZUZvcm1BY3Rpb247XG4gICAgICB0aGlzLl9ub25jZSA9IG5vbmNlO1xuICAgICAgdGhpcy5fY2h1bmtzID0gY2h1bmtzO1xuICAgICAgdGhpcy5fc3RyaW5nRGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgdGhpcy5fZnJvbUpTT04gPSBudWxsO1xuICAgICAgdGhpcy5fcm93TGVuZ3RoID0gdGhpcy5fcm93VGFnID0gdGhpcy5fcm93SUQgPSB0aGlzLl9yb3dTdGF0ZSA9IDA7XG4gICAgICB0aGlzLl9idWZmZXIgPSBbXTtcbiAgICAgIHRoaXMuX3RlbXBSZWZzID0gdGVtcG9yYXJ5UmVmZXJlbmNlcztcbiAgICAgIHRoaXMuX2RlYnVnUm9vdE93bmVyID0gYnVuZGxlckNvbmZpZyA9XG4gICAgICAgIHZvaWQgMCA9PT0gUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlciB8fFxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVyYWxzU2VydmVyLkFcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IFJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXIuQS5nZXRPd25lcigpO1xuICAgICAgdGhpcy5fZGVidWdSb290U3RhY2sgPVxuICAgICAgICBudWxsICE9PSBidW5kbGVyQ29uZmlnID8gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIikgOiBudWxsO1xuICAgICAgdGhpcy5fZGVidWdGaW5kU291cmNlTWFwVVJMID0gZmluZFNvdXJjZU1hcFVSTDtcbiAgICAgIHRoaXMuX3JlcGxheUNvbnNvbGUgPSByZXBsYXlDb25zb2xlO1xuICAgICAgdGhpcy5fcm9vdEVudmlyb25tZW50TmFtZSA9XG4gICAgICAgIHZvaWQgMCA9PT0gZW52aXJvbm1lbnROYW1lID8gXCJTZXJ2ZXJcIiA6IGVudmlyb25tZW50TmFtZTtcbiAgICAgIHRoaXMuX2Zyb21KU09OID0gY3JlYXRlRnJvbUpTT05DYWxsYmFjayh0aGlzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKHJlc3BvbnNlLCBpZCwgbW9kZWwpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmtcbiAgICAgICAgPyByZXNvbHZlTW9kZWxDaHVuayhjaHVuaywgbW9kZWwpXG4gICAgICAgIDogY2h1bmtzLnNldChcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmV3IFJlYWN0UHJvbWlzZShcInJlc29sdmVkX21vZGVsXCIsIG1vZGVsLCBudWxsLCByZXNwb25zZSlcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlVGV4dChyZXNwb25zZSwgaWQsIHRleHQpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmsgJiYgXCJwZW5kaW5nXCIgIT09IGNodW5rLnN0YXR1c1xuICAgICAgICA/IGNodW5rLnJlYXNvbi5lbnF1ZXVlVmFsdWUodGV4dClcbiAgICAgICAgOiBjaHVua3Muc2V0KGlkLCBuZXcgUmVhY3RQcm9taXNlKFwiZnVsZmlsbGVkXCIsIHRleHQsIG51bGwsIHJlc3BvbnNlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVCdWZmZXIocmVzcG9uc2UsIGlkLCBidWZmZXIpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmsgJiYgXCJwZW5kaW5nXCIgIT09IGNodW5rLnN0YXR1c1xuICAgICAgICA/IGNodW5rLnJlYXNvbi5lbnF1ZXVlVmFsdWUoYnVmZmVyKVxuICAgICAgICA6IGNodW5rcy5zZXQoaWQsIG5ldyBSZWFjdFByb21pc2UoXCJmdWxmaWxsZWRcIiwgYnVmZmVyLCBudWxsLCByZXNwb25zZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlTW9kdWxlKHJlc3BvbnNlLCBpZCwgbW9kZWwpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgbW9kZWwgPSBKU09OLnBhcnNlKG1vZGVsLCByZXNwb25zZS5fZnJvbUpTT04pO1xuICAgICAgdmFyIGNsaWVudFJlZmVyZW5jZSA9IHJlc29sdmVDbGllbnRSZWZlcmVuY2UoXG4gICAgICAgIHJlc3BvbnNlLl9idW5kbGVyQ29uZmlnLFxuICAgICAgICBtb2RlbFxuICAgICAgKTtcbiAgICAgIHByZXBhcmVEZXN0aW5hdGlvbldpdGhDaHVua3MoXG4gICAgICAgIHJlc3BvbnNlLl9tb2R1bGVMb2FkaW5nLFxuICAgICAgICBtb2RlbFsxXSxcbiAgICAgICAgcmVzcG9uc2UuX25vbmNlXG4gICAgICApO1xuICAgICAgaWYgKChtb2RlbCA9IHByZWxvYWRNb2R1bGUoY2xpZW50UmVmZXJlbmNlKSkpIHtcbiAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgdmFyIGJsb2NrZWRDaHVuayA9IGNodW5rO1xuICAgICAgICAgIGJsb2NrZWRDaHVuay5zdGF0dXMgPSBcImJsb2NrZWRcIjtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgKGJsb2NrZWRDaHVuayA9IG5ldyBSZWFjdFByb21pc2UoXCJibG9ja2VkXCIsIG51bGwsIG51bGwsIHJlc3BvbnNlKSksXG4gICAgICAgICAgICBjaHVua3Muc2V0KGlkLCBibG9ja2VkQ2h1bmspO1xuICAgICAgICBtb2RlbC50aGVuKFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlTW9kdWxlQ2h1bmsoYmxvY2tlZENodW5rLCBjbGllbnRSZWZlcmVuY2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJpZ2dlckVycm9yT25DaHVuayhibG9ja2VkQ2h1bmssIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgY2h1bmtcbiAgICAgICAgICA/IHJlc29sdmVNb2R1bGVDaHVuayhjaHVuaywgY2xpZW50UmVmZXJlbmNlKVxuICAgICAgICAgIDogY2h1bmtzLnNldChcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIG5ldyBSZWFjdFByb21pc2UoXG4gICAgICAgICAgICAgICAgXCJyZXNvbHZlZF9tb2R1bGVcIixcbiAgICAgICAgICAgICAgICBjbGllbnRSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlU3RyZWFtKHJlc3BvbnNlLCBpZCwgc3RyZWFtLCBjb250cm9sbGVyKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rXG4gICAgICAgID8gXCJwZW5kaW5nXCIgPT09IGNodW5rLnN0YXR1cyAmJlxuICAgICAgICAgICgocmVzcG9uc2UgPSBjaHVuay52YWx1ZSksXG4gICAgICAgICAgKGNodW5rLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgIChjaHVuay52YWx1ZSA9IHN0cmVhbSksXG4gICAgICAgICAgKGNodW5rLnJlYXNvbiA9IGNvbnRyb2xsZXIpLFxuICAgICAgICAgIG51bGwgIT09IHJlc3BvbnNlICYmIHdha2VDaHVuayhyZXNwb25zZSwgY2h1bmsudmFsdWUpKVxuICAgICAgICA6IGNodW5rcy5zZXQoXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5ldyBSZWFjdFByb21pc2UoXCJmdWxmaWxsZWRcIiwgc3RyZWFtLCBjb250cm9sbGVyLCByZXNwb25zZSlcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFJlYWRhYmxlU3RyZWFtKHJlc3BvbnNlLCBpZCwgdHlwZSkge1xuICAgICAgdmFyIGNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgdHlwZSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoYykge1xuICAgICAgICAgIGNvbnRyb2xsZXIgPSBjO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciBwcmV2aW91c0Jsb2NrZWRDaHVuayA9IG51bGw7XG4gICAgICByZXNvbHZlU3RyZWFtKHJlc3BvbnNlLCBpZCwgdHlwZSwge1xuICAgICAgICBlbnF1ZXVlVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzQmxvY2tlZENodW5rXG4gICAgICAgICAgICA/IGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSlcbiAgICAgICAgICAgIDogcHJldmlvdXNCbG9ja2VkQ2h1bmsudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVNb2RlbDogZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcHJldmlvdXNCbG9ja2VkQ2h1bmspIHtcbiAgICAgICAgICAgIHZhciBjaHVuayA9IG5ldyBSZWFjdFByb21pc2UoXG4gICAgICAgICAgICAgIFwicmVzb2x2ZWRfbW9kZWxcIixcbiAgICAgICAgICAgICAganNvbixcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuayk7XG4gICAgICAgICAgICBcImZ1bGZpbGxlZFwiID09PSBjaHVuay5zdGF0dXNcbiAgICAgICAgICAgICAgPyBjb250cm9sbGVyLmVucXVldWUoY2h1bmsudmFsdWUpXG4gICAgICAgICAgICAgIDogKGNodW5rLnRoZW4oXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lbnF1ZXVlKHYpO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzQmxvY2tlZENodW5rID0gY2h1bmspKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2h1bmsgPSBwcmV2aW91c0Jsb2NrZWRDaHVuaztcbiAgICAgICAgICAgIHZhciBfY2h1bmszID0gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIF9jaHVuazMudGhlbihcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lbnF1ZXVlKHYpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBfY2h1bmszO1xuICAgICAgICAgICAgY2h1bmsudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzQmxvY2tlZENodW5rID09PSBfY2h1bmszICYmIChwcmV2aW91c0Jsb2NrZWRDaHVuayA9IG51bGwpO1xuICAgICAgICAgICAgICByZXNvbHZlTW9kZWxDaHVuayhfY2h1bmszLCBqc29uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcHJldmlvdXNCbG9ja2VkQ2h1bmspIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBibG9ja2VkQ2h1bmsgPSBwcmV2aW91c0Jsb2NrZWRDaHVuaztcbiAgICAgICAgICAgIHByZXZpb3VzQmxvY2tlZENodW5rID0gbnVsbDtcbiAgICAgICAgICAgIGJsb2NrZWRDaHVuay50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChudWxsID09PSBwcmV2aW91c0Jsb2NrZWRDaHVuaykgY29udHJvbGxlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYmxvY2tlZENodW5rID0gcHJldmlvdXNCbG9ja2VkQ2h1bms7XG4gICAgICAgICAgICBwcmV2aW91c0Jsb2NrZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICBibG9ja2VkQ2h1bmsudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzeW5jSXRlcmF0b3IoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlSXRlcmF0b3IobmV4dCkge1xuICAgICAgbmV4dCA9IHsgbmV4dDogbmV4dCB9O1xuICAgICAgbmV4dFtBU1lOQ19JVEVSQVRPUl0gPSBhc3luY0l0ZXJhdG9yO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0QXN5bmNJdGVyYWJsZShyZXNwb25zZSwgaWQsIGl0ZXJhdG9yKSB7XG4gICAgICB2YXIgYnVmZmVyID0gW10sXG4gICAgICAgIGNsb3NlZCA9ICExLFxuICAgICAgICBuZXh0V3JpdGVJbmRleCA9IDAsXG4gICAgICAgIGl0ZXJhYmxlID0gX2RlZmluZVByb3BlcnR5KHt9LCBBU1lOQ19JVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBuZXh0UmVhZEluZGV4ID0gMDtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3IoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gYXJnKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlZhbHVlcyBjYW5ub3QgYmUgcGFzc2VkIHRvIG5leHQoKSBvZiBBc3luY0l0ZXJhYmxlcyBwYXNzZWQgdG8gQ2xpZW50IENvbXBvbmVudHMuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChuZXh0UmVhZEluZGV4ID09PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmIChjbG9zZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFjdFByb21pc2UoXG4gICAgICAgICAgICAgICAgICBcImZ1bGZpbGxlZFwiLFxuICAgICAgICAgICAgICAgICAgeyBkb25lOiAhMCwgdmFsdWU6IHZvaWQgMCB9LFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnVmZmVyW25leHRSZWFkSW5kZXhdID0gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBidWZmZXJbbmV4dFJlYWRJbmRleCsrXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICByZXNvbHZlU3RyZWFtKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgaWQsXG4gICAgICAgIGl0ZXJhdG9yID8gaXRlcmFibGVbQVNZTkNfSVRFUkFUT1JdKCkgOiBpdGVyYWJsZSxcbiAgICAgICAge1xuICAgICAgICAgIGVucXVldWVWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobmV4dFdyaXRlSW5kZXggPT09IGJ1ZmZlci5sZW5ndGgpXG4gICAgICAgICAgICAgIGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0gPSBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICAgICAgICAgIFwiZnVsZmlsbGVkXCIsXG4gICAgICAgICAgICAgICAgeyBkb25lOiAhMSwgdmFsdWU6IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBjaHVuayA9IGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0sXG4gICAgICAgICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycyA9IGNodW5rLnZhbHVlLFxuICAgICAgICAgICAgICAgIHJlamVjdExpc3RlbmVycyA9IGNodW5rLnJlYXNvbjtcbiAgICAgICAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICAgICAgY2h1bmsudmFsdWUgPSB7IGRvbmU6ICExLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcmVzb2x2ZUxpc3RlbmVycyAmJlxuICAgICAgICAgICAgICAgIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoXG4gICAgICAgICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVMaXN0ZW5lcnMsXG4gICAgICAgICAgICAgICAgICByZWplY3RMaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXgrKztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVucXVldWVNb2RlbDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBuZXh0V3JpdGVJbmRleCA9PT0gYnVmZmVyLmxlbmd0aFxuICAgICAgICAgICAgICA/IChidWZmZXJbbmV4dFdyaXRlSW5kZXhdID0gY3JlYXRlUmVzb2x2ZWRJdGVyYXRvclJlc3VsdENodW5rKFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgOiByZXNvbHZlSXRlcmF0b3JSZXN1bHRDaHVuayhidWZmZXJbbmV4dFdyaXRlSW5kZXhdLCB2YWx1ZSwgITEpO1xuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXgrKztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNsb3NlZCA9ICEwO1xuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXggPT09IGJ1ZmZlci5sZW5ndGhcbiAgICAgICAgICAgICAgPyAoYnVmZmVyW25leHRXcml0ZUluZGV4XSA9IGNyZWF0ZVJlc29sdmVkSXRlcmF0b3JSZXN1bHRDaHVuayhcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogcmVzb2x2ZUl0ZXJhdG9yUmVzdWx0Q2h1bmsoYnVmZmVyW25leHRXcml0ZUluZGV4XSwgdmFsdWUsICEwKTtcbiAgICAgICAgICAgIGZvciAobmV4dFdyaXRlSW5kZXgrKzsgbmV4dFdyaXRlSW5kZXggPCBidWZmZXIubGVuZ3RoOyApXG4gICAgICAgICAgICAgIHJlc29sdmVJdGVyYXRvclJlc3VsdENodW5rKFxuICAgICAgICAgICAgICAgIGJ1ZmZlcltuZXh0V3JpdGVJbmRleCsrXSxcbiAgICAgICAgICAgICAgICAnXCIkdW5kZWZpbmVkXCInLFxuICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjbG9zZWQgPSAhMDtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIG5leHRXcml0ZUluZGV4ID09PSBidWZmZXIubGVuZ3RoICYmXG4gICAgICAgICAgICAgIChidWZmZXJbbmV4dFdyaXRlSW5kZXhdID0gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgIG5leHRXcml0ZUluZGV4IDwgYnVmZmVyLmxlbmd0aDtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0cmlnZ2VyRXJyb3JPbkNodW5rKGJ1ZmZlcltuZXh0V3JpdGVJbmRleCsrXSwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RvcFN0cmVhbShyZXNwb25zZSwgaWQsIHJvdykge1xuICAgICAgKHJlc3BvbnNlID0gcmVzcG9uc2UuX2NodW5rcy5nZXQoaWQpKSAmJlxuICAgICAgICBcImZ1bGZpbGxlZFwiID09PSByZXNwb25zZS5zdGF0dXMgJiZcbiAgICAgICAgcmVzcG9uc2UucmVhc29uLmNsb3NlKFwiXCIgPT09IHJvdyA/ICdcIiR1bmRlZmluZWRcIicgOiByb3cpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRXJyb3JEZXYocmVzcG9uc2UsIGVycm9ySW5mbykge1xuICAgICAgdmFyIGVudiA9IGVycm9ySW5mby5lbnY7XG4gICAgICBlcnJvckluZm8gPSBidWlsZEZha2VDYWxsU3RhY2soXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBlcnJvckluZm8uc3RhY2ssXG4gICAgICAgIGVudixcbiAgICAgICAgRXJyb3IuYmluZChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGVycm9ySW5mby5tZXNzYWdlIHx8XG4gICAgICAgICAgICBcIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBTZXJ2ZXIgQ29tcG9uZW50cyByZW5kZXIgYnV0IG5vIG1lc3NhZ2Ugd2FzIHByb3ZpZGVkXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJlc3BvbnNlID0gZ2V0Um9vdFRhc2socmVzcG9uc2UsIGVudik7XG4gICAgICByZXNwb25zZSA9IG51bGwgIT0gcmVzcG9uc2UgPyByZXNwb25zZS5ydW4oZXJyb3JJbmZvKSA6IGVycm9ySW5mbygpO1xuICAgICAgcmVzcG9uc2UuZW52aXJvbm1lbnROYW1lID0gZW52O1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlSGludChyZXNwb25zZSwgY29kZSwgbW9kZWwpIHtcbiAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShtb2RlbCwgcmVzcG9uc2UuX2Zyb21KU09OKTtcbiAgICAgIG1vZGVsID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZDtcbiAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIFwiRFwiOlxuICAgICAgICAgIG1vZGVsLkQocmVzcG9uc2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ1wiOlxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZXNwb25zZVxuICAgICAgICAgICAgPyBtb2RlbC5DKHJlc3BvbnNlKVxuICAgICAgICAgICAgOiBtb2RlbC5DKHJlc3BvbnNlWzBdLCByZXNwb25zZVsxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgY29kZSA9IHJlc3BvbnNlWzBdO1xuICAgICAgICAgIHZhciBhcyA9IHJlc3BvbnNlWzFdO1xuICAgICAgICAgIDMgPT09IHJlc3BvbnNlLmxlbmd0aFxuICAgICAgICAgICAgPyBtb2RlbC5MKGNvZGUsIGFzLCByZXNwb25zZVsyXSlcbiAgICAgICAgICAgIDogbW9kZWwuTChjb2RlLCBhcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlc3BvbnNlXG4gICAgICAgICAgICA/IG1vZGVsLm0ocmVzcG9uc2UpXG4gICAgICAgICAgICA6IG1vZGVsLm0ocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuWChyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuWChyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZXNwb25zZVxuICAgICAgICAgICAgPyBtb2RlbC5TKHJlc3BvbnNlKVxuICAgICAgICAgICAgOiBtb2RlbC5TKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlWzBdLFxuICAgICAgICAgICAgICAgIDAgPT09IHJlc3BvbnNlWzFdID8gdm9pZCAwIDogcmVzcG9uc2VbMV0sXG4gICAgICAgICAgICAgICAgMyA9PT0gcmVzcG9uc2UubGVuZ3RoID8gcmVzcG9uc2VbMl0gOiB2b2lkIDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuTShyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuTShyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGYWtlRnVuY3Rpb24oXG4gICAgICBuYW1lLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2VNYXAsXG4gICAgICBsaW5lLFxuICAgICAgY29sLFxuICAgICAgZW52aXJvbm1lbnROYW1lXG4gICAgKSB7XG4gICAgICBuYW1lIHx8IChuYW1lID0gXCI8YW5vbnltb3VzPlwiKTtcbiAgICAgIHZhciBlbmNvZGVkTmFtZSA9IEpTT04uc3RyaW5naWZ5KG5hbWUpO1xuICAgICAgMSA+PSBsaW5lXG4gICAgICAgID8gKChsaW5lID0gZW5jb2RlZE5hbWUubGVuZ3RoICsgNyksXG4gICAgICAgICAgKGNvbCA9XG4gICAgICAgICAgICBcIih7XCIgK1xuICAgICAgICAgICAgZW5jb2RlZE5hbWUgK1xuICAgICAgICAgICAgXCI6Xz0+XCIgK1xuICAgICAgICAgICAgXCIgXCIucmVwZWF0KGNvbCA8IGxpbmUgPyAwIDogY29sIC0gbGluZSkgK1xuICAgICAgICAgICAgXCJfKCl9KVxcbi8qIFRoaXMgbW9kdWxlIHdhcyByZW5kZXJlZCBieSBhIFNlcnZlciBDb21wb25lbnQuIFR1cm4gb24gU291cmNlIE1hcHMgdG8gc2VlIHRoZSBzZXJ2ZXIgc291cmNlLiAqL1wiKSlcbiAgICAgICAgOiAoY29sID1cbiAgICAgICAgICAgIFwiLyogVGhpcyBtb2R1bGUgd2FzIHJlbmRlcmVkIGJ5IGEgU2VydmVyIENvbXBvbmVudC4gVHVybiBvbiBTb3VyY2UgTWFwcyB0byBzZWUgdGhlIHNlcnZlciBzb3VyY2UuICovXCIgK1xuICAgICAgICAgICAgXCJcXG5cIi5yZXBlYXQobGluZSAtIDIpICtcbiAgICAgICAgICAgIFwiKHtcIiArXG4gICAgICAgICAgICBlbmNvZGVkTmFtZSArXG4gICAgICAgICAgICBcIjpfPT5cXG5cIiArXG4gICAgICAgICAgICBcIiBcIi5yZXBlYXQoMSA+IGNvbCA/IDAgOiBjb2wgLSAxKSArXG4gICAgICAgICAgICBcIl8oKX0pXCIpO1xuICAgICAgZmlsZW5hbWUuc3RhcnRzV2l0aChcIi9cIikgJiYgKGZpbGVuYW1lID0gXCJmaWxlOi8vXCIgKyBmaWxlbmFtZSk7XG4gICAgICBzb3VyY2VNYXBcbiAgICAgICAgPyAoKGNvbCArPVxuICAgICAgICAgICAgXCJcXG4vLyMgc291cmNlVVJMPXJzYzovL1JlYWN0L1wiICtcbiAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnZpcm9ubWVudE5hbWUpICtcbiAgICAgICAgICAgIFwiL1wiICtcbiAgICAgICAgICAgIGVuY29kZVVSSShmaWxlbmFtZSkgK1xuICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgZmFrZUZ1bmN0aW9uSWR4KyspLFxuICAgICAgICAgIChjb2wgKz0gXCJcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1cIiArIHNvdXJjZU1hcCkpXG4gICAgICAgIDogKGNvbCA9IGZpbGVuYW1lXG4gICAgICAgICAgICA/IGNvbCArIChcIlxcbi8vIyBzb3VyY2VVUkw9XCIgKyBlbmNvZGVVUkkoZmlsZW5hbWUpKVxuICAgICAgICAgICAgOiBjb2wgKyBcIlxcbi8vIyBzb3VyY2VVUkw9PGFub255bW91cz5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZm4gPSAoMCwgZXZhbCkoY29sKVtuYW1lXTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgZm4gPSBmdW5jdGlvbiAoXykge1xuICAgICAgICAgIHJldHVybiBfKCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkRmFrZUNhbGxTdGFjayhyZXNwb25zZSwgc3RhY2ssIGVudmlyb25tZW50TmFtZSwgaW5uZXJDYWxsKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmcmFtZSA9IHN0YWNrW2ldLFxuICAgICAgICAgIGZyYW1lS2V5ID0gZnJhbWUuam9pbihcIi1cIikgKyBcIi1cIiArIGVudmlyb25tZW50TmFtZSxcbiAgICAgICAgICBmbiA9IGZha2VGdW5jdGlvbkNhY2hlLmdldChmcmFtZUtleSk7XG4gICAgICAgIGlmICh2b2lkIDAgPT09IGZuKSB7XG4gICAgICAgICAgZm4gPSBmcmFtZVswXTtcbiAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBmcmFtZVsxXSxcbiAgICAgICAgICAgIGxpbmUgPSBmcmFtZVsyXTtcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lWzNdO1xuICAgICAgICAgIHZhciBmaW5kU291cmNlTWFwVVJMID0gcmVzcG9uc2UuX2RlYnVnRmluZFNvdXJjZU1hcFVSTDtcbiAgICAgICAgICBmaW5kU291cmNlTWFwVVJMID0gZmluZFNvdXJjZU1hcFVSTFxuICAgICAgICAgICAgPyBmaW5kU291cmNlTWFwVVJMKGZpbGVuYW1lLCBlbnZpcm9ubWVudE5hbWUpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgZm4gPSBjcmVhdGVGYWtlRnVuY3Rpb24oXG4gICAgICAgICAgICBmbixcbiAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICBmcmFtZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50TmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZmFrZUZ1bmN0aW9uQ2FjaGUuc2V0KGZyYW1lS2V5LCBmbik7XG4gICAgICAgIH1cbiAgICAgICAgaW5uZXJDYWxsID0gZm4uYmluZChudWxsLCBpbm5lckNhbGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlubmVyQ2FsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Um9vdFRhc2socmVzcG9uc2UsIGNoaWxkRW52aXJvbm1lbnROYW1lKSB7XG4gICAgICB2YXIgcm9vdFRhc2sgPSByZXNwb25zZS5fZGVidWdSb290VGFzaztcbiAgICAgIHJldHVybiByb290VGFza1xuICAgICAgICA/IHJlc3BvbnNlLl9yb290RW52aXJvbm1lbnROYW1lICE9PSBjaGlsZEVudmlyb25tZW50TmFtZVxuICAgICAgICAgID8gKChyZXNwb25zZSA9IGNvbnNvbGUuY3JlYXRlVGFzay5iaW5kKFxuICAgICAgICAgICAgICBjb25zb2xlLFxuICAgICAgICAgICAgICAnXCJ1c2UgJyArIGNoaWxkRW52aXJvbm1lbnROYW1lLnRvTG93ZXJDYXNlKCkgKyAnXCInXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHJvb3RUYXNrLnJ1bihyZXNwb25zZSkpXG4gICAgICAgICAgOiByb290VGFza1xuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZha2VKU1hDYWxsU2l0ZSgpIHtcbiAgICAgIHJldHVybiBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUZha2VTdGFjayhyZXNwb25zZSwgZGVidWdJbmZvKSB7XG4gICAgICB2b2lkIDAgPT09IGRlYnVnSW5mby5kZWJ1Z1N0YWNrICYmXG4gICAgICAgIChudWxsICE9IGRlYnVnSW5mby5zdGFjayAmJlxuICAgICAgICAgIChkZWJ1Z0luZm8uZGVidWdTdGFjayA9IGNyZWF0ZUZha2VKU1hDYWxsU3RhY2tJbkRFVihcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgZGVidWdJbmZvLnN0YWNrLFxuICAgICAgICAgICAgbnVsbCA9PSBkZWJ1Z0luZm8uZW52ID8gXCJcIiA6IGRlYnVnSW5mby5lbnZcbiAgICAgICAgICApKSxcbiAgICAgICAgbnVsbCAhPSBkZWJ1Z0luZm8ub3duZXIgJiZcbiAgICAgICAgICBpbml0aWFsaXplRmFrZVN0YWNrKHJlc3BvbnNlLCBkZWJ1Z0luZm8ub3duZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURlYnVnSW5mbyhyZXNwb25zZSwgaWQsIGRlYnVnSW5mbykge1xuICAgICAgbnVsbCA9PT0gZGVidWdJbmZvLm93bmVyICYmIG51bGwgIT0gcmVzcG9uc2UuX2RlYnVnUm9vdE93bmVyXG4gICAgICAgID8gKChkZWJ1Z0luZm8ub3duZXIgPSByZXNwb25zZS5fZGVidWdSb290T3duZXIpLFxuICAgICAgICAgIChkZWJ1Z0luZm8uZGVidWdTdGFjayA9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RTdGFjaykpXG4gICAgICAgIDogaW5pdGlhbGl6ZUZha2VTdGFjayhyZXNwb25zZSwgZGVidWdJbmZvKTtcbiAgICAgIHJlc3BvbnNlID0gZ2V0Q2h1bmsocmVzcG9uc2UsIGlkKTtcbiAgICAgIChyZXNwb25zZS5fZGVidWdJbmZvIHx8IChyZXNwb25zZS5fZGVidWdJbmZvID0gW10pKS5wdXNoKGRlYnVnSW5mbyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRTdGFja0luREVWKCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVDb25zb2xlRW50cnkocmVzcG9uc2UsIHZhbHVlKSB7XG4gICAgICBpZiAocmVzcG9uc2UuX3JlcGxheUNvbnNvbGUpIHtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKHZhbHVlLCByZXNwb25zZS5fZnJvbUpTT04pO1xuICAgICAgICB2YWx1ZSA9IHBheWxvYWRbMF07XG4gICAgICAgIHZhciBzdGFja1RyYWNlID0gcGF5bG9hZFsxXSxcbiAgICAgICAgICBvd25lciA9IHBheWxvYWRbMl0sXG4gICAgICAgICAgZW52ID0gcGF5bG9hZFszXTtcbiAgICAgICAgcGF5bG9hZCA9IHBheWxvYWQuc2xpY2UoNCk7XG4gICAgICAgIHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrSW5ERVYoXG4gICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgc3RhY2tUcmFjZSxcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZUJ1ZmZlcihidWZmZXIsIGxhc3RDaHVuaykge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGwgPSBidWZmZXIubGVuZ3RoLCBieXRlTGVuZ3RoID0gbGFzdENodW5rLmxlbmd0aCwgaSA9IDA7XG4gICAgICAgIGkgPCBsO1xuICAgICAgICBpKytcbiAgICAgIClcbiAgICAgICAgYnl0ZUxlbmd0aCArPSBidWZmZXJbaV0uYnl0ZUxlbmd0aDtcbiAgICAgIGJ5dGVMZW5ndGggPSBuZXcgVWludDhBcnJheShieXRlTGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIF9pMiA9IChpID0gMCk7IF9pMiA8IGw7IF9pMisrKSB7XG4gICAgICAgIHZhciBjaHVuayA9IGJ1ZmZlcltfaTJdO1xuICAgICAgICBieXRlTGVuZ3RoLnNldChjaHVuaywgaSk7XG4gICAgICAgIGkgKz0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGJ5dGVMZW5ndGguc2V0KGxhc3RDaHVuaywgaSk7XG4gICAgICByZXR1cm4gYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVR5cGVkQXJyYXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGlkLFxuICAgICAgYnVmZmVyLFxuICAgICAgbGFzdENodW5rLFxuICAgICAgY29uc3RydWN0b3IsXG4gICAgICBieXRlc1BlckVsZW1lbnRcbiAgICApIHtcbiAgICAgIGJ1ZmZlciA9XG4gICAgICAgIDAgPT09IGJ1ZmZlci5sZW5ndGggJiYgMCA9PT0gbGFzdENodW5rLmJ5dGVPZmZzZXQgJSBieXRlc1BlckVsZW1lbnRcbiAgICAgICAgICA/IGxhc3RDaHVua1xuICAgICAgICAgIDogbWVyZ2VCdWZmZXIoYnVmZmVyLCBsYXN0Q2h1bmspO1xuICAgICAgY29uc3RydWN0b3IgPSBuZXcgY29uc3RydWN0b3IoXG4gICAgICAgIGJ1ZmZlci5idWZmZXIsXG4gICAgICAgIGJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICBidWZmZXIuYnl0ZUxlbmd0aCAvIGJ5dGVzUGVyRWxlbWVudFxuICAgICAgKTtcbiAgICAgIHJlc29sdmVCdWZmZXIocmVzcG9uc2UsIGlkLCBjb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NGdWxsQmluYXJ5Um93KHJlc3BvbnNlLCBpZCwgdGFnLCBidWZmZXIsIGNodW5rKSB7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHJlc29sdmVCdWZmZXIocmVzcG9uc2UsIGlkLCBtZXJnZUJ1ZmZlcihidWZmZXIsIGNodW5rKS5idWZmZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEludDhBcnJheSwgMSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICByZXNvbHZlQnVmZmVyKFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIDAgPT09IGJ1ZmZlci5sZW5ndGggPyBjaHVuayA6IG1lcmdlQnVmZmVyKGJ1ZmZlciwgY2h1bmspXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBVaW50OENsYW1wZWRBcnJheSwgMSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgSW50MTZBcnJheSwgMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIFVpbnQxNkFycmF5LCAyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBJbnQzMkFycmF5LCA0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgVWludDMyQXJyYXksIDQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEZsb2F0MzJBcnJheSwgNCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDEwMzpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEZsb2F0NjRBcnJheSwgOCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgQmlnSW50NjRBcnJheSwgOCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEJpZ1VpbnQ2NEFycmF5LCA4KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgODY6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBEYXRhVmlldywgMSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHN0cmluZ0RlY29kZXIgPSByZXNwb25zZS5fc3RyaW5nRGVjb2Rlciwgcm93ID0gXCJcIiwgaSA9IDA7XG4gICAgICAgIGkgPCBidWZmZXIubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgIClcbiAgICAgICAgcm93ICs9IHN0cmluZ0RlY29kZXIuZGVjb2RlKGJ1ZmZlcltpXSwgZGVjb2Rlck9wdGlvbnMpO1xuICAgICAgcm93ICs9IHN0cmluZ0RlY29kZXIuZGVjb2RlKGNodW5rKTtcbiAgICAgIHByb2Nlc3NGdWxsU3RyaW5nUm93KHJlc3BvbnNlLCBpZCwgdGFnLCByb3cpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRnVsbFN0cmluZ1JvdyhyZXNwb25zZSwgaWQsIHRhZywgcm93KSB7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIDczOlxuICAgICAgICAgIHJlc29sdmVNb2R1bGUocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgIHJlc29sdmVIaW50KHJlc3BvbnNlLCByb3dbMF0sIHJvdy5zbGljZSgxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgcm93ID0gSlNPTi5wYXJzZShyb3cpO1xuICAgICAgICAgIHRhZyA9IHJlc29sdmVFcnJvckRldihyZXNwb25zZSwgcm93KTtcbiAgICAgICAgICB0YWcuZGlnZXN0ID0gcm93LmRpZ2VzdDtcbiAgICAgICAgICByb3cgPSByZXNwb25zZS5fY2h1bmtzO1xuICAgICAgICAgIHZhciBjaHVuayA9IHJvdy5nZXQoaWQpO1xuICAgICAgICAgIGNodW5rXG4gICAgICAgICAgICA/IHRyaWdnZXJFcnJvck9uQ2h1bmsoY2h1bmssIHRhZylcbiAgICAgICAgICAgIDogcm93LnNldChpZCwgbmV3IFJlYWN0UHJvbWlzZShcInJlamVjdGVkXCIsIG51bGwsIHRhZywgcmVzcG9uc2UpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICByZXNvbHZlVGV4dChyZXNwb25zZSwgaWQsIHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgdGFnID0gbmV3IFJlYWN0UHJvbWlzZShcInJlc29sdmVkX21vZGVsXCIsIHJvdywgbnVsbCwgcmVzcG9uc2UpO1xuICAgICAgICAgIGluaXRpYWxpemVNb2RlbENodW5rKHRhZyk7XG4gICAgICAgICAgXCJmdWxmaWxsZWRcIiA9PT0gdGFnLnN0YXR1c1xuICAgICAgICAgICAgPyByZXNvbHZlRGVidWdJbmZvKHJlc3BvbnNlLCBpZCwgdGFnLnZhbHVlKVxuICAgICAgICAgICAgOiB0YWcudGhlbihcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVEZWJ1Z0luZm8ocmVzcG9uc2UsIGlkLCB2KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODc6XG4gICAgICAgICAgcmVzb2x2ZUNvbnNvbGVFbnRyeShyZXNwb25zZSwgcm93KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MjpcbiAgICAgICAgICBzdGFydFJlYWRhYmxlU3RyZWFtKHJlc3BvbnNlLCBpZCwgdm9pZCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgc3RhcnRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSwgaWQsIFwiYnl0ZXNcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgc3RhcnRBc3luY0l0ZXJhYmxlKHJlc3BvbnNlLCBpZCwgITEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyMDpcbiAgICAgICAgICBzdGFydEFzeW5jSXRlcmFibGUocmVzcG9uc2UsIGlkLCAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgc3RvcFN0cmVhbShyZXNwb25zZSwgaWQsIHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzb2x2ZU1vZGVsKHJlc3BvbnNlLCBpZCwgcm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUpTT05DYWxsYmFjayhyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgcmV0dXJuIHBhcnNlTW9kZWxTdHJpbmcocmVzcG9uc2UsIHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmIG51bGwgIT09IHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlWzBdID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoa2V5ID0gdmFsdWVbNF0pLFxuICAgICAgICAgICAgICAodmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlWzJdLFxuICAgICAgICAgICAgICAgIHByb3BzOiB2YWx1ZVszXSxcbiAgICAgICAgICAgICAgICBfb3duZXI6IG51bGwgPT09IGtleSA/IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RPd25lciA6IGtleVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBcInJlZlwiLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgZ2V0OiBudWxsUmVmR2V0dGVyXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAodmFsdWUuX3N0b3JlID0ge30pLFxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUuX3N0b3JlLCBcInZhbGlkYXRlZFwiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDFcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5pdGlhbGl6aW5nSGFuZGxlcilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IGluaXRpYWxpemluZ0hhbmRsZXI7XG4gICAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIgPSBoYW5kbGVyLnBhcmVudDtcbiAgICAgICAgICAgICAgaGFuZGxlci5lcnJvcmVkXG4gICAgICAgICAgICAgICAgPyAoKGtleSA9IG5ldyBSZWFjdFByb21pc2UoXG4gICAgICAgICAgICAgICAgICAgIFwicmVqZWN0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKHZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodmFsdWUudHlwZSkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IHZhbHVlLl9vd25lclxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAoa2V5Ll9kZWJ1Z0luZm8gPSBbdmFsdWVdKSxcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSA9IGNyZWF0ZUxhenlDaHVua1dyYXBwZXIoa2V5KSkpXG4gICAgICAgICAgICAgICAgOiAwIDwgaGFuZGxlci5kZXBzICYmXG4gICAgICAgICAgICAgICAgICAoKGtleSA9IG5ldyBSZWFjdFByb21pc2UoXCJibG9ja2VkXCIsIG51bGwsIG51bGwsIHJlc3BvbnNlKSksXG4gICAgICAgICAgICAgICAgICAoaGFuZGxlci52YWx1ZSA9IHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgIChoYW5kbGVyLmNodW5rID0ga2V5KSxcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSA9IE9iamVjdC5mcmVlemUuYmluZChPYmplY3QsIHZhbHVlLnByb3BzKSksXG4gICAgICAgICAgICAgICAgICBrZXkudGhlbih2YWx1ZSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgICAgKHZhbHVlID0gY3JlYXRlTGF6eUNodW5rV3JhcHBlcihrZXkpKSk7XG4gICAgICAgICAgICB9IGVsc2UgT2JqZWN0LmZyZWV6ZSh2YWx1ZS5wcm9wcyk7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vU2VydmVyQ2FsbCgpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIlNlcnZlciBGdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBkdXJpbmcgaW5pdGlhbCByZW5kZXIuIFRoaXMgd291bGQgY3JlYXRlIGEgZmV0Y2ggd2F0ZXJmYWxsLiBUcnkgdG8gdXNlIGEgU2VydmVyIENvbXBvbmVudCB0byBwYXNzIGRhdGEgdG8gQ2xpZW50IENvbXBvbmVudHMgaW5zdGVhZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2VGcm9tT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlSW5zdGFuY2UoXG4gICAgICAgIG9wdGlvbnMuc2VydmVyQ29uc3VtZXJNYW5pZmVzdC5tb2R1bGVNYXAsXG4gICAgICAgIG9wdGlvbnMuc2VydmVyQ29uc3VtZXJNYW5pZmVzdC5zZXJ2ZXJNb2R1bGVNYXAsXG4gICAgICAgIG9wdGlvbnMuc2VydmVyQ29uc3VtZXJNYW5pZmVzdC5tb2R1bGVMb2FkaW5nLFxuICAgICAgICBub1NlcnZlckNhbGwsXG4gICAgICAgIG9wdGlvbnMuZW5jb2RlRm9ybUFjdGlvbixcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwLFxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMudGVtcG9yYXJ5UmVmZXJlbmNlc1xuICAgICAgICAgID8gb3B0aW9ucy50ZW1wb3JhcnlSZWZlcmVuY2VzXG4gICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5maW5kU291cmNlTWFwVVJMID8gb3B0aW9ucy5maW5kU291cmNlTWFwVVJMIDogdm9pZCAwLFxuICAgICAgICBvcHRpb25zID8gITAgPT09IG9wdGlvbnMucmVwbGF5Q29uc29sZUxvZ3MgOiAhMSxcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmVudmlyb25tZW50TmFtZSA/IG9wdGlvbnMuZW52aXJvbm1lbnROYW1lIDogdm9pZCAwXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKHJlc3BvbnNlLCBzdHJlYW0pIHtcbiAgICAgIGZ1bmN0aW9uIHByb2dyZXNzKF9yZWYpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZTtcbiAgICAgICAgaWYgKF9yZWYuZG9uZSkgcmVwb3J0R2xvYmFsRXJyb3IocmVzcG9uc2UsIEVycm9yKFwiQ29ubmVjdGlvbiBjbG9zZWQuXCIpKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgcm93U3RhdGUgPSByZXNwb25zZS5fcm93U3RhdGU7XG4gICAgICAgICAgX3JlZiA9IHJlc3BvbnNlLl9yb3dJRDtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgdmFyIHJvd1RhZyA9IHJlc3BvbnNlLl9yb3dUYWcsXG4gICAgICAgICAgICAgIHJvd0xlbmd0aCA9IHJlc3BvbnNlLl9yb3dMZW5ndGgsXG4gICAgICAgICAgICAgIGJ1ZmZlciA9IHJlc3BvbnNlLl9idWZmZXIsXG4gICAgICAgICAgICAgIGNodW5rTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgaSA8IGNodW5rTGVuZ3RoO1xuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgbGFzdElkeCA9IC0xO1xuICAgICAgICAgICAgc3dpdGNoIChyb3dTdGF0ZSkge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgbGFzdElkeCA9IHZhbHVlW2krK107XG4gICAgICAgICAgICAgICAgNTggPT09IGxhc3RJZHhcbiAgICAgICAgICAgICAgICAgID8gKHJvd1N0YXRlID0gMSlcbiAgICAgICAgICAgICAgICAgIDogKF9yZWYgPVxuICAgICAgICAgICAgICAgICAgICAgIChfcmVmIDw8IDQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAoOTYgPCBsYXN0SWR4ID8gbGFzdElkeCAtIDg3IDogbGFzdElkeCAtIDQ4KSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByb3dTdGF0ZSA9IHZhbHVlW2ldO1xuICAgICAgICAgICAgICAgIDg0ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDY1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDc5ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDExMSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICA4NSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICA4MyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAxMTUgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgNzYgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgMTA4ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDcxID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDEwMyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICA3NyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAxMDkgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgODYgPT09IHJvd1N0YXRlXG4gICAgICAgICAgICAgICAgICA/ICgocm93VGFnID0gcm93U3RhdGUpLCAocm93U3RhdGUgPSAyKSwgaSsrKVxuICAgICAgICAgICAgICAgICAgOiAoNjQgPCByb3dTdGF0ZSAmJiA5MSA+IHJvd1N0YXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIDM1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIDExNCA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAxMjAgPT09IHJvd1N0YXRlXG4gICAgICAgICAgICAgICAgICAgID8gKChyb3dUYWcgPSByb3dTdGF0ZSksIChyb3dTdGF0ZSA9IDMpLCBpKyspXG4gICAgICAgICAgICAgICAgICAgIDogKChyb3dUYWcgPSAwKSwgKHJvd1N0YXRlID0gMykpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgbGFzdElkeCA9IHZhbHVlW2krK107XG4gICAgICAgICAgICAgICAgNDQgPT09IGxhc3RJZHhcbiAgICAgICAgICAgICAgICAgID8gKHJvd1N0YXRlID0gNClcbiAgICAgICAgICAgICAgICAgIDogKHJvd0xlbmd0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgKHJvd0xlbmd0aCA8PCA0KSB8XG4gICAgICAgICAgICAgICAgICAgICAgKDk2IDwgbGFzdElkeCA/IGxhc3RJZHggLSA4NyA6IGxhc3RJZHggLSA0OCkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgbGFzdElkeCA9IHZhbHVlLmluZGV4T2YoMTAsIGkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgKGxhc3RJZHggPSBpICsgcm93TGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgIGxhc3RJZHggPiB2YWx1ZS5sZW5ndGggJiYgKGxhc3RJZHggPSAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsdWUuYnl0ZU9mZnNldCArIGk7XG4gICAgICAgICAgICBpZiAoLTEgPCBsYXN0SWR4KVxuICAgICAgICAgICAgICAocm93TGVuZ3RoID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUuYnVmZmVyLCBvZmZzZXQsIGxhc3RJZHggLSBpKSksXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bGxCaW5hcnlSb3cocmVzcG9uc2UsIF9yZWYsIHJvd1RhZywgYnVmZmVyLCByb3dMZW5ndGgpLFxuICAgICAgICAgICAgICAgIChpID0gbGFzdElkeCksXG4gICAgICAgICAgICAgICAgMyA9PT0gcm93U3RhdGUgJiYgaSsrLFxuICAgICAgICAgICAgICAgIChyb3dMZW5ndGggPSBfcmVmID0gcm93VGFnID0gcm93U3RhdGUgPSAwKSxcbiAgICAgICAgICAgICAgICAoYnVmZmVyLmxlbmd0aCA9IDApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgICAgICAgICAgdmFsdWUuYnVmZmVyLFxuICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ieXRlTGVuZ3RoIC0gaVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgIHJvd0xlbmd0aCAtPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzcG9uc2UuX3Jvd1N0YXRlID0gcm93U3RhdGU7XG4gICAgICAgICAgcmVzcG9uc2UuX3Jvd0lEID0gX3JlZjtcbiAgICAgICAgICByZXNwb25zZS5fcm93VGFnID0gcm93VGFnO1xuICAgICAgICAgIHJlc3BvbnNlLl9yb3dMZW5ndGggPSByb3dMZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkKCkudGhlbihwcm9ncmVzcykuY2F0Y2goZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBlcnJvcihlKSB7XG4gICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKHJlc3BvbnNlLCBlKTtcbiAgICAgIH1cbiAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MpLmNhdGNoKGVycm9yKTtcbiAgICB9XG4gICAgdmFyIFJlYWN0RE9NID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKSxcbiAgICAgIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpLFxuICAgICAgZGVjb2Rlck9wdGlvbnMgPSB7IHN0cmVhbTogITAgfSxcbiAgICAgIGJpbmQkMSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLFxuICAgICAgY2h1bmtDYWNoZSA9IG5ldyBNYXAoKSxcbiAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3RET00uX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTtcbiAgICB2YXIgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgICBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBBU1lOQ19JVEVSQVRPUiA9IFN5bWJvbC5hc3luY0l0ZXJhdG9yLFxuICAgICAgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgICBqc3hQcm9wc1BhcmVudHMgPSBuZXcgV2Vha01hcCgpLFxuICAgICAganN4Q2hpbGRyZW5QYXJlbnRzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIENMSUVOVF9SRUZFUkVOQ0VfVEFHID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlLFxuICAgICAga25vd25TZXJ2ZXJSZWZlcmVuY2VzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIGJvdW5kQ2FjaGUgPSBuZXcgV2Vha01hcCgpLFxuICAgICAgZmFrZVNlcnZlckZ1bmN0aW9uSWR4ID0gMCxcbiAgICAgIEZ1bmN0aW9uQmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLFxuICAgICAgQXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSxcbiAgICAgIHY4RnJhbWVSZWdFeHAgPVxuICAgICAgICAvXiB7M30gYXQgKD86KC4rKSBcXCgoLispOihcXGQrKTooXFxkKylcXCl8KD86YXN5bmMgKT8oLispOihcXGQrKTooXFxkKykpJC8sXG4gICAgICBqc2NTcGlkZXJNb25rZXlGcmFtZVJlZ0V4cCA9IC8oPzooLiopQCk/KC4qKTooXFxkKyk6KFxcZCspLyxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKTtcbiAgICBuZXcgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwKSgpO1xuICAgIHZhciBSZWFjdFNoYXJlZEludGVyYWxzU2VydmVyID1cbiAgICAgICAgUmVhY3QuX19TRVJWRVJfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUgfHxcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlcjtcbiAgICBSZWFjdFByb21pc2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQcm9taXNlLnByb3RvdHlwZSk7XG4gICAgUmVhY3RQcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgc3dpdGNoICh0aGlzLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kZWxcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayh0aGlzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZHVsZVwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2R1bGVDaHVuayh0aGlzKTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgIHJlc29sdmUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgIGNhc2UgXCJibG9ja2VkXCI6XG4gICAgICAgICAgcmVzb2x2ZSAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHRoaXMudmFsdWUgJiYgKHRoaXMudmFsdWUgPSBbXSksXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2gocmVzb2x2ZSkpO1xuICAgICAgICAgIHJlamVjdCAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHRoaXMucmVhc29uICYmICh0aGlzLnJlYXNvbiA9IFtdKSxcbiAgICAgICAgICAgIHRoaXMucmVhc29uLnB1c2gocmVqZWN0KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVqZWN0ICYmIHJlamVjdCh0aGlzLnJlYXNvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgaW5pdGlhbGl6aW5nSGFuZGxlciA9IG51bGwsXG4gICAgICBmYWtlRnVuY3Rpb25DYWNoZSA9IG5ldyBNYXAoKSxcbiAgICAgIGZha2VGdW5jdGlvbklkeCA9IDAsXG4gICAgICBjcmVhdGVGYWtlSlNYQ2FsbFN0YWNrID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoXG4gICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgZW52aXJvbm1lbnROYW1lXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBidWlsZEZha2VDYWxsU3RhY2soXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICAgZW52aXJvbm1lbnROYW1lLFxuICAgICAgICAgICAgZmFrZUpTWENhbGxTaXRlXG4gICAgICAgICAgKSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlRmFrZUpTWENhbGxTdGFja0luREVWID0gY3JlYXRlRmFrZUpTWENhbGxTdGFja1tcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIlxuICAgICAgXS5iaW5kKGNyZWF0ZUZha2VKU1hDYWxsU3RhY2spLFxuICAgICAgcmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2sgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChcbiAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICAgIHN0YWNrVHJhY2UsXG4gICAgICAgICAgb3duZXIsXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIGFyZ3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIHByZXZTdGFjayA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjaztcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBnZXRDdXJyZW50U3RhY2tJbkRFVjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgc3dpdGNoIChtZXRob2ROYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpclwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkaXJ4bWxcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ3JvdXBFbmRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBiaW5kJDEuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbWV0aG9kTmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIFtjb25zb2xlXS5jb25jYXQoYXJncylcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhc3NlcnRcIjpcbiAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIG5ld0FyZ3MgPSBhcmdzLnNsaWNlKDApO1xuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3QXJnc1tvZmZzZXRdXG4gICAgICAgICAgICAgICAgPyBuZXdBcmdzLnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBcIlxcdTAwMWJbMG1cXHUwMDFiWzdtJWMlc1xcdTAwMWJbMG0lYyBcIiArIG5ld0FyZ3Nbb2Zmc2V0XSxcbiAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kOiAjZTZlNmU2O2JhY2tncm91bmQ6IGxpZ2h0LWRhcmsocmdiYSgwLDAsMCwwLjEpLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpKTtjb2xvcjogIzAwMDAwMDtjb2xvcjogbGlnaHQtZGFyaygjMDAwMDAwLCAjZmZmZmZmKTtib3JkZXItcmFkaXVzOiAycHhcIixcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgKyBlbnYgKyBcIiBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogbmV3QXJncy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgXCJcXHUwMDFiWzBtXFx1MDAxYls3bSVjJXNcXHUwMDFiWzBtJWMgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZDogI2U2ZTZlNjtiYWNrZ3JvdW5kOiBsaWdodC1kYXJrKHJnYmEoMCwwLDAsMC4xKSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KSk7Y29sb3I6ICMwMDAwMDA7Y29sb3I6IGxpZ2h0LWRhcmsoIzAwMDAwMCwgI2ZmZmZmZik7Ym9yZGVyLXJhZGl1czogMnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICsgZW52ICsgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG5ld0FyZ3MudW5zaGlmdChjb25zb2xlKTtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gYmluZCQxLmFwcGx5KFxuICAgICAgICAgICAgICAgIGNvbnNvbGVbbWV0aG9kTmFtZV0sXG4gICAgICAgICAgICAgICAgbmV3QXJnc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNhbGxTdGFjayA9IGJ1aWxkRmFrZUNhbGxTdGFjayhcbiAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgIHN0YWNrVHJhY2UsXG4gICAgICAgICAgICAgIGVudixcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbnVsbCAhPSBvd25lciAmJiBpbml0aWFsaXplRmFrZVN0YWNrKHJlc3BvbnNlLCBvd25lcik7XG4gICAgICAgICAgICB2YXIgcm9vdFRhc2sgPSBnZXRSb290VGFzayhyZXNwb25zZSwgZW52KTtcbiAgICAgICAgICAgIG51bGwgIT0gcm9vdFRhc2sgPyByb290VGFzay5ydW4oY2FsbFN0YWNrKSA6IGNhbGxTdGFjaygpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBwcmV2U3RhY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2tJbkRFViA9IHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrW1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiXG4gICAgICBdLmJpbmQocmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2spO1xuICAgIGV4cG9ydHMuY3JlYXRlRnJvbUZldGNoID0gZnVuY3Rpb24gKHByb21pc2VGb3JSZXNwb25zZSwgb3B0aW9ucykge1xuICAgICAgdmFyIHJlc3BvbnNlID0gY3JlYXRlUmVzcG9uc2VGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIHByb21pc2VGb3JSZXNwb25zZS50aGVuKFxuICAgICAgICBmdW5jdGlvbiAocikge1xuICAgICAgICAgIHN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0ocmVzcG9uc2UsIHIuYm9keSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IocmVzcG9uc2UsIGUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIGdldENodW5rKHJlc3BvbnNlLCAwKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtID0gZnVuY3Rpb24gKHN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IGNyZWF0ZVJlc3BvbnNlRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKG9wdGlvbnMsIHN0cmVhbSk7XG4gICAgICByZXR1cm4gZ2V0Q2h1bmsob3B0aW9ucywgMCk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZVNlcnZlclJlZmVyZW5jZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZlclJlZmVyZW5jZSQxKGlkLCBub1NlcnZlckNhbGwpO1xuICAgIH07XG4gICAgZXhwb3J0cy5jcmVhdGVUZW1wb3JhcnlSZWZlcmVuY2VTZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy5lbmNvZGVSZXBseSA9IGZ1bmN0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGFib3J0ID0gcHJvY2Vzc1JlcGx5KFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRlbXBvcmFyeVJlZmVyZW5jZXNcbiAgICAgICAgICAgID8gb3B0aW9ucy50ZW1wb3JhcnlSZWZlcmVuY2VzXG4gICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgIHJlamVjdFxuICAgICAgICApO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNpZ25hbCkge1xuICAgICAgICAgIHZhciBzaWduYWwgPSBvcHRpb25zLnNpZ25hbDtcbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIGFib3J0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBhYm9ydChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbIl9kZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJyZXNvbHZlQ2xpZW50UmVmZXJlbmNlIiwiYnVuZGxlckNvbmZpZyIsIm1ldGFkYXRhIiwibW9kdWxlRXhwb3J0cyIsIm5hbWUiLCJFcnJvciIsImxlbmd0aCIsImlkIiwiY2h1bmtzIiwicmVzb2x2ZVNlcnZlclJlZmVyZW5jZSIsInJlc29sdmVkTW9kdWxlRGF0YSIsImlkeCIsImxhc3RJbmRleE9mIiwic2xpY2UiLCJhc3luYyIsInJlcXVpcmVBc3luY01vZHVsZSIsInByb21pc2UiLCJnbG9iYWxUaGlzIiwiX19uZXh0X3JlcXVpcmVfXyIsInRoZW4iLCJzdGF0dXMiLCJyZWFzb24iLCJpZ25vcmVSZWplY3QiLCJwcmVsb2FkTW9kdWxlIiwicHJvbWlzZXMiLCJpIiwiY2h1bmtJZCIsImVudHJ5IiwiY2h1bmtDYWNoZSIsImdldCIsIl9fd2VicGFja19jaHVua19sb2FkX18iLCJwdXNoIiwicmVzb2x2ZSIsInNldCIsImJpbmQiLCJQcm9taXNlIiwiYWxsIiwicmVxdWlyZU1vZHVsZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicHJlcGFyZURlc3RpbmF0aW9uV2l0aENodW5rcyIsIm1vZHVsZUxvYWRpbmciLCJub25jZSRqc2NvbXAkMCIsIm5vbmNlIiwiSlNDb21waWxlcl90ZW1wX2NvbnN0IiwiUmVhY3RET01TaGFyZWRJbnRlcm5hbHMiLCJkIiwiSlNDb21waWxlcl90ZW1wX2NvbnN0JGpzY29tcCQwIiwiWCIsIkpTQ29tcGlsZXJfdGVtcF9jb25zdCRqc2NvbXAkMSIsInByZWZpeCIsIkpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCIsImNyb3NzT3JpZ2luIiwiY2FsbCIsImdldEl0ZXJhdG9yRm4iLCJtYXliZUl0ZXJhYmxlIiwiTUFZQkVfSVRFUkFUT1JfU1lNQk9MIiwiaXNPYmplY3RQcm90b3R5cGUiLCJvYmplY3QiLCJPYmplY3RQcm90b3R5cGUiLCJwcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldE93blByb3BlcnR5TmFtZXMiLCJpc1NpbXBsZU9iamVjdCIsIm5hbWVzIiwiZGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm9iamVjdE5hbWUiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJtIiwicDAiLCJkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZSIsImVuY29kZWRLZXkiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZSIsImlzQXJyYXlJbXBsIiwiJCR0eXBlb2YiLCJDTElFTlRfUkVGRVJFTkNFX1RBRyIsImRpc3BsYXlOYW1lIiwiU3RyaW5nIiwiZGVzY3JpYmVFbGVtZW50VHlwZSIsInR5cGUiLCJSRUFDVF9TVVNQRU5TRV9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIiwiUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSIsInJlbmRlciIsIlJFQUNUX01FTU9fVFlQRSIsIlJFQUNUX0xBWllfVFlQRSIsInBheWxvYWQiLCJfcGF5bG9hZCIsIl9pbml0IiwieCIsImRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlIiwib2JqZWN0T3JBcnJheSIsImV4cGFuZGVkTmFtZSIsIm9iaktpbmQiLCJzdGFydCIsImpzeENoaWxkcmVuUGFyZW50cyIsImhhcyIsIlJFQUNUX0VMRU1FTlRfVFlQRSIsImpzeFByb3BzUGFyZW50cyIsImtleXMiLCJfdmFsdWUyIiwiX3N1YnN0cjIiLCJyZXBlYXQiLCJzZXJpYWxpemVOdW1iZXIiLCJudW1iZXIiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIkluZmluaXR5IiwicHJvY2Vzc1JlcGx5Iiwicm9vdCIsImZvcm1GaWVsZFByZWZpeCIsInRlbXBvcmFyeVJlZmVyZW5jZXMiLCJyZWplY3QiLCJzZXJpYWxpemVUeXBlZEFycmF5IiwidGFnIiwidHlwZWRBcnJheSIsIkJsb2IiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImJ5dGVMZW5ndGgiLCJibG9iSWQiLCJuZXh0UGFydElkIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInNlcmlhbGl6ZUJpbmFyeVJlYWRlciIsInJlYWRlciIsInByb2dyZXNzIiwiZG9uZSIsImRhdGEiLCJzdHJlYW1JZCIsInBlbmRpbmdQYXJ0cyIsInJlYWQiLCJzZXJpYWxpemVSZWFkZXIiLCJwYXJ0SlNPTiIsInJlc29sdmVUb0pTT04iLCJzZXJpYWxpemVSZWFkYWJsZVN0cmVhbSIsInN0cmVhbSIsImJpbmFyeVJlYWRlciIsImdldFJlYWRlciIsIm1vZGUiLCJzZXJpYWxpemVBc3luY0l0ZXJhYmxlIiwiaXRlcmFibGUiLCJpdGVyYXRvciIsIl9wYXJ0SlNPTiIsIm5leHQiLCJ4JDAiLCJvcmlnaW5hbFZhbHVlIiwiRGF0ZSIsImNvbnNvbGUiLCJlcnJvciIsImluZGV4T2YiLCJwYXJlbnRSZWZlcmVuY2UiLCJ3cml0dGVuT2JqZWN0cyIsImluaXQiLCJsYXp5SWQiLCJzZXJpYWxpemVNb2RlbCIsIl9sYXp5SWQiLCJfcGFydEpTT04yIiwiX2RhdGEiLCJwcm9taXNlSWQiLCJwYXJ0VmFsdWUiLCJfcGFydEpTT04zIiwibW9kZWxSb290IiwiX2RhdGEzIiwiZm9yRWFjaCIsIm9yaWdpbmFsS2V5IiwiTWFwIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiQXJyYXlCdWZmZXIiLCJJbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIkludDE2QXJyYXkiLCJVaW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSIsIkRhdGFWaWV3IiwiUmVhZGFibGVTdHJlYW0iLCJBU1lOQ19JVEVSQVRPUiIsIlJFQUNUX0NPTlRFWFRfVFlQRSIsImdldE93blByb3BlcnR5U3ltYm9scyIsImRlc2NyaXB0aW9uIiwia25vd25TZXJ2ZXJSZWZlcmVuY2VzIiwibW9kZWwiLCJXZWFrTWFwIiwianNvbiIsImVuY29kZUZvcm1EYXRhIiwicmVmZXJlbmNlIiwidGhlbmFibGUiLCJyZXMiLCJyZWoiLCJib2R5IiwiZSIsImRlZmF1bHRFbmNvZGVGb3JtQWN0aW9uIiwiaWRlbnRpZmllclByZWZpeCIsImJvdW5kIiwiYm91bmRDYWNoZSIsInByZWZpeGVkRGF0YSIsIm1ldGhvZCIsImVuY1R5cGUiLCJpc1NpZ25hdHVyZUVxdWFsIiwicmVmZXJlbmNlSWQiLCJudW1iZXJPZkJvdW5kQXJncyIsImJvdW5kUHJvbWlzZSIsImJvdW5kQXJncyIsImNyZWF0ZUZha2VTZXJ2ZXJGdW5jdGlvbiIsImZpbGVuYW1lIiwic291cmNlTWFwIiwibGluZSIsImNvbCIsImVudmlyb25tZW50TmFtZSIsImlubmVyRnVuY3Rpb24iLCJlbmNvZGVkTmFtZSIsInN0YXJ0c1dpdGgiLCJlbmNvZGVVUklDb21wb25lbnQiLCJmYWtlU2VydmVyRnVuY3Rpb25JZHgiLCJldmFsIiwicmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UiLCJwcm94eSIsInJlZmVyZW5jZSRqc2NvbXAkMCIsImVuY29kZUZvcm1BY3Rpb24iLCJkZWZpbmVQcm9wZXJ0aWVzIiwiJCRGT1JNX0FDVElPTiIsIiQkSVNfU0lHTkFUVVJFX0VRVUFMIiwibmV3Rm4iLCJGdW5jdGlvbkJpbmQiLCJhcHBseSIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheVNsaWNlIiwiY29uY2F0IiwiY3JlYXRlQm91bmRTZXJ2ZXJSZWZlcmVuY2UiLCJtZXRhRGF0YSIsImNhbGxTZXJ2ZXIiLCJmaW5kU291cmNlTWFwVVJMIiwiYWN0aW9uIiwibG9jYXRpb24iLCJmdW5jdGlvbk5hbWUiLCJlbnYiLCJwYXJzZVN0YWNrTG9jYXRpb24iLCJzdGFjayIsImVuZE9mRmlyc3QiLCJlbmRPZlNlY29uZCIsInY4RnJhbWVSZWdFeHAiLCJleGVjIiwianNjU3BpZGVyTW9ua2V5RnJhbWVSZWdFeHAiLCJjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UkMSIsImdldENvbXBvbmVudE5hbWVGcm9tVHlwZSIsIlJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UiLCJSRUFDVF9GUkFHTUVOVF9UWVBFIiwiUkVBQ1RfUE9SVEFMX1RZUEUiLCJSRUFDVF9QUk9GSUxFUl9UWVBFIiwiUkVBQ1RfU1RSSUNUX01PREVfVFlQRSIsIlJFQUNUX0NPTlNVTUVSX1RZUEUiLCJfY29udGV4dCIsImlubmVyVHlwZSIsIlJlYWN0UHJvbWlzZSIsInJlc3BvbnNlIiwiX3Jlc3BvbnNlIiwiX2RlYnVnSW5mbyIsInJlYWRDaHVuayIsImNodW5rIiwiaW5pdGlhbGl6ZU1vZGVsQ2h1bmsiLCJpbml0aWFsaXplTW9kdWxlQ2h1bmsiLCJjcmVhdGVQZW5kaW5nQ2h1bmsiLCJ3YWtlQ2h1bmsiLCJsaXN0ZW5lcnMiLCJ3YWtlQ2h1bmtJZkluaXRpYWxpemVkIiwicmVzb2x2ZUxpc3RlbmVycyIsInJlamVjdExpc3RlbmVycyIsInRyaWdnZXJFcnJvck9uQ2h1bmsiLCJjcmVhdGVSZXNvbHZlZEl0ZXJhdG9yUmVzdWx0Q2h1bmsiLCJyZXNvbHZlSXRlcmF0b3JSZXN1bHRDaHVuayIsInJlc29sdmVNb2RlbENodW5rIiwiZW5xdWV1ZU1vZGVsIiwicmVzb2x2ZU1vZHVsZUNodW5rIiwicHJldkhhbmRsZXIiLCJpbml0aWFsaXppbmdIYW5kbGVyIiwicmVzb2x2ZWRNb2RlbCIsInBhcnNlIiwiX2Zyb21KU09OIiwiZXJyb3JlZCIsImRlcHMiLCJyZXBvcnRHbG9iYWxFcnJvciIsIl9jaHVua3MiLCJudWxsUmVmR2V0dGVyIiwiY3JlYXRlTGF6eUNodW5rV3JhcHBlciIsImxhenlUeXBlIiwiZ2V0Q2h1bmsiLCJ3YWl0Rm9yUmVmZXJlbmNlIiwicmVmZXJlbmNlZENodW5rIiwicGFyZW50T2JqZWN0IiwibWFwIiwicGF0aCIsImZ1bGZpbGwiLCJoYW5kbGVyIiwic3BsaWNlIiwicHJvcHMiLCJfb3duZXIiLCJibG9ja2VkVmFsdWUiLCJvd25lciIsInBhcmVudCIsImxvYWRTZXJ2ZXJSZWZlcmVuY2UiLCJfc2VydmVyUmVmZXJlbmNlQ29uZmlnIiwiX2NhbGxTZXJ2ZXIiLCJfZW5jb2RlRm9ybUFjdGlvbiIsIl9kZWJ1Z0ZpbmRTb3VyY2VNYXBVUkwiLCJzZXJ2ZXJSZWZlcmVuY2UiLCJyZXNvbHZlZFZhbHVlIiwidW5zaGlmdCIsImdldE91dGxpbmVkTW9kZWwiLCJzcGxpdCIsInBhcnNlSW50IiwiY3JlYXRlTWFwIiwiY3JlYXRlU2V0IiwiY3JlYXRlQmxvYiIsImNyZWF0ZUZvcm1EYXRhIiwiZXh0cmFjdEl0ZXJhdG9yIiwiU3ltYm9sIiwiY3JlYXRlTW9kZWwiLCJwYXJzZU1vZGVsU3RyaW5nIiwiZm9yIiwiX3RlbXBSZWZzIiwicmVzb2x2ZUVycm9yRGV2IiwiTmFOIiwiQmlnSW50IiwibWlzc2luZ0NhbGwiLCJSZXNwb25zZUluc3RhbmNlIiwic2VydmVyUmVmZXJlbmNlQ29uZmlnIiwicmVwbGF5Q29uc29sZSIsIl9idW5kbGVyQ29uZmlnIiwiX21vZHVsZUxvYWRpbmciLCJfbm9uY2UiLCJfc3RyaW5nRGVjb2RlciIsIlRleHREZWNvZGVyIiwiX3Jvd0xlbmd0aCIsIl9yb3dUYWciLCJfcm93SUQiLCJfcm93U3RhdGUiLCJfYnVmZmVyIiwiX2RlYnVnUm9vdE93bmVyIiwiUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlciIsIkEiLCJnZXRPd25lciIsIl9kZWJ1Z1Jvb3RTdGFjayIsIl9yZXBsYXlDb25zb2xlIiwiX3Jvb3RFbnZpcm9ubWVudE5hbWUiLCJjcmVhdGVGcm9tSlNPTkNhbGxiYWNrIiwicmVzb2x2ZU1vZGVsIiwicmVzb2x2ZVRleHQiLCJ0ZXh0IiwiZW5xdWV1ZVZhbHVlIiwicmVzb2x2ZUJ1ZmZlciIsInJlc29sdmVNb2R1bGUiLCJjbGllbnRSZWZlcmVuY2UiLCJibG9ja2VkQ2h1bmsiLCJyZXNvbHZlU3RyZWFtIiwiY29udHJvbGxlciIsInN0YXJ0UmVhZGFibGVTdHJlYW0iLCJjIiwicHJldmlvdXNCbG9ja2VkQ2h1bmsiLCJlbnF1ZXVlIiwidiIsIl9jaHVuazMiLCJjbG9zZSIsImFzeW5jSXRlcmF0b3IiLCJjcmVhdGVJdGVyYXRvciIsInN0YXJ0QXN5bmNJdGVyYWJsZSIsImNsb3NlZCIsIm5leHRXcml0ZUluZGV4IiwibmV4dFJlYWRJbmRleCIsImFyZyIsInN0b3BTdHJlYW0iLCJyb3ciLCJlcnJvckluZm8iLCJidWlsZEZha2VDYWxsU3RhY2siLCJtZXNzYWdlIiwiZ2V0Um9vdFRhc2siLCJydW4iLCJyZXNvbHZlSGludCIsImNvZGUiLCJEIiwiQyIsImFzIiwiTCIsIlMiLCJNIiwiY3JlYXRlRmFrZUZ1bmN0aW9uIiwiZW5jb2RlVVJJIiwiZmFrZUZ1bmN0aW9uSWR4IiwiZm4iLCJfIiwiaW5uZXJDYWxsIiwiZnJhbWUiLCJmcmFtZUtleSIsImpvaW4iLCJmYWtlRnVuY3Rpb25DYWNoZSIsImNoaWxkRW52aXJvbm1lbnROYW1lIiwicm9vdFRhc2siLCJfZGVidWdSb290VGFzayIsImNyZWF0ZVRhc2siLCJ0b0xvd2VyQ2FzZSIsImZha2VKU1hDYWxsU2l0ZSIsImluaXRpYWxpemVGYWtlU3RhY2siLCJkZWJ1Z0luZm8iLCJkZWJ1Z1N0YWNrIiwiY3JlYXRlRmFrZUpTWENhbGxTdGFja0luREVWIiwicmVzb2x2ZURlYnVnSW5mbyIsImdldEN1cnJlbnRTdGFja0luREVWIiwicmVzb2x2ZUNvbnNvbGVFbnRyeSIsInN0YWNrVHJhY2UiLCJyZXBsYXlDb25zb2xlV2l0aENhbGxTdGFja0luREVWIiwibWVyZ2VCdWZmZXIiLCJsYXN0Q2h1bmsiLCJsIiwiX2kyIiwicmVzb2x2ZVR5cGVkQXJyYXkiLCJjb25zdHJ1Y3RvciIsImJ5dGVzUGVyRWxlbWVudCIsInByb2Nlc3NGdWxsQmluYXJ5Um93Iiwic3RyaW5nRGVjb2RlciIsImRlY29kZSIsImRlY29kZXJPcHRpb25zIiwicHJvY2Vzc0Z1bGxTdHJpbmdSb3ciLCJkaWdlc3QiLCJfc3RvcmUiLCJmcmVlemUiLCJub1NlcnZlckNhbGwiLCJjcmVhdGVSZXNwb25zZUZyb21PcHRpb25zIiwib3B0aW9ucyIsInNlcnZlckNvbnN1bWVyTWFuaWZlc3QiLCJtb2R1bGVNYXAiLCJzZXJ2ZXJNb2R1bGVNYXAiLCJyZXBsYXlDb25zb2xlTG9ncyIsInN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0iLCJfcmVmIiwicm93U3RhdGUiLCJyb3dUYWciLCJyb3dMZW5ndGgiLCJjaHVua0xlbmd0aCIsImxhc3RJZHgiLCJvZmZzZXQiLCJjYXRjaCIsIlJlYWN0RE9NIiwicmVxdWlyZSIsIlJlYWN0IiwiYmluZCQxIiwiRnVuY3Rpb24iLCJfX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUiLCJpc0FycmF5IiwiX19TRVJWRVJfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFIiwiUmVhY3RTaGFyZWRJbnRlcm5hbHMiLCJfX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUiLCJjcmVhdGUiLCJjcmVhdGVGYWtlSlNYQ2FsbFN0YWNrIiwicmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2siLCJtZXRob2ROYW1lIiwicHJldlN0YWNrIiwiZ2V0Q3VycmVudFN0YWNrIiwiYSIsIm5ld0FyZ3MiLCJjYWxsU3RhY2siLCJleHBvcnRzIiwiY3JlYXRlRnJvbUZldGNoIiwicHJvbWlzZUZvclJlc3BvbnNlIiwiciIsImNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSIsImNyZWF0ZVNlcnZlclJlZmVyZW5jZSIsImNyZWF0ZVRlbXBvcmFyeVJlZmVyZW5jZVNldCIsImVuY29kZVJlcGx5IiwiYWJvcnQiLCJzaWduYWwiLCJhYm9ydGVkIiwibGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js\n");
|
1904
|
+
eval("/**\n * @license React\n * react-server-dom-webpack-client.edge.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */ \n true && function() {\n function _defineProperty(obj, key, value) {\n key in obj ? Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : obj[key] = value;\n return obj;\n }\n function resolveClientReference(bundlerConfig, metadata) {\n if (bundlerConfig) {\n var moduleExports = bundlerConfig[metadata[0]];\n if (bundlerConfig = moduleExports && moduleExports[metadata[2]]) moduleExports = bundlerConfig.name;\n else {\n bundlerConfig = moduleExports && moduleExports[\"*\"];\n if (!bundlerConfig) throw Error('Could not find the module \"' + metadata[0] + '\" in the React Server Consumer Manifest. This is probably a bug in the React Server Components bundler.');\n moduleExports = metadata[2];\n }\n return 4 === metadata.length ? [\n bundlerConfig.id,\n bundlerConfig.chunks,\n moduleExports,\n 1\n ] : [\n bundlerConfig.id,\n bundlerConfig.chunks,\n moduleExports\n ];\n }\n return metadata;\n }\n function resolveServerReference(bundlerConfig, id) {\n var name = \"\", resolvedModuleData = bundlerConfig[id];\n if (resolvedModuleData) name = resolvedModuleData.name;\n else {\n var idx = id.lastIndexOf(\"#\");\n -1 !== idx && (name = id.slice(idx + 1), resolvedModuleData = bundlerConfig[id.slice(0, idx)]);\n if (!resolvedModuleData) throw Error('Could not find the module \"' + id + '\" in the React Server Manifest. This is probably a bug in the React Server Components bundler.');\n }\n return resolvedModuleData.async ? [\n resolvedModuleData.id,\n resolvedModuleData.chunks,\n name,\n 1\n ] : [\n resolvedModuleData.id,\n resolvedModuleData.chunks,\n name\n ];\n }\n function requireAsyncModule(id) {\n var promise = globalThis.__next_require__(id);\n if (\"function\" !== typeof promise.then || \"fulfilled\" === promise.status) return null;\n promise.then(function(value) {\n promise.status = \"fulfilled\";\n promise.value = value;\n }, function(reason) {\n promise.status = \"rejected\";\n promise.reason = reason;\n });\n return promise;\n }\n function ignoreReject() {}\n function preloadModule(metadata) {\n for(var chunks = metadata[1], promises = [], i = 0; i < chunks.length;){\n var chunkId = chunks[i++];\n chunks[i++];\n var entry = chunkCache.get(chunkId);\n if (void 0 === entry) {\n entry = __webpack_require__.e(chunkId);\n promises.push(entry);\n var resolve = chunkCache.set.bind(chunkCache, chunkId, null);\n entry.then(resolve, ignoreReject);\n chunkCache.set(chunkId, entry);\n } else null !== entry && promises.push(entry);\n }\n return 4 === metadata.length ? 0 === promises.length ? requireAsyncModule(metadata[0]) : Promise.all(promises).then(function() {\n return requireAsyncModule(metadata[0]);\n }) : 0 < promises.length ? Promise.all(promises) : null;\n }\n function requireModule(metadata) {\n var moduleExports = globalThis.__next_require__(metadata[0]);\n if (4 === metadata.length && \"function\" === typeof moduleExports.then) if (\"fulfilled\" === moduleExports.status) moduleExports = moduleExports.value;\n else throw moduleExports.reason;\n return \"*\" === metadata[2] ? moduleExports : \"\" === metadata[2] ? moduleExports.__esModule ? moduleExports.default : moduleExports : moduleExports[metadata[2]];\n }\n function prepareDestinationWithChunks(moduleLoading, chunks, nonce$jscomp$0) {\n if (null !== moduleLoading) for(var i = 1; i < chunks.length; i += 2){\n var nonce = nonce$jscomp$0, JSCompiler_temp_const = ReactDOMSharedInternals.d, JSCompiler_temp_const$jscomp$0 = JSCompiler_temp_const.X, JSCompiler_temp_const$jscomp$1 = moduleLoading.prefix + chunks[i];\n var JSCompiler_inline_result = moduleLoading.crossOrigin;\n JSCompiler_inline_result = \"string\" === typeof JSCompiler_inline_result ? \"use-credentials\" === JSCompiler_inline_result ? JSCompiler_inline_result : \"\" : void 0;\n JSCompiler_temp_const$jscomp$0.call(JSCompiler_temp_const, JSCompiler_temp_const$jscomp$1, {\n crossOrigin: JSCompiler_inline_result,\n nonce: nonce\n });\n }\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function isObjectPrototype(object) {\n if (!object) return !1;\n var ObjectPrototype = Object.prototype;\n if (object === ObjectPrototype) return !0;\n if (getPrototypeOf(object)) return !1;\n object = Object.getOwnPropertyNames(object);\n for(var i = 0; i < object.length; i++)if (!(object[i] in ObjectPrototype)) return !1;\n return !0;\n }\n function isSimpleObject(object) {\n if (!isObjectPrototype(getPrototypeOf(object))) return !1;\n for(var names = Object.getOwnPropertyNames(object), i = 0; i < names.length; i++){\n var descriptor = Object.getOwnPropertyDescriptor(object, names[i]);\n if (!descriptor || !descriptor.enumerable && (\"key\" !== names[i] && \"ref\" !== names[i] || \"function\" !== typeof descriptor.get)) return !1;\n }\n return !0;\n }\n function objectName(object) {\n return Object.prototype.toString.call(object).replace(/^\\[object (.*)\\]$/, function(m, p0) {\n return p0;\n });\n }\n function describeKeyForErrorMessage(key) {\n var encodedKey = JSON.stringify(key);\n return '\"' + key + '\"' === encodedKey ? key : encodedKey;\n }\n function describeValueForErrorMessage(value) {\n switch(typeof value){\n case \"string\":\n return JSON.stringify(10 >= value.length ? value : value.slice(0, 10) + \"...\");\n case \"object\":\n if (isArrayImpl(value)) return \"[...]\";\n if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG) return \"client\";\n value = objectName(value);\n return \"Object\" === value ? \"{...}\" : value;\n case \"function\":\n return value.$$typeof === CLIENT_REFERENCE_TAG ? \"client\" : (value = value.displayName || value.name) ? \"function \" + value : \"function\";\n default:\n return String(value);\n }\n }\n function describeElementType(type) {\n if (\"string\" === typeof type) return type;\n switch(type){\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type) switch(type.$$typeof){\n case REACT_FORWARD_REF_TYPE:\n return describeElementType(type.render);\n case REACT_MEMO_TYPE:\n return describeElementType(type.type);\n case REACT_LAZY_TYPE:\n var payload = type._payload;\n type = type._init;\n try {\n return describeElementType(type(payload));\n } catch (x) {}\n }\n return \"\";\n }\n function describeObjectForErrorMessage(objectOrArray, expandedName) {\n var objKind = objectName(objectOrArray);\n if (\"Object\" !== objKind && \"Array\" !== objKind) return objKind;\n var start = -1, length = 0;\n if (isArrayImpl(objectOrArray)) if (jsxChildrenParents.has(objectOrArray)) {\n var type = jsxChildrenParents.get(objectOrArray);\n objKind = \"<\" + describeElementType(type) + \">\";\n for(var i = 0; i < objectOrArray.length; i++){\n var value = objectOrArray[i];\n value = \"string\" === typeof value ? value : \"object\" === typeof value && null !== value ? \"{\" + describeObjectForErrorMessage(value) + \"}\" : \"{\" + describeValueForErrorMessage(value) + \"}\";\n \"\" + i === expandedName ? (start = objKind.length, length = value.length, objKind += value) : objKind = 15 > value.length && 40 > objKind.length + value.length ? objKind + value : objKind + \"{...}\";\n }\n objKind += \"</\" + describeElementType(type) + \">\";\n } else {\n objKind = \"[\";\n for(type = 0; type < objectOrArray.length; type++)0 < type && (objKind += \", \"), i = objectOrArray[type], i = \"object\" === typeof i && null !== i ? describeObjectForErrorMessage(i) : describeValueForErrorMessage(i), \"\" + type === expandedName ? (start = objKind.length, length = i.length, objKind += i) : objKind = 10 > i.length && 40 > objKind.length + i.length ? objKind + i : objKind + \"...\";\n objKind += \"]\";\n }\n else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE) objKind = \"<\" + describeElementType(objectOrArray.type) + \"/>\";\n else {\n if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return \"client\";\n if (jsxPropsParents.has(objectOrArray)) {\n objKind = jsxPropsParents.get(objectOrArray);\n objKind = \"<\" + (describeElementType(objKind) || \"...\");\n type = Object.keys(objectOrArray);\n for(i = 0; i < type.length; i++){\n objKind += \" \";\n value = type[i];\n objKind += describeKeyForErrorMessage(value) + \"=\";\n var _value2 = objectOrArray[value];\n var _substr2 = value === expandedName && \"object\" === typeof _value2 && null !== _value2 ? describeObjectForErrorMessage(_value2) : describeValueForErrorMessage(_value2);\n \"string\" !== typeof _value2 && (_substr2 = \"{\" + _substr2 + \"}\");\n value === expandedName ? (start = objKind.length, length = _substr2.length, objKind += _substr2) : objKind = 10 > _substr2.length && 40 > objKind.length + _substr2.length ? objKind + _substr2 : objKind + \"...\";\n }\n objKind += \">\";\n } else {\n objKind = \"{\";\n type = Object.keys(objectOrArray);\n for(i = 0; i < type.length; i++)0 < i && (objKind += \", \"), value = type[i], objKind += describeKeyForErrorMessage(value) + \": \", _value2 = objectOrArray[value], _value2 = \"object\" === typeof _value2 && null !== _value2 ? describeObjectForErrorMessage(_value2) : describeValueForErrorMessage(_value2), value === expandedName ? (start = objKind.length, length = _value2.length, objKind += _value2) : objKind = 10 > _value2.length && 40 > objKind.length + _value2.length ? objKind + _value2 : objKind + \"...\";\n objKind += \"}\";\n }\n }\n return void 0 === expandedName ? objKind : -1 < start && 0 < length ? (objectOrArray = \" \".repeat(start) + \"^\".repeat(length), \"\\n \" + objKind + \"\\n \" + objectOrArray) : \"\\n \" + objKind;\n }\n function serializeNumber(number) {\n return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number ? \"$-0\" : number : Infinity === number ? \"$Infinity\" : -Infinity === number ? \"$-Infinity\" : \"$NaN\";\n }\n function processReply(root, formFieldPrefix, temporaryReferences, resolve, reject) {\n function serializeTypedArray(tag, typedArray) {\n typedArray = new Blob([\n new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength)\n ]);\n var blobId = nextPartId++;\n null === formData && (formData = new FormData());\n formData.append(formFieldPrefix + blobId, typedArray);\n return \"$\" + tag + blobId.toString(16);\n }\n function serializeBinaryReader(reader) {\n function progress(entry) {\n entry.done ? (entry = nextPartId++, data.append(formFieldPrefix + entry, new Blob(buffer)), data.append(formFieldPrefix + streamId, '\"$o' + entry.toString(16) + '\"'), data.append(formFieldPrefix + streamId, \"C\"), pendingParts--, 0 === pendingParts && resolve(data)) : (buffer.push(entry.value), reader.read(new Uint8Array(1024)).then(progress, reject));\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++, buffer = [];\n reader.read(new Uint8Array(1024)).then(progress, reject);\n return \"$r\" + streamId.toString(16);\n }\n function serializeReader(reader) {\n function progress(entry) {\n if (entry.done) data.append(formFieldPrefix + streamId, \"C\"), pendingParts--, 0 === pendingParts && resolve(data);\n else try {\n var partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, partJSON);\n reader.read().then(progress, reject);\n } catch (x) {\n reject(x);\n }\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++;\n reader.read().then(progress, reject);\n return \"$R\" + streamId.toString(16);\n }\n function serializeReadableStream(stream) {\n try {\n var binaryReader = stream.getReader({\n mode: \"byob\"\n });\n } catch (x) {\n return serializeReader(stream.getReader());\n }\n return serializeBinaryReader(binaryReader);\n }\n function serializeAsyncIterable(iterable, iterator) {\n function progress(entry) {\n if (entry.done) {\n if (void 0 === entry.value) data.append(formFieldPrefix + streamId, \"C\");\n else try {\n var partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, \"C\" + partJSON);\n } catch (x) {\n reject(x);\n return;\n }\n pendingParts--;\n 0 === pendingParts && resolve(data);\n } else try {\n var _partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, _partJSON);\n iterator.next().then(progress, reject);\n } catch (x$0) {\n reject(x$0);\n }\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++;\n iterable = iterable === iterator;\n iterator.next().then(progress, reject);\n return \"$\" + (iterable ? \"x\" : \"X\") + streamId.toString(16);\n }\n function resolveToJSON(key, value) {\n var originalValue = this[key];\n \"object\" !== typeof originalValue || originalValue === value || originalValue instanceof Date || (\"Object\" !== objectName(originalValue) ? console.error(\"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\", objectName(originalValue), describeObjectForErrorMessage(this, key)) : console.error(\"Only plain objects can be passed to Server Functions from the Client. Objects with toJSON methods are not supported. Convert it manually to a simple value before passing it to props.%s\", describeObjectForErrorMessage(this, key)));\n if (null === value) return null;\n if (\"object\" === typeof value) {\n switch(value.$$typeof){\n case REACT_ELEMENT_TYPE:\n if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\")) {\n var parentReference = writtenObjects.get(this);\n if (void 0 !== parentReference) return temporaryReferences.set(parentReference + \":\" + key, value), \"$T\";\n }\n throw Error(\"React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" + describeObjectForErrorMessage(this, key));\n case REACT_LAZY_TYPE:\n originalValue = value._payload;\n var init = value._init;\n null === formData && (formData = new FormData());\n pendingParts++;\n try {\n parentReference = init(originalValue);\n var lazyId = nextPartId++, partJSON = serializeModel(parentReference, lazyId);\n formData.append(formFieldPrefix + lazyId, partJSON);\n return \"$\" + lazyId.toString(16);\n } catch (x) {\n if (\"object\" === typeof x && null !== x && \"function\" === typeof x.then) {\n pendingParts++;\n var _lazyId = nextPartId++;\n parentReference = function() {\n try {\n var _partJSON2 = serializeModel(value, _lazyId), _data = formData;\n _data.append(formFieldPrefix + _lazyId, _partJSON2);\n pendingParts--;\n 0 === pendingParts && resolve(_data);\n } catch (reason) {\n reject(reason);\n }\n };\n x.then(parentReference, parentReference);\n return \"$\" + _lazyId.toString(16);\n }\n reject(x);\n return null;\n } finally{\n pendingParts--;\n }\n }\n if (\"function\" === typeof value.then) {\n null === formData && (formData = new FormData());\n pendingParts++;\n var promiseId = nextPartId++;\n value.then(function(partValue) {\n try {\n var _partJSON3 = serializeModel(partValue, promiseId);\n partValue = formData;\n partValue.append(formFieldPrefix + promiseId, _partJSON3);\n pendingParts--;\n 0 === pendingParts && resolve(partValue);\n } catch (reason) {\n reject(reason);\n }\n }, reject);\n return \"$@\" + promiseId.toString(16);\n }\n parentReference = writtenObjects.get(value);\n if (void 0 !== parentReference) if (modelRoot === value) modelRoot = null;\n else return parentReference;\n else -1 === key.indexOf(\":\") && (parentReference = writtenObjects.get(this), void 0 !== parentReference && (parentReference = parentReference + \":\" + key, writtenObjects.set(value, parentReference), void 0 !== temporaryReferences && temporaryReferences.set(parentReference, value)));\n if (isArrayImpl(value)) return value;\n if (value instanceof FormData) {\n null === formData && (formData = new FormData());\n var _data3 = formData;\n key = nextPartId++;\n var prefix = formFieldPrefix + key + \"_\";\n value.forEach(function(originalValue, originalKey) {\n _data3.append(prefix + originalKey, originalValue);\n });\n return \"$K\" + key.toString(16);\n }\n if (value instanceof Map) return key = nextPartId++, parentReference = serializeModel(Array.from(value), key), null === formData && (formData = new FormData()), formData.append(formFieldPrefix + key, parentReference), \"$Q\" + key.toString(16);\n if (value instanceof Set) return key = nextPartId++, parentReference = serializeModel(Array.from(value), key), null === formData && (formData = new FormData()), formData.append(formFieldPrefix + key, parentReference), \"$W\" + key.toString(16);\n if (value instanceof ArrayBuffer) return key = new Blob([\n value\n ]), parentReference = nextPartId++, null === formData && (formData = new FormData()), formData.append(formFieldPrefix + parentReference, key), \"$A\" + parentReference.toString(16);\n if (value instanceof Int8Array) return serializeTypedArray(\"O\", value);\n if (value instanceof Uint8Array) return serializeTypedArray(\"o\", value);\n if (value instanceof Uint8ClampedArray) return serializeTypedArray(\"U\", value);\n if (value instanceof Int16Array) return serializeTypedArray(\"S\", value);\n if (value instanceof Uint16Array) return serializeTypedArray(\"s\", value);\n if (value instanceof Int32Array) return serializeTypedArray(\"L\", value);\n if (value instanceof Uint32Array) return serializeTypedArray(\"l\", value);\n if (value instanceof Float32Array) return serializeTypedArray(\"G\", value);\n if (value instanceof Float64Array) return serializeTypedArray(\"g\", value);\n if (value instanceof BigInt64Array) return serializeTypedArray(\"M\", value);\n if (value instanceof BigUint64Array) return serializeTypedArray(\"m\", value);\n if (value instanceof DataView) return serializeTypedArray(\"V\", value);\n if (\"function\" === typeof Blob && value instanceof Blob) return null === formData && (formData = new FormData()), key = nextPartId++, formData.append(formFieldPrefix + key, value), \"$B\" + key.toString(16);\n if (parentReference = getIteratorFn(value)) return parentReference = parentReference.call(value), parentReference === value ? (key = nextPartId++, parentReference = serializeModel(Array.from(parentReference), key), null === formData && (formData = new FormData()), formData.append(formFieldPrefix + key, parentReference), \"$i\" + key.toString(16)) : Array.from(parentReference);\n if (\"function\" === typeof ReadableStream && value instanceof ReadableStream) return serializeReadableStream(value);\n parentReference = value[ASYNC_ITERATOR];\n if (\"function\" === typeof parentReference) return serializeAsyncIterable(value, parentReference.call(value));\n parentReference = getPrototypeOf(value);\n if (parentReference !== ObjectPrototype && (null === parentReference || null !== getPrototypeOf(parentReference))) {\n if (void 0 === temporaryReferences) throw Error(\"Only plain objects, and a few built-ins, can be passed to Server Actions. Classes or null prototypes are not supported.\" + describeObjectForErrorMessage(this, key));\n return \"$T\";\n }\n value.$$typeof === REACT_CONTEXT_TYPE ? console.error(\"React Context Providers cannot be passed to Server Functions from the Client.%s\", describeObjectForErrorMessage(this, key)) : \"Object\" !== objectName(value) ? console.error(\"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\", objectName(value), describeObjectForErrorMessage(this, key)) : isSimpleObject(value) ? Object.getOwnPropertySymbols && (parentReference = Object.getOwnPropertySymbols(value), 0 < parentReference.length && console.error(\"Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s\", parentReference[0].description, describeObjectForErrorMessage(this, key))) : console.error(\"Only plain objects can be passed to Server Functions from the Client. Classes or other objects with methods are not supported.%s\", describeObjectForErrorMessage(this, key));\n return value;\n }\n if (\"string\" === typeof value) {\n if (\"Z\" === value[value.length - 1] && this[key] instanceof Date) return \"$D\" + value;\n key = \"$\" === value[0] ? \"$\" + value : value;\n return key;\n }\n if (\"boolean\" === typeof value) return value;\n if (\"number\" === typeof value) return serializeNumber(value);\n if (\"undefined\" === typeof value) return \"$undefined\";\n if (\"function\" === typeof value) {\n parentReference = knownServerReferences.get(value);\n if (void 0 !== parentReference) return key = JSON.stringify(parentReference, resolveToJSON), null === formData && (formData = new FormData()), parentReference = nextPartId++, formData.set(formFieldPrefix + parentReference, key), \"$F\" + parentReference.toString(16);\n if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\") && (parentReference = writtenObjects.get(this), void 0 !== parentReference)) return temporaryReferences.set(parentReference + \":\" + key, value), \"$T\";\n throw Error(\"Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again.\");\n }\n if (\"symbol\" === typeof value) {\n if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\") && (parentReference = writtenObjects.get(this), void 0 !== parentReference)) return temporaryReferences.set(parentReference + \":\" + key, value), \"$T\";\n throw Error(\"Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" + describeObjectForErrorMessage(this, key));\n }\n if (\"bigint\" === typeof value) return \"$n\" + value.toString(10);\n throw Error(\"Type \" + typeof value + \" is not supported as an argument to a Server Function.\");\n }\n function serializeModel(model, id) {\n \"object\" === typeof model && null !== model && (id = \"$\" + id.toString(16), writtenObjects.set(model, id), void 0 !== temporaryReferences && temporaryReferences.set(id, model));\n modelRoot = model;\n return JSON.stringify(model, resolveToJSON);\n }\n var nextPartId = 1, pendingParts = 0, formData = null, writtenObjects = new WeakMap(), modelRoot = root, json = serializeModel(root, 0);\n null === formData ? resolve(json) : (formData.set(formFieldPrefix + \"0\", json), 0 === pendingParts && resolve(formData));\n return function() {\n 0 < pendingParts && (pendingParts = 0, null === formData ? resolve(json) : resolve(formData));\n };\n }\n function encodeFormData(reference) {\n var resolve, reject, thenable = new Promise(function(res, rej) {\n resolve = res;\n reject = rej;\n });\n processReply(reference, \"\", void 0, function(body) {\n if (\"string\" === typeof body) {\n var data = new FormData();\n data.append(\"0\", body);\n body = data;\n }\n thenable.status = \"fulfilled\";\n thenable.value = body;\n resolve(body);\n }, function(e) {\n thenable.status = \"rejected\";\n thenable.reason = e;\n reject(e);\n });\n return thenable;\n }\n function defaultEncodeFormAction(identifierPrefix) {\n var reference = knownServerReferences.get(this);\n if (!reference) throw Error(\"Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.\");\n var data = null;\n if (null !== reference.bound) {\n data = boundCache.get(reference);\n data || (data = encodeFormData(reference), boundCache.set(reference, data));\n if (\"rejected\" === data.status) throw data.reason;\n if (\"fulfilled\" !== data.status) throw data;\n reference = data.value;\n var prefixedData = new FormData();\n reference.forEach(function(value, key) {\n prefixedData.append(\"$ACTION_\" + identifierPrefix + \":\" + key, value);\n });\n data = prefixedData;\n reference = \"$ACTION_REF_\" + identifierPrefix;\n } else reference = \"$ACTION_ID_\" + reference.id;\n return {\n name: reference,\n method: \"POST\",\n encType: \"multipart/form-data\",\n data: data\n };\n }\n function isSignatureEqual(referenceId, numberOfBoundArgs) {\n var reference = knownServerReferences.get(this);\n if (!reference) throw Error(\"Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.\");\n if (reference.id !== referenceId) return !1;\n var boundPromise = reference.bound;\n if (null === boundPromise) return 0 === numberOfBoundArgs;\n switch(boundPromise.status){\n case \"fulfilled\":\n return boundPromise.value.length === numberOfBoundArgs;\n case \"pending\":\n throw boundPromise;\n case \"rejected\":\n throw boundPromise.reason;\n default:\n throw \"string\" !== typeof boundPromise.status && (boundPromise.status = \"pending\", boundPromise.then(function(boundArgs) {\n boundPromise.status = \"fulfilled\";\n boundPromise.value = boundArgs;\n }, function(error) {\n boundPromise.status = \"rejected\";\n boundPromise.reason = error;\n })), boundPromise;\n }\n }\n function createFakeServerFunction(name, filename, sourceMap, line, col, environmentName, innerFunction) {\n name || (name = \"<anonymous>\");\n var encodedName = JSON.stringify(name);\n 1 >= line ? (line = encodedName.length + 7, col = \"s=>({\" + encodedName + \" \".repeat(col < line ? 0 : col - line) + \":(...args) => s(...args)})\\n/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\") : col = \"/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\" + \"\\n\".repeat(line - 2) + \"server=>({\" + encodedName + \":\\n\" + \" \".repeat(1 > col ? 0 : col - 1) + \"(...args) => server(...args)})\";\n filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n sourceMap ? (col += \"\\n//# sourceURL=rsc://React/\" + encodeURIComponent(environmentName) + \"/\" + filename + \"?s\" + fakeServerFunctionIdx++, col += \"\\n//# sourceMappingURL=\" + sourceMap) : filename && (col += \"\\n//# sourceURL=\" + filename);\n try {\n return (0, eval)(col)(innerFunction)[name];\n } catch (x) {\n return innerFunction;\n }\n }\n function registerServerReference(proxy, reference$jscomp$0, encodeFormAction) {\n Object.defineProperties(proxy, {\n $$FORM_ACTION: {\n value: void 0 === encodeFormAction ? defaultEncodeFormAction : function() {\n var reference = knownServerReferences.get(this);\n if (!reference) throw Error(\"Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.\");\n var boundPromise = reference.bound;\n null === boundPromise && (boundPromise = Promise.resolve([]));\n return encodeFormAction(reference.id, boundPromise);\n }\n },\n $$IS_SIGNATURE_EQUAL: {\n value: isSignatureEqual\n },\n bind: {\n value: bind\n }\n });\n knownServerReferences.set(proxy, reference$jscomp$0);\n }\n function bind() {\n var newFn = FunctionBind.apply(this, arguments), reference = knownServerReferences.get(this);\n if (reference) {\n null != arguments[0] && console.error('Cannot bind \"this\" of a Server Action. Pass null or undefined as the first argument to .bind().');\n var args = ArraySlice.call(arguments, 1), boundPromise = null;\n boundPromise = null !== reference.bound ? Promise.resolve(reference.bound).then(function(boundArgs) {\n return boundArgs.concat(args);\n }) : Promise.resolve(args);\n Object.defineProperties(newFn, {\n $$FORM_ACTION: {\n value: this.$$FORM_ACTION\n },\n $$IS_SIGNATURE_EQUAL: {\n value: isSignatureEqual\n },\n bind: {\n value: bind\n }\n });\n knownServerReferences.set(newFn, {\n id: reference.id,\n bound: boundPromise\n });\n }\n return newFn;\n }\n function createBoundServerReference(metaData, callServer, encodeFormAction, findSourceMapURL) {\n function action() {\n var args = Array.prototype.slice.call(arguments);\n return bound ? \"fulfilled\" === bound.status ? callServer(id, bound.value.concat(args)) : Promise.resolve(bound).then(function(boundArgs) {\n return callServer(id, boundArgs.concat(args));\n }) : callServer(id, args);\n }\n var id = metaData.id, bound = metaData.bound, location = metaData.location;\n if (location) {\n var functionName = metaData.name || \"\", filename = location[1], line = location[2];\n location = location[3];\n metaData = metaData.env || \"Server\";\n findSourceMapURL = null == findSourceMapURL ? null : findSourceMapURL(filename, metaData);\n action = createFakeServerFunction(functionName, filename, findSourceMapURL, line, location, metaData, action);\n }\n registerServerReference(action, {\n id: id,\n bound: bound\n }, encodeFormAction);\n return action;\n }\n function parseStackLocation(error) {\n error = error.stack;\n error.startsWith(\"Error: react-stack-top-frame\\n\") && (error = error.slice(29));\n var endOfFirst = error.indexOf(\"\\n\");\n if (-1 !== endOfFirst) {\n var endOfSecond = error.indexOf(\"\\n\", endOfFirst + 1);\n endOfFirst = -1 === endOfSecond ? error.slice(endOfFirst + 1) : error.slice(endOfFirst + 1, endOfSecond);\n } else endOfFirst = error;\n error = v8FrameRegExp.exec(endOfFirst);\n if (!error && (error = jscSpiderMonkeyFrameRegExp.exec(endOfFirst), !error)) return null;\n endOfFirst = error[1] || \"\";\n \"<anonymous>\" === endOfFirst && (endOfFirst = \"\");\n endOfSecond = error[2] || error[5] || \"\";\n \"<anonymous>\" === endOfSecond && (endOfSecond = \"\");\n return [\n endOfFirst,\n endOfSecond,\n +(error[3] || error[6]),\n +(error[4] || error[7])\n ];\n }\n function createServerReference$1(id, callServer, encodeFormAction, findSourceMapURL, functionName) {\n function action() {\n var args = Array.prototype.slice.call(arguments);\n return callServer(id, args);\n }\n var location = parseStackLocation(Error(\"react-stack-top-frame\"));\n if (null !== location) {\n var filename = location[1], line = location[2];\n location = location[3];\n findSourceMapURL = null == findSourceMapURL ? null : findSourceMapURL(filename, \"Client\");\n action = createFakeServerFunction(functionName || \"\", filename, findSourceMapURL, line, location, \"Client\", action);\n }\n registerServerReference(action, {\n id: id,\n bound: null\n }, encodeFormAction);\n return action;\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type) return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch(type){\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type) switch(\"number\" === typeof type.tag && console.error(\"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"), type.$$typeof){\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type || (type = innerType.displayName || innerType.name || \"\", type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\");\n return type;\n case REACT_MEMO_TYPE:\n return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || \"Memo\";\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function ReactPromise(status, value, reason, response) {\n this.status = status;\n this.value = value;\n this.reason = reason;\n this._response = response;\n this._debugInfo = null;\n }\n function readChunk(chunk) {\n switch(chunk.status){\n case \"resolved_model\":\n initializeModelChunk(chunk);\n break;\n case \"resolved_module\":\n initializeModuleChunk(chunk);\n }\n switch(chunk.status){\n case \"fulfilled\":\n return chunk.value;\n case \"pending\":\n case \"blocked\":\n throw chunk;\n default:\n throw chunk.reason;\n }\n }\n function createPendingChunk(response) {\n return new ReactPromise(\"pending\", null, null, response);\n }\n function wakeChunk(listeners, value) {\n for(var i = 0; i < listeners.length; i++)(0, listeners[i])(value);\n }\n function wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners) {\n switch(chunk.status){\n case \"fulfilled\":\n wakeChunk(resolveListeners, chunk.value);\n break;\n case \"pending\":\n case \"blocked\":\n if (chunk.value) for(var i = 0; i < resolveListeners.length; i++)chunk.value.push(resolveListeners[i]);\n else chunk.value = resolveListeners;\n if (chunk.reason) {\n if (rejectListeners) for(resolveListeners = 0; resolveListeners < rejectListeners.length; resolveListeners++)chunk.reason.push(rejectListeners[resolveListeners]);\n } else chunk.reason = rejectListeners;\n break;\n case \"rejected\":\n rejectListeners && wakeChunk(rejectListeners, chunk.reason);\n }\n }\n function triggerErrorOnChunk(chunk, error) {\n if (\"pending\" !== chunk.status && \"blocked\" !== chunk.status) chunk.reason.error(error);\n else {\n var listeners = chunk.reason;\n chunk.status = \"rejected\";\n chunk.reason = error;\n null !== listeners && wakeChunk(listeners, error);\n }\n }\n function createResolvedIteratorResultChunk(response, value, done) {\n return new ReactPromise(\"resolved_model\", (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') + value + \"}\", null, response);\n }\n function resolveIteratorResultChunk(chunk, value, done) {\n resolveModelChunk(chunk, (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') + value + \"}\");\n }\n function resolveModelChunk(chunk, value) {\n if (\"pending\" !== chunk.status) chunk.reason.enqueueModel(value);\n else {\n var resolveListeners = chunk.value, rejectListeners = chunk.reason;\n chunk.status = \"resolved_model\";\n chunk.value = value;\n null !== resolveListeners && (initializeModelChunk(chunk), wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners));\n }\n }\n function resolveModuleChunk(chunk, value) {\n if (\"pending\" === chunk.status || \"blocked\" === chunk.status) {\n var resolveListeners = chunk.value, rejectListeners = chunk.reason;\n chunk.status = \"resolved_module\";\n chunk.value = value;\n null !== resolveListeners && (initializeModuleChunk(chunk), wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners));\n }\n }\n function initializeModelChunk(chunk) {\n var prevHandler = initializingHandler;\n initializingHandler = null;\n var resolvedModel = chunk.value;\n chunk.status = \"blocked\";\n chunk.value = null;\n chunk.reason = null;\n try {\n var value = JSON.parse(resolvedModel, chunk._response._fromJSON), resolveListeners = chunk.value;\n null !== resolveListeners && (chunk.value = null, chunk.reason = null, wakeChunk(resolveListeners, value));\n if (null !== initializingHandler) {\n if (initializingHandler.errored) throw initializingHandler.value;\n if (0 < initializingHandler.deps) {\n initializingHandler.value = value;\n initializingHandler.chunk = chunk;\n return;\n }\n }\n chunk.status = \"fulfilled\";\n chunk.value = value;\n } catch (error) {\n chunk.status = \"rejected\", chunk.reason = error;\n } finally{\n initializingHandler = prevHandler;\n }\n }\n function initializeModuleChunk(chunk) {\n try {\n var value = requireModule(chunk.value);\n chunk.status = \"fulfilled\";\n chunk.value = value;\n } catch (error) {\n chunk.status = \"rejected\", chunk.reason = error;\n }\n }\n function reportGlobalError(response, error) {\n response._chunks.forEach(function(chunk) {\n \"pending\" === chunk.status && triggerErrorOnChunk(chunk, error);\n });\n }\n function nullRefGetter() {\n return null;\n }\n function createLazyChunkWrapper(chunk) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: chunk,\n _init: readChunk\n };\n chunk = chunk._debugInfo || (chunk._debugInfo = []);\n lazyType._debugInfo = chunk;\n return lazyType;\n }\n function getChunk(response, id) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk || (chunk = createPendingChunk(response), chunks.set(id, chunk));\n return chunk;\n }\n function waitForReference(referencedChunk, parentObject, key, response, map, path) {\n function fulfill(value) {\n for(var i = 1; i < path.length; i++){\n for(; value.$$typeof === REACT_LAZY_TYPE;)if (value = value._payload, value === handler.chunk) value = handler.value;\n else if (\"fulfilled\" === value.status) value = value.value;\n else {\n path.splice(0, i - 1);\n value.then(fulfill, reject);\n return;\n }\n value = value[path[i]];\n }\n i = map(response, value, parentObject, key);\n parentObject[key] = i;\n \"\" === key && null === handler.value && (handler.value = i);\n if (parentObject[0] === REACT_ELEMENT_TYPE && \"object\" === typeof handler.value && null !== handler.value && handler.value.$$typeof === REACT_ELEMENT_TYPE) switch(value = handler.value, key){\n case \"3\":\n value.props = i;\n break;\n case \"4\":\n value._owner = i;\n }\n handler.deps--;\n 0 === handler.deps && (i = handler.chunk, null !== i && \"blocked\" === i.status && (value = i.value, i.status = \"fulfilled\", i.value = handler.value, null !== value && wakeChunk(value, handler.value)));\n }\n function reject(error) {\n if (!handler.errored) {\n var blockedValue = handler.value;\n handler.errored = !0;\n handler.value = error;\n var chunk = handler.chunk;\n null !== chunk && \"blocked\" === chunk.status && (\"object\" === typeof blockedValue && null !== blockedValue && blockedValue.$$typeof === REACT_ELEMENT_TYPE && (blockedValue = {\n name: getComponentNameFromType(blockedValue.type) || \"\",\n owner: blockedValue._owner\n }, (chunk._debugInfo || (chunk._debugInfo = [])).push(blockedValue)), triggerErrorOnChunk(chunk, error));\n }\n }\n if (initializingHandler) {\n var handler = initializingHandler;\n handler.deps++;\n } else handler = initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n };\n referencedChunk.then(fulfill, reject);\n return null;\n }\n function loadServerReference(response, metaData, parentObject, key) {\n if (!response._serverReferenceConfig) return createBoundServerReference(metaData, response._callServer, response._encodeFormAction, response._debugFindSourceMapURL);\n var serverReference = resolveServerReference(response._serverReferenceConfig, metaData.id);\n if (response = preloadModule(serverReference)) metaData.bound && (response = Promise.all([\n response,\n metaData.bound\n ]));\n else if (metaData.bound) response = Promise.resolve(metaData.bound);\n else return requireModule(serverReference);\n if (initializingHandler) {\n var handler = initializingHandler;\n handler.deps++;\n } else handler = initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n };\n response.then(function() {\n var resolvedValue = requireModule(serverReference);\n if (metaData.bound) {\n var boundArgs = metaData.bound.value.slice(0);\n boundArgs.unshift(null);\n resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs);\n }\n parentObject[key] = resolvedValue;\n \"\" === key && null === handler.value && (handler.value = resolvedValue);\n if (parentObject[0] === REACT_ELEMENT_TYPE && \"object\" === typeof handler.value && null !== handler.value && handler.value.$$typeof === REACT_ELEMENT_TYPE) switch(boundArgs = handler.value, key){\n case \"3\":\n boundArgs.props = resolvedValue;\n break;\n case \"4\":\n boundArgs._owner = resolvedValue;\n }\n handler.deps--;\n 0 === handler.deps && (resolvedValue = handler.chunk, null !== resolvedValue && \"blocked\" === resolvedValue.status && (boundArgs = resolvedValue.value, resolvedValue.status = \"fulfilled\", resolvedValue.value = handler.value, null !== boundArgs && wakeChunk(boundArgs, handler.value)));\n }, function(error) {\n if (!handler.errored) {\n var blockedValue = handler.value;\n handler.errored = !0;\n handler.value = error;\n var chunk = handler.chunk;\n null !== chunk && \"blocked\" === chunk.status && (\"object\" === typeof blockedValue && null !== blockedValue && blockedValue.$$typeof === REACT_ELEMENT_TYPE && (blockedValue = {\n name: getComponentNameFromType(blockedValue.type) || \"\",\n owner: blockedValue._owner\n }, (chunk._debugInfo || (chunk._debugInfo = [])).push(blockedValue)), triggerErrorOnChunk(chunk, error));\n }\n });\n return null;\n }\n function getOutlinedModel(response, reference, parentObject, key, map) {\n reference = reference.split(\":\");\n var id = parseInt(reference[0], 16);\n id = getChunk(response, id);\n switch(id.status){\n case \"resolved_model\":\n initializeModelChunk(id);\n break;\n case \"resolved_module\":\n initializeModuleChunk(id);\n }\n switch(id.status){\n case \"fulfilled\":\n for(var value = id.value, i = 1; i < reference.length; i++){\n for(; value.$$typeof === REACT_LAZY_TYPE;)if (value = value._payload, \"fulfilled\" === value.status) value = value.value;\n else return waitForReference(value, parentObject, key, response, map, reference.slice(i - 1));\n value = value[reference[i]];\n }\n response = map(response, value, parentObject, key);\n id._debugInfo && (\"object\" !== typeof response || null === response || !isArrayImpl(response) && \"function\" !== typeof response[ASYNC_ITERATOR] && response.$$typeof !== REACT_ELEMENT_TYPE || response._debugInfo || Object.defineProperty(response, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: id._debugInfo\n }));\n return response;\n case \"pending\":\n case \"blocked\":\n return waitForReference(id, parentObject, key, response, map, reference);\n default:\n return initializingHandler ? (initializingHandler.errored = !0, initializingHandler.value = id.reason) : initializingHandler = {\n parent: null,\n chunk: null,\n value: id.reason,\n deps: 0,\n errored: !0\n }, null;\n }\n }\n function createMap(response, model) {\n return new Map(model);\n }\n function createSet(response, model) {\n return new Set(model);\n }\n function createBlob(response, model) {\n return new Blob(model.slice(1), {\n type: model[0]\n });\n }\n function createFormData(response, model) {\n response = new FormData();\n for(var i = 0; i < model.length; i++)response.append(model[i][0], model[i][1]);\n return response;\n }\n function extractIterator(response, model) {\n return model[Symbol.iterator]();\n }\n function createModel(response, model) {\n return model;\n }\n function parseModelString(response, parentObject, key, value) {\n if (\"$\" === value[0]) {\n if (\"$\" === value) return null !== initializingHandler && \"0\" === key && (initializingHandler = {\n parent: initializingHandler,\n chunk: null,\n value: null,\n deps: 0,\n errored: !1\n }), REACT_ELEMENT_TYPE;\n switch(value[1]){\n case \"$\":\n return value.slice(1);\n case \"L\":\n return parentObject = parseInt(value.slice(2), 16), response = getChunk(response, parentObject), createLazyChunkWrapper(response);\n case \"@\":\n if (2 === value.length) return new Promise(function() {});\n parentObject = parseInt(value.slice(2), 16);\n return getChunk(response, parentObject);\n case \"S\":\n return Symbol.for(value.slice(2));\n case \"F\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, loadServerReference);\n case \"T\":\n parentObject = \"$\" + value.slice(2);\n response = response._tempRefs;\n if (null == response) throw Error(\"Missing a temporary reference set but the RSC response returned a temporary reference. Pass a temporaryReference option with the set that was used with the reply.\");\n return response.get(parentObject);\n case \"Q\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createMap);\n case \"W\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createSet);\n case \"B\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createBlob);\n case \"K\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, createFormData);\n case \"Z\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, resolveErrorDev);\n case \"i\":\n return value = value.slice(2), getOutlinedModel(response, value, parentObject, key, extractIterator);\n case \"I\":\n return Infinity;\n case \"-\":\n return \"$-0\" === value ? -0 : -Infinity;\n case \"N\":\n return NaN;\n case \"u\":\n return;\n case \"D\":\n return new Date(Date.parse(value.slice(2)));\n case \"n\":\n return BigInt(value.slice(2));\n case \"E\":\n try {\n return (0, eval)(value.slice(2));\n } catch (x) {\n return function() {};\n }\n case \"Y\":\n return Object.defineProperty(parentObject, key, {\n get: function() {\n return \"This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.\";\n },\n enumerable: !0,\n configurable: !1\n }), null;\n default:\n return value = value.slice(1), getOutlinedModel(response, value, parentObject, key, createModel);\n }\n }\n return value;\n }\n function missingCall() {\n throw Error('Trying to call a function from \"use server\" but the callServer option was not implemented in your router runtime.');\n }\n function ResponseInstance(bundlerConfig, serverReferenceConfig, moduleLoading, callServer, encodeFormAction, nonce, temporaryReferences, findSourceMapURL, replayConsole, environmentName) {\n var chunks = new Map();\n this._bundlerConfig = bundlerConfig;\n this._serverReferenceConfig = serverReferenceConfig;\n this._moduleLoading = moduleLoading;\n this._callServer = void 0 !== callServer ? callServer : missingCall;\n this._encodeFormAction = encodeFormAction;\n this._nonce = nonce;\n this._chunks = chunks;\n this._stringDecoder = new TextDecoder();\n this._fromJSON = null;\n this._rowLength = this._rowTag = this._rowID = this._rowState = 0;\n this._buffer = [];\n this._tempRefs = temporaryReferences;\n this._debugRootOwner = bundlerConfig = void 0 === ReactSharedInteralsServer || null === ReactSharedInteralsServer.A ? null : ReactSharedInteralsServer.A.getOwner();\n this._debugRootStack = null !== bundlerConfig ? Error(\"react-stack-top-frame\") : null;\n this._debugFindSourceMapURL = findSourceMapURL;\n this._replayConsole = replayConsole;\n this._rootEnvironmentName = void 0 === environmentName ? \"Server\" : environmentName;\n this._fromJSON = createFromJSONCallback(this);\n }\n function resolveModel(response, id, model) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk ? resolveModelChunk(chunk, model) : chunks.set(id, new ReactPromise(\"resolved_model\", model, null, response));\n }\n function resolveText(response, id, text) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk && \"pending\" !== chunk.status ? chunk.reason.enqueueValue(text) : chunks.set(id, new ReactPromise(\"fulfilled\", text, null, response));\n }\n function resolveBuffer(response, id, buffer) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk && \"pending\" !== chunk.status ? chunk.reason.enqueueValue(buffer) : chunks.set(id, new ReactPromise(\"fulfilled\", buffer, null, response));\n }\n function resolveModule(response, id, model) {\n var chunks = response._chunks, chunk = chunks.get(id);\n model = JSON.parse(model, response._fromJSON);\n var clientReference = resolveClientReference(response._bundlerConfig, model);\n prepareDestinationWithChunks(response._moduleLoading, model[1], response._nonce);\n if (model = preloadModule(clientReference)) {\n if (chunk) {\n var blockedChunk = chunk;\n blockedChunk.status = \"blocked\";\n } else blockedChunk = new ReactPromise(\"blocked\", null, null, response), chunks.set(id, blockedChunk);\n model.then(function() {\n return resolveModuleChunk(blockedChunk, clientReference);\n }, function(error) {\n return triggerErrorOnChunk(blockedChunk, error);\n });\n } else chunk ? resolveModuleChunk(chunk, clientReference) : chunks.set(id, new ReactPromise(\"resolved_module\", clientReference, null, response));\n }\n function resolveStream(response, id, stream, controller) {\n var chunks = response._chunks, chunk = chunks.get(id);\n chunk ? \"pending\" === chunk.status && (response = chunk.value, chunk.status = \"fulfilled\", chunk.value = stream, chunk.reason = controller, null !== response && wakeChunk(response, chunk.value)) : chunks.set(id, new ReactPromise(\"fulfilled\", stream, controller, response));\n }\n function startReadableStream(response, id, type) {\n var controller = null;\n type = new ReadableStream({\n type: type,\n start: function(c) {\n controller = c;\n }\n });\n var previousBlockedChunk = null;\n resolveStream(response, id, type, {\n enqueueValue: function(value) {\n null === previousBlockedChunk ? controller.enqueue(value) : previousBlockedChunk.then(function() {\n controller.enqueue(value);\n });\n },\n enqueueModel: function(json) {\n if (null === previousBlockedChunk) {\n var chunk = new ReactPromise(\"resolved_model\", json, null, response);\n initializeModelChunk(chunk);\n \"fulfilled\" === chunk.status ? controller.enqueue(chunk.value) : (chunk.then(function(v) {\n return controller.enqueue(v);\n }, function(e) {\n return controller.error(e);\n }), previousBlockedChunk = chunk);\n } else {\n chunk = previousBlockedChunk;\n var _chunk3 = createPendingChunk(response);\n _chunk3.then(function(v) {\n return controller.enqueue(v);\n }, function(e) {\n return controller.error(e);\n });\n previousBlockedChunk = _chunk3;\n chunk.then(function() {\n previousBlockedChunk === _chunk3 && (previousBlockedChunk = null);\n resolveModelChunk(_chunk3, json);\n });\n }\n },\n close: function() {\n if (null === previousBlockedChunk) controller.close();\n else {\n var blockedChunk = previousBlockedChunk;\n previousBlockedChunk = null;\n blockedChunk.then(function() {\n return controller.close();\n });\n }\n },\n error: function(error) {\n if (null === previousBlockedChunk) controller.error(error);\n else {\n var blockedChunk = previousBlockedChunk;\n previousBlockedChunk = null;\n blockedChunk.then(function() {\n return controller.error(error);\n });\n }\n }\n });\n }\n function asyncIterator() {\n return this;\n }\n function createIterator(next) {\n next = {\n next: next\n };\n next[ASYNC_ITERATOR] = asyncIterator;\n return next;\n }\n function startAsyncIterable(response, id, iterator) {\n var buffer = [], closed = !1, nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function() {\n var nextReadIndex = 0;\n return createIterator(function(arg) {\n if (void 0 !== arg) throw Error(\"Values cannot be passed to next() of AsyncIterables passed to Client Components.\");\n if (nextReadIndex === buffer.length) {\n if (closed) return new ReactPromise(\"fulfilled\", {\n done: !0,\n value: void 0\n }, null, response);\n buffer[nextReadIndex] = createPendingChunk(response);\n }\n return buffer[nextReadIndex++];\n });\n });\n resolveStream(response, id, iterator ? iterable[ASYNC_ITERATOR]() : iterable, {\n enqueueValue: function(value) {\n if (nextWriteIndex === buffer.length) buffer[nextWriteIndex] = new ReactPromise(\"fulfilled\", {\n done: !1,\n value: value\n }, null, response);\n else {\n var chunk = buffer[nextWriteIndex], resolveListeners = chunk.value, rejectListeners = chunk.reason;\n chunk.status = \"fulfilled\";\n chunk.value = {\n done: !1,\n value: value\n };\n null !== resolveListeners && wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners);\n }\n nextWriteIndex++;\n },\n enqueueModel: function(value) {\n nextWriteIndex === buffer.length ? buffer[nextWriteIndex] = createResolvedIteratorResultChunk(response, value, !1) : resolveIteratorResultChunk(buffer[nextWriteIndex], value, !1);\n nextWriteIndex++;\n },\n close: function(value) {\n closed = !0;\n nextWriteIndex === buffer.length ? buffer[nextWriteIndex] = createResolvedIteratorResultChunk(response, value, !0) : resolveIteratorResultChunk(buffer[nextWriteIndex], value, !0);\n for(nextWriteIndex++; nextWriteIndex < buffer.length;)resolveIteratorResultChunk(buffer[nextWriteIndex++], '\"$undefined\"', !0);\n },\n error: function(error) {\n closed = !0;\n for(nextWriteIndex === buffer.length && (buffer[nextWriteIndex] = createPendingChunk(response)); nextWriteIndex < buffer.length;)triggerErrorOnChunk(buffer[nextWriteIndex++], error);\n }\n });\n }\n function stopStream(response, id, row) {\n (response = response._chunks.get(id)) && \"fulfilled\" === response.status && response.reason.close(\"\" === row ? '\"$undefined\"' : row);\n }\n function resolveErrorDev(response, errorInfo) {\n var env = errorInfo.env;\n errorInfo = buildFakeCallStack(response, errorInfo.stack, env, Error.bind(null, errorInfo.message || \"An error occurred in the Server Components render but no message was provided\"));\n response = getRootTask(response, env);\n response = null != response ? response.run(errorInfo) : errorInfo();\n response.environmentName = env;\n return response;\n }\n function resolveHint(response, code, model) {\n response = JSON.parse(model, response._fromJSON);\n model = ReactDOMSharedInternals.d;\n switch(code){\n case \"D\":\n model.D(response);\n break;\n case \"C\":\n \"string\" === typeof response ? model.C(response) : model.C(response[0], response[1]);\n break;\n case \"L\":\n code = response[0];\n var as = response[1];\n 3 === response.length ? model.L(code, as, response[2]) : model.L(code, as);\n break;\n case \"m\":\n \"string\" === typeof response ? model.m(response) : model.m(response[0], response[1]);\n break;\n case \"X\":\n \"string\" === typeof response ? model.X(response) : model.X(response[0], response[1]);\n break;\n case \"S\":\n \"string\" === typeof response ? model.S(response) : model.S(response[0], 0 === response[1] ? void 0 : response[1], 3 === response.length ? response[2] : void 0);\n break;\n case \"M\":\n \"string\" === typeof response ? model.M(response) : model.M(response[0], response[1]);\n }\n }\n function createFakeFunction(name, filename, sourceMap, line, col, environmentName) {\n name || (name = \"<anonymous>\");\n var encodedName = JSON.stringify(name);\n 1 >= line ? (line = encodedName.length + 7, col = \"({\" + encodedName + \":_=>\" + \" \".repeat(col < line ? 0 : col - line) + \"_()})\\n/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\") : col = \"/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\" + \"\\n\".repeat(line - 2) + \"({\" + encodedName + \":_=>\\n\" + \" \".repeat(1 > col ? 0 : col - 1) + \"_()})\";\n filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n sourceMap ? (col += \"\\n//# sourceURL=rsc://React/\" + encodeURIComponent(environmentName) + \"/\" + encodeURI(filename) + \"?\" + fakeFunctionIdx++, col += \"\\n//# sourceMappingURL=\" + sourceMap) : col = filename ? col + (\"\\n//# sourceURL=\" + encodeURI(filename)) : col + \"\\n//# sourceURL=<anonymous>\";\n try {\n var fn = (0, eval)(col)[name];\n } catch (x) {\n fn = function(_) {\n return _();\n };\n }\n return fn;\n }\n function buildFakeCallStack(response, stack, environmentName, innerCall) {\n for(var i = 0; i < stack.length; i++){\n var frame = stack[i], frameKey = frame.join(\"-\") + \"-\" + environmentName, fn = fakeFunctionCache.get(frameKey);\n if (void 0 === fn) {\n fn = frame[0];\n var filename = frame[1], line = frame[2];\n frame = frame[3];\n var findSourceMapURL = response._debugFindSourceMapURL;\n findSourceMapURL = findSourceMapURL ? findSourceMapURL(filename, environmentName) : null;\n fn = createFakeFunction(fn, filename, findSourceMapURL, line, frame, environmentName);\n fakeFunctionCache.set(frameKey, fn);\n }\n innerCall = fn.bind(null, innerCall);\n }\n return innerCall;\n }\n function getRootTask(response, childEnvironmentName) {\n var rootTask = response._debugRootTask;\n return rootTask ? response._rootEnvironmentName !== childEnvironmentName ? (response = console.createTask.bind(console, '\"use ' + childEnvironmentName.toLowerCase() + '\"'), rootTask.run(response)) : rootTask : null;\n }\n function fakeJSXCallSite() {\n return Error(\"react-stack-top-frame\");\n }\n function initializeFakeStack(response, debugInfo) {\n void 0 === debugInfo.debugStack && (null != debugInfo.stack && (debugInfo.debugStack = createFakeJSXCallStackInDEV(response, debugInfo.stack, null == debugInfo.env ? \"\" : debugInfo.env)), null != debugInfo.owner && initializeFakeStack(response, debugInfo.owner));\n }\n function resolveDebugInfo(response, id, debugInfo) {\n null === debugInfo.owner && null != response._debugRootOwner ? (debugInfo.owner = response._debugRootOwner, debugInfo.debugStack = response._debugRootStack) : initializeFakeStack(response, debugInfo);\n response = getChunk(response, id);\n (response._debugInfo || (response._debugInfo = [])).push(debugInfo);\n }\n function getCurrentStackInDEV() {\n return \"\";\n }\n function resolveConsoleEntry(response, value) {\n if (response._replayConsole) {\n var payload = JSON.parse(value, response._fromJSON);\n value = payload[0];\n var stackTrace = payload[1], owner = payload[2], env = payload[3];\n payload = payload.slice(4);\n replayConsoleWithCallStackInDEV(response, value, stackTrace, owner, env, payload);\n }\n }\n function mergeBuffer(buffer, lastChunk) {\n for(var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++)byteLength += buffer[i].byteLength;\n byteLength = new Uint8Array(byteLength);\n for(var _i2 = i = 0; _i2 < l; _i2++){\n var chunk = buffer[_i2];\n byteLength.set(chunk, i);\n i += chunk.byteLength;\n }\n byteLength.set(lastChunk, i);\n return byteLength;\n }\n function resolveTypedArray(response, id, buffer, lastChunk, constructor, bytesPerElement) {\n buffer = 0 === buffer.length && 0 === lastChunk.byteOffset % bytesPerElement ? lastChunk : mergeBuffer(buffer, lastChunk);\n constructor = new constructor(buffer.buffer, buffer.byteOffset, buffer.byteLength / bytesPerElement);\n resolveBuffer(response, id, constructor);\n }\n function processFullBinaryRow(response, id, tag, buffer, chunk) {\n switch(tag){\n case 65:\n resolveBuffer(response, id, mergeBuffer(buffer, chunk).buffer);\n return;\n case 79:\n resolveTypedArray(response, id, buffer, chunk, Int8Array, 1);\n return;\n case 111:\n resolveBuffer(response, id, 0 === buffer.length ? chunk : mergeBuffer(buffer, chunk));\n return;\n case 85:\n resolveTypedArray(response, id, buffer, chunk, Uint8ClampedArray, 1);\n return;\n case 83:\n resolveTypedArray(response, id, buffer, chunk, Int16Array, 2);\n return;\n case 115:\n resolveTypedArray(response, id, buffer, chunk, Uint16Array, 2);\n return;\n case 76:\n resolveTypedArray(response, id, buffer, chunk, Int32Array, 4);\n return;\n case 108:\n resolveTypedArray(response, id, buffer, chunk, Uint32Array, 4);\n return;\n case 71:\n resolveTypedArray(response, id, buffer, chunk, Float32Array, 4);\n return;\n case 103:\n resolveTypedArray(response, id, buffer, chunk, Float64Array, 8);\n return;\n case 77:\n resolveTypedArray(response, id, buffer, chunk, BigInt64Array, 8);\n return;\n case 109:\n resolveTypedArray(response, id, buffer, chunk, BigUint64Array, 8);\n return;\n case 86:\n resolveTypedArray(response, id, buffer, chunk, DataView, 1);\n return;\n }\n for(var stringDecoder = response._stringDecoder, row = \"\", i = 0; i < buffer.length; i++)row += stringDecoder.decode(buffer[i], decoderOptions);\n row += stringDecoder.decode(chunk);\n processFullStringRow(response, id, tag, row);\n }\n function processFullStringRow(response, id, tag, row) {\n switch(tag){\n case 73:\n resolveModule(response, id, row);\n break;\n case 72:\n resolveHint(response, row[0], row.slice(1));\n break;\n case 69:\n row = JSON.parse(row);\n tag = resolveErrorDev(response, row);\n tag.digest = row.digest;\n row = response._chunks;\n var chunk = row.get(id);\n chunk ? triggerErrorOnChunk(chunk, tag) : row.set(id, new ReactPromise(\"rejected\", null, tag, response));\n break;\n case 84:\n resolveText(response, id, row);\n break;\n case 68:\n tag = new ReactPromise(\"resolved_model\", row, null, response);\n initializeModelChunk(tag);\n \"fulfilled\" === tag.status ? resolveDebugInfo(response, id, tag.value) : tag.then(function(v) {\n return resolveDebugInfo(response, id, v);\n }, function() {});\n break;\n case 87:\n resolveConsoleEntry(response, row);\n break;\n case 82:\n startReadableStream(response, id, void 0);\n break;\n case 114:\n startReadableStream(response, id, \"bytes\");\n break;\n case 88:\n startAsyncIterable(response, id, !1);\n break;\n case 120:\n startAsyncIterable(response, id, !0);\n break;\n case 67:\n stopStream(response, id, row);\n break;\n default:\n resolveModel(response, id, row);\n }\n }\n function createFromJSONCallback(response) {\n return function(key, value) {\n if (\"string\" === typeof value) return parseModelString(response, this, key, value);\n if (\"object\" === typeof value && null !== value) {\n if (value[0] === REACT_ELEMENT_TYPE) if (key = value[4], value = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: value[1],\n key: value[2],\n props: value[3],\n _owner: null === key ? response._debugRootOwner : key\n }, Object.defineProperty(value, \"ref\", {\n enumerable: !1,\n get: nullRefGetter\n }), value._store = {}, Object.defineProperty(value._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 1\n }), Object.defineProperty(value, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n }), null !== initializingHandler) {\n var handler = initializingHandler;\n initializingHandler = handler.parent;\n handler.errored ? (key = new ReactPromise(\"rejected\", null, handler.value, response), value = {\n name: getComponentNameFromType(value.type) || \"\",\n owner: value._owner\n }, key._debugInfo = [\n value\n ], value = createLazyChunkWrapper(key)) : 0 < handler.deps && (key = new ReactPromise(\"blocked\", null, null, response), handler.value = value, handler.chunk = key, value = Object.freeze.bind(Object, value.props), key.then(value, value), value = createLazyChunkWrapper(key));\n } else Object.freeze(value.props);\n return value;\n }\n return value;\n };\n }\n function noServerCall() {\n throw Error(\"Server Functions cannot be called during initial render. This would create a fetch waterfall. Try to use a Server Component to pass data to Client Components instead.\");\n }\n function createResponseFromOptions(options) {\n return new ResponseInstance(options.serverConsumerManifest.moduleMap, options.serverConsumerManifest.serverModuleMap, options.serverConsumerManifest.moduleLoading, noServerCall, options.encodeFormAction, \"string\" === typeof options.nonce ? options.nonce : void 0, options && options.temporaryReferences ? options.temporaryReferences : void 0, options && options.findSourceMapURL ? options.findSourceMapURL : void 0, options ? !0 === options.replayConsoleLogs : !1, options && options.environmentName ? options.environmentName : void 0);\n }\n function startReadingFromStream(response, stream) {\n function progress(_ref) {\n var value = _ref.value;\n if (_ref.done) reportGlobalError(response, Error(\"Connection closed.\"));\n else {\n var i = 0, rowState = response._rowState;\n _ref = response._rowID;\n for(var rowTag = response._rowTag, rowLength = response._rowLength, buffer = response._buffer, chunkLength = value.length; i < chunkLength;){\n var lastIdx = -1;\n switch(rowState){\n case 0:\n lastIdx = value[i++];\n 58 === lastIdx ? rowState = 1 : _ref = _ref << 4 | (96 < lastIdx ? lastIdx - 87 : lastIdx - 48);\n continue;\n case 1:\n rowState = value[i];\n 84 === rowState || 65 === rowState || 79 === rowState || 111 === rowState || 85 === rowState || 83 === rowState || 115 === rowState || 76 === rowState || 108 === rowState || 71 === rowState || 103 === rowState || 77 === rowState || 109 === rowState || 86 === rowState ? (rowTag = rowState, rowState = 2, i++) : 64 < rowState && 91 > rowState || 35 === rowState || 114 === rowState || 120 === rowState ? (rowTag = rowState, rowState = 3, i++) : (rowTag = 0, rowState = 3);\n continue;\n case 2:\n lastIdx = value[i++];\n 44 === lastIdx ? rowState = 4 : rowLength = rowLength << 4 | (96 < lastIdx ? lastIdx - 87 : lastIdx - 48);\n continue;\n case 3:\n lastIdx = value.indexOf(10, i);\n break;\n case 4:\n lastIdx = i + rowLength, lastIdx > value.length && (lastIdx = -1);\n }\n var offset = value.byteOffset + i;\n if (-1 < lastIdx) rowLength = new Uint8Array(value.buffer, offset, lastIdx - i), processFullBinaryRow(response, _ref, rowTag, buffer, rowLength), i = lastIdx, 3 === rowState && i++, rowLength = _ref = rowTag = rowState = 0, buffer.length = 0;\n else {\n value = new Uint8Array(value.buffer, offset, value.byteLength - i);\n buffer.push(value);\n rowLength -= value.byteLength;\n break;\n }\n }\n response._rowState = rowState;\n response._rowID = _ref;\n response._rowTag = rowTag;\n response._rowLength = rowLength;\n return reader.read().then(progress).catch(error);\n }\n }\n function error(e) {\n reportGlobalError(response, e);\n }\n var reader = stream.getReader();\n reader.read().then(progress).catch(error);\n }\n var ReactDOM = __webpack_require__(/*! react-dom */ \"(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js\"), React = __webpack_require__(/*! react */ \"(rsc)/./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js\"), decoderOptions = {\n stream: !0\n }, bind$1 = Function.prototype.bind, chunkCache = new Map(), ReactDOMSharedInternals = ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"), REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"), REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"), REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"), REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"), REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"), REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"), REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"), REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"), REACT_MEMO_TYPE = Symbol.for(\"react.memo\"), REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, jsxPropsParents = new WeakMap(), jsxChildrenParents = new WeakMap(), CLIENT_REFERENCE_TAG = Symbol.for(\"react.client.reference\"), ObjectPrototype = Object.prototype, knownServerReferences = new WeakMap(), boundCache = new WeakMap(), fakeServerFunctionIdx = 0, FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice, v8FrameRegExp = /^ {3} at (?:(.+) \\((.+):(\\d+):(\\d+)\\)|(?:async )?(.+):(\\d+):(\\d+))$/, jscSpiderMonkeyFrameRegExp = /(?:(.*)@)?(.*):(\\d+):(\\d+)/, REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n new (\"function\" === typeof WeakMap ? WeakMap : Map)();\n var ReactSharedInteralsServer = React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE || ReactSharedInteralsServer;\n ReactPromise.prototype = Object.create(Promise.prototype);\n ReactPromise.prototype.then = function(resolve, reject) {\n switch(this.status){\n case \"resolved_model\":\n initializeModelChunk(this);\n break;\n case \"resolved_module\":\n initializeModuleChunk(this);\n }\n switch(this.status){\n case \"fulfilled\":\n resolve(this.value);\n break;\n case \"pending\":\n case \"blocked\":\n resolve && (null === this.value && (this.value = []), this.value.push(resolve));\n reject && (null === this.reason && (this.reason = []), this.reason.push(reject));\n break;\n default:\n reject && reject(this.reason);\n }\n };\n var initializingHandler = null, fakeFunctionCache = new Map(), fakeFunctionIdx = 0, createFakeJSXCallStack = {\n \"react-stack-bottom-frame\": function(response, stack, environmentName) {\n return buildFakeCallStack(response, stack, environmentName, fakeJSXCallSite)();\n }\n }, createFakeJSXCallStackInDEV = createFakeJSXCallStack[\"react-stack-bottom-frame\"].bind(createFakeJSXCallStack), replayConsoleWithCallStack = {\n \"react-stack-bottom-frame\": function(response, methodName, stackTrace, owner, env, args) {\n var prevStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;\n try {\n a: {\n var offset = 0;\n switch(methodName){\n case \"dir\":\n case \"dirxml\":\n case \"groupEnd\":\n case \"table\":\n var JSCompiler_inline_result = bind$1.apply(console[methodName], [\n console\n ].concat(args));\n break a;\n case \"assert\":\n offset = 1;\n }\n var newArgs = args.slice(0);\n \"string\" === typeof newArgs[offset] ? newArgs.splice(offset, 1, \"\\u001b[0m\\u001b[7m%c%s\\u001b[0m%c \" + newArgs[offset], \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\", \" \" + env + \" \", \"\") : newArgs.splice(offset, 0, \"\\u001b[0m\\u001b[7m%c%s\\u001b[0m%c \", \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\", \" \" + env + \" \", \"\");\n newArgs.unshift(console);\n JSCompiler_inline_result = bind$1.apply(console[methodName], newArgs);\n }\n var callStack = buildFakeCallStack(response, stackTrace, env, JSCompiler_inline_result);\n null != owner && initializeFakeStack(response, owner);\n var rootTask = getRootTask(response, env);\n null != rootTask ? rootTask.run(callStack) : callStack();\n } finally{\n ReactSharedInternals.getCurrentStack = prevStack;\n }\n }\n }, replayConsoleWithCallStackInDEV = replayConsoleWithCallStack[\"react-stack-bottom-frame\"].bind(replayConsoleWithCallStack);\n exports.createFromFetch = function(promiseForResponse, options) {\n var response = createResponseFromOptions(options);\n promiseForResponse.then(function(r) {\n startReadingFromStream(response, r.body);\n }, function(e) {\n reportGlobalError(response, e);\n });\n return getChunk(response, 0);\n };\n exports.createFromReadableStream = function(stream, options) {\n options = createResponseFromOptions(options);\n startReadingFromStream(options, stream);\n return getChunk(options, 0);\n };\n exports.createServerReference = function(id) {\n return createServerReference$1(id, noServerCall);\n };\n exports.createTemporaryReferenceSet = function() {\n return new Map();\n };\n exports.encodeReply = function(value, options) {\n return new Promise(function(resolve, reject) {\n var abort = processReply(value, \"\", options && options.temporaryReferences ? options.temporaryReferences : void 0, resolve, reject);\n if (options && options.signal) {\n var signal = options.signal;\n if (signal.aborted) abort(signal.reason);\n else {\n var listener = function() {\n abort(signal.reason);\n signal.removeEventListener(\"abort\", listener);\n };\n signal.addEventListener(\"abort\", listener);\n }\n }\n });\n };\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXNlcnZlci1kb20td2VicGFjay9janMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC5lZGdlLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztDQVFDLEdBRVk7QUFDYixLQXdOTyxJQXZOTDtJQUNFLFNBQVNBLGdCQUFnQkMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLEtBQUs7UUFDdENELE9BQU9ELE1BQ0hHLE9BQU9DLGNBQWMsQ0FBQ0osS0FBS0MsS0FBSztZQUM5QkMsT0FBT0E7WUFDUEcsWUFBWSxDQUFDO1lBQ2JDLGNBQWMsQ0FBQztZQUNmQyxVQUFVLENBQUM7UUFDYixLQUNDUCxHQUFHLENBQUNDLElBQUksR0FBR0M7UUFDaEIsT0FBT0Y7SUFDVDtJQUNBLFNBQVNRLHVCQUF1QkMsYUFBYSxFQUFFQyxRQUFRO1FBQ3JELElBQUlELGVBQWU7WUFDakIsSUFBSUUsZ0JBQWdCRixhQUFhLENBQUNDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUMsSUFBS0QsZ0JBQWdCRSxpQkFBaUJBLGFBQWEsQ0FBQ0QsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUM5REMsZ0JBQWdCRixjQUFjRyxJQUFJO2lCQUMvQjtnQkFDSEgsZ0JBQWdCRSxpQkFBaUJBLGFBQWEsQ0FBQyxJQUFJO2dCQUNuRCxJQUFJLENBQUNGLGVBQ0gsTUFBTUksTUFDSixnQ0FDRUgsUUFBUSxDQUFDLEVBQUUsR0FDWDtnQkFFTkMsZ0JBQWdCRCxRQUFRLENBQUMsRUFBRTtZQUM3QjtZQUNBLE9BQU8sTUFBTUEsU0FBU0ksTUFBTSxHQUN4QjtnQkFBQ0wsY0FBY00sRUFBRTtnQkFBRU4sY0FBY08sTUFBTTtnQkFBRUw7Z0JBQWU7YUFBRSxHQUMxRDtnQkFBQ0YsY0FBY00sRUFBRTtnQkFBRU4sY0FBY08sTUFBTTtnQkFBRUw7YUFBYztRQUM3RDtRQUNBLE9BQU9EO0lBQ1Q7SUFDQSxTQUFT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SUEsT0FBT0MsT0FBTyxFQUFFRixNQUFNQyxPQUFPN2MsTUFBTTtxQkFDbEM7b0JBQ0gsSUFBSStjLFdBQVc7d0JBQ2JILE1BQU1DLE9BQU83YyxNQUFNO3dCQUNuQjZjLE9BQU9HLG1CQUFtQixDQUFDLFNBQVNEO29CQUN0QztvQkFDQUYsT0FBT0ksZ0JBQWdCLENBQUMsU0FBU0Y7Z0JBQ25DO1lBQ0Y7UUFDRjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcUGluZXN1Y2NlZWRcXERlc2t0b3BcXFdvcmtTcGFjZVxcdGVzdHdpZGdldFxcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxjb21waWxlZFxccmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrXFxjanNcXHJlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuZWRnZS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmVkZ2UuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAga2V5IGluIG9ialxuICAgICAgICA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICAgICAgd3JpdGFibGU6ICEwXG4gICAgICAgICAgfSlcbiAgICAgICAgOiAob2JqW2tleV0gPSB2YWx1ZSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlQ2xpZW50UmVmZXJlbmNlKGJ1bmRsZXJDb25maWcsIG1ldGFkYXRhKSB7XG4gICAgICBpZiAoYnVuZGxlckNvbmZpZykge1xuICAgICAgICB2YXIgbW9kdWxlRXhwb3J0cyA9IGJ1bmRsZXJDb25maWdbbWV0YWRhdGFbMF1dO1xuICAgICAgICBpZiAoKGJ1bmRsZXJDb25maWcgPSBtb2R1bGVFeHBvcnRzICYmIG1vZHVsZUV4cG9ydHNbbWV0YWRhdGFbMl1dKSlcbiAgICAgICAgICBtb2R1bGVFeHBvcnRzID0gYnVuZGxlckNvbmZpZy5uYW1lO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBidW5kbGVyQ29uZmlnID0gbW9kdWxlRXhwb3J0cyAmJiBtb2R1bGVFeHBvcnRzW1wiKlwiXTtcbiAgICAgICAgICBpZiAoIWJ1bmRsZXJDb25maWcpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUgXCInICtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YVswXSArXG4gICAgICAgICAgICAgICAgJ1wiIGluIHRoZSBSZWFjdCBTZXJ2ZXIgQ29uc3VtZXIgTWFuaWZlc3QuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gdGhlIFJlYWN0IFNlcnZlciBDb21wb25lbnRzIGJ1bmRsZXIuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBtb2R1bGVFeHBvcnRzID0gbWV0YWRhdGFbMl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDQgPT09IG1ldGFkYXRhLmxlbmd0aFxuICAgICAgICAgID8gW2J1bmRsZXJDb25maWcuaWQsIGJ1bmRsZXJDb25maWcuY2h1bmtzLCBtb2R1bGVFeHBvcnRzLCAxXVxuICAgICAgICAgIDogW2J1bmRsZXJDb25maWcuaWQsIGJ1bmRsZXJDb25maWcuY2h1bmtzLCBtb2R1bGVFeHBvcnRzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVNlcnZlclJlZmVyZW5jZShidW5kbGVyQ29uZmlnLCBpZCkge1xuICAgICAgdmFyIG5hbWUgPSBcIlwiLFxuICAgICAgICByZXNvbHZlZE1vZHVsZURhdGEgPSBidW5kbGVyQ29uZmlnW2lkXTtcbiAgICAgIGlmIChyZXNvbHZlZE1vZHVsZURhdGEpIG5hbWUgPSByZXNvbHZlZE1vZHVsZURhdGEubmFtZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgaWR4ID0gaWQubGFzdEluZGV4T2YoXCIjXCIpO1xuICAgICAgICAtMSAhPT0gaWR4ICYmXG4gICAgICAgICAgKChuYW1lID0gaWQuc2xpY2UoaWR4ICsgMSkpLFxuICAgICAgICAgIChyZXNvbHZlZE1vZHVsZURhdGEgPSBidW5kbGVyQ29uZmlnW2lkLnNsaWNlKDAsIGlkeCldKSk7XG4gICAgICAgIGlmICghcmVzb2x2ZWRNb2R1bGVEYXRhKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUgXCInICtcbiAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAnXCIgaW4gdGhlIFJlYWN0IFNlcnZlciBNYW5pZmVzdC4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgUmVhY3QgU2VydmVyIENvbXBvbmVudHMgYnVuZGxlci4nXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlZE1vZHVsZURhdGEuYXN5bmNcbiAgICAgICAgPyBbcmVzb2x2ZWRNb2R1bGVEYXRhLmlkLCByZXNvbHZlZE1vZHVsZURhdGEuY2h1bmtzLCBuYW1lLCAxXVxuICAgICAgICA6IFtyZXNvbHZlZE1vZHVsZURhdGEuaWQsIHJlc29sdmVkTW9kdWxlRGF0YS5jaHVua3MsIG5hbWVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1aXJlQXN5bmNNb2R1bGUoaWQpIHtcbiAgICAgIHZhciBwcm9taXNlID0gZ2xvYmFsVGhpcy5fX25leHRfcmVxdWlyZV9fKGlkKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBwcm9taXNlLnRoZW4gfHwgXCJmdWxmaWxsZWRcIiA9PT0gcHJvbWlzZS5zdGF0dXMpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgcHJvbWlzZS50aGVuKFxuICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBwcm9taXNlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgcHJvbWlzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgcHJvbWlzZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgcHJvbWlzZS5yZWFzb24gPSByZWFzb247XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaWdub3JlUmVqZWN0KCkge31cbiAgICBmdW5jdGlvbiBwcmVsb2FkTW9kdWxlKG1ldGFkYXRhKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgY2h1bmtzID0gbWV0YWRhdGFbMV0sIHByb21pc2VzID0gW10sIGkgPSAwO1xuICAgICAgICBpIDwgY2h1bmtzLmxlbmd0aDtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBjaHVua0lkID0gY2h1bmtzW2krK107XG4gICAgICAgIGNodW5rc1tpKytdO1xuICAgICAgICB2YXIgZW50cnkgPSBjaHVua0NhY2hlLmdldChjaHVua0lkKTtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZW50cnkpIHtcbiAgICAgICAgICBlbnRyeSA9IF9fd2VicGFja19jaHVua19sb2FkX18oY2h1bmtJZCk7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChlbnRyeSk7XG4gICAgICAgICAgdmFyIHJlc29sdmUgPSBjaHVua0NhY2hlLnNldC5iaW5kKGNodW5rQ2FjaGUsIGNodW5rSWQsIG51bGwpO1xuICAgICAgICAgIGVudHJ5LnRoZW4ocmVzb2x2ZSwgaWdub3JlUmVqZWN0KTtcbiAgICAgICAgICBjaHVua0NhY2hlLnNldChjaHVua0lkLCBlbnRyeSk7XG4gICAgICAgIH0gZWxzZSBudWxsICE9PSBlbnRyeSAmJiBwcm9taXNlcy5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiA0ID09PSBtZXRhZGF0YS5sZW5ndGhcbiAgICAgICAgPyAwID09PSBwcm9taXNlcy5sZW5ndGhcbiAgICAgICAgICA/IHJlcXVpcmVBc3luY01vZHVsZShtZXRhZGF0YVswXSlcbiAgICAgICAgICA6IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVBc3luY01vZHVsZShtZXRhZGF0YVswXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICA6IDAgPCBwcm9taXNlcy5sZW5ndGhcbiAgICAgICAgICA/IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWlyZU1vZHVsZShtZXRhZGF0YSkge1xuICAgICAgdmFyIG1vZHVsZUV4cG9ydHMgPSBnbG9iYWxUaGlzLl9fbmV4dF9yZXF1aXJlX18obWV0YWRhdGFbMF0pO1xuICAgICAgaWYgKDQgPT09IG1ldGFkYXRhLmxlbmd0aCAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtb2R1bGVFeHBvcnRzLnRoZW4pXG4gICAgICAgIGlmIChcImZ1bGZpbGxlZFwiID09PSBtb2R1bGVFeHBvcnRzLnN0YXR1cylcbiAgICAgICAgICBtb2R1bGVFeHBvcnRzID0gbW9kdWxlRXhwb3J0cy52YWx1ZTtcbiAgICAgICAgZWxzZSB0aHJvdyBtb2R1bGVFeHBvcnRzLnJlYXNvbjtcbiAgICAgIHJldHVybiBcIipcIiA9PT0gbWV0YWRhdGFbMl1cbiAgICAgICAgPyBtb2R1bGVFeHBvcnRzXG4gICAgICAgIDogXCJcIiA9PT0gbWV0YWRhdGFbMl1cbiAgICAgICAgICA/IG1vZHVsZUV4cG9ydHMuX19lc01vZHVsZVxuICAgICAgICAgICAgPyBtb2R1bGVFeHBvcnRzLmRlZmF1bHRcbiAgICAgICAgICAgIDogbW9kdWxlRXhwb3J0c1xuICAgICAgICAgIDogbW9kdWxlRXhwb3J0c1ttZXRhZGF0YVsyXV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZXBhcmVEZXN0aW5hdGlvbldpdGhDaHVua3MoXG4gICAgICBtb2R1bGVMb2FkaW5nLFxuICAgICAgY2h1bmtzLFxuICAgICAgbm9uY2UkanNjb21wJDBcbiAgICApIHtcbiAgICAgIGlmIChudWxsICE9PSBtb2R1bGVMb2FkaW5nKVxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNodW5rcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBub25jZSA9IG5vbmNlJGpzY29tcCQwLFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZCxcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdCRqc2NvbXAkMCA9IEpTQ29tcGlsZXJfdGVtcF9jb25zdC5YLFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0JGpzY29tcCQxID0gbW9kdWxlTG9hZGluZy5wcmVmaXggKyBjaHVua3NbaV07XG4gICAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IG1vZHVsZUxvYWRpbmcuY3Jvc3NPcmlnaW47XG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgICAgPyBcInVzZS1jcmVkZW50aWFsc1wiID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgICAgICA/IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICA6IHZvaWQgMDtcbiAgICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QkanNjb21wJDAuY2FsbChcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdCxcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdCRqc2NvbXAkMSxcbiAgICAgICAgICAgIHsgY3Jvc3NPcmlnaW46IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCwgbm9uY2U6IG5vbmNlIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgICAgaWYgKG51bGwgPT09IG1heWJlSXRlcmFibGUgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG1heWJlSXRlcmFibGUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgbWF5YmVJdGVyYWJsZSA9XG4gICAgICAgIChNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdKSB8fFxuICAgICAgICBtYXliZUl0ZXJhYmxlW1wiQEBpdGVyYXRvclwiXTtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlID8gbWF5YmVJdGVyYWJsZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0UHJvdG90eXBlKG9iamVjdCkge1xuICAgICAgaWYgKCFvYmplY3QpIHJldHVybiAhMTtcbiAgICAgIHZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuICAgICAgaWYgKG9iamVjdCA9PT0gT2JqZWN0UHJvdG90eXBlKSByZXR1cm4gITA7XG4gICAgICBpZiAoZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkgcmV0dXJuICExO1xuICAgICAgb2JqZWN0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgaSsrKVxuICAgICAgICBpZiAoIShvYmplY3RbaV0gaW4gT2JqZWN0UHJvdG90eXBlKSkgcmV0dXJuICExO1xuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1NpbXBsZU9iamVjdChvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3RQcm90b3R5cGUoZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkpIHJldHVybiAhMTtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBuYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCksIGkgPSAwO1xuICAgICAgICBpIDwgbmFtZXMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBuYW1lc1tpXSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZGVzY3JpcHRvciB8fFxuICAgICAgICAgICghZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmXG4gICAgICAgICAgICAoKFwia2V5XCIgIT09IG5hbWVzW2ldICYmIFwicmVmXCIgIT09IG5hbWVzW2ldKSB8fFxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBkZXNjcmlwdG9yLmdldCkpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9iamVjdE5hbWUob2JqZWN0KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgICAuY2FsbChvYmplY3QpXG4gICAgICAgIC5yZXBsYWNlKC9eXFxbb2JqZWN0ICguKilcXF0kLywgZnVuY3Rpb24gKG0sIHAwKSB7XG4gICAgICAgICAgcmV0dXJuIHAwO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVLZXlGb3JFcnJvck1lc3NhZ2Uoa2V5KSB7XG4gICAgICB2YXIgZW5jb2RlZEtleSA9IEpTT04uc3RyaW5naWZ5KGtleSk7XG4gICAgICByZXR1cm4gJ1wiJyArIGtleSArICdcIicgPT09IGVuY29kZWRLZXkgPyBrZXkgOiBlbmNvZGVkS2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgMTAgPj0gdmFsdWUubGVuZ3RoID8gdmFsdWUgOiB2YWx1ZS5zbGljZSgwLCAxMCkgKyBcIi4uLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbCh2YWx1ZSkpIHJldHVybiBcIlsuLi5dXCI7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHZhbHVlICYmIHZhbHVlLiQkdHlwZW9mID09PSBDTElFTlRfUkVGRVJFTkNFX1RBRylcbiAgICAgICAgICAgIHJldHVybiBcImNsaWVudFwiO1xuICAgICAgICAgIHZhbHVlID0gb2JqZWN0TmFtZSh2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHZhbHVlID8gXCJ7Li4ufVwiIDogdmFsdWU7XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIHJldHVybiB2YWx1ZS4kJHR5cGVvZiA9PT0gQ0xJRU5UX1JFRkVSRU5DRV9UQUdcbiAgICAgICAgICAgID8gXCJjbGllbnRcIlxuICAgICAgICAgICAgOiAodmFsdWUgPSB2YWx1ZS5kaXNwbGF5TmFtZSB8fCB2YWx1ZS5uYW1lKVxuICAgICAgICAgICAgICA/IFwiZnVuY3Rpb24gXCIgKyB2YWx1ZVxuICAgICAgICAgICAgICA6IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlKSB7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZS5yZW5kZXIpO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZS50eXBlKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZShwYXlsb2FkKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2Uob2JqZWN0T3JBcnJheSwgZXhwYW5kZWROYW1lKSB7XG4gICAgICB2YXIgb2JqS2luZCA9IG9iamVjdE5hbWUob2JqZWN0T3JBcnJheSk7XG4gICAgICBpZiAoXCJPYmplY3RcIiAhPT0gb2JqS2luZCAmJiBcIkFycmF5XCIgIT09IG9iaktpbmQpIHJldHVybiBvYmpLaW5kO1xuICAgICAgdmFyIHN0YXJ0ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IDA7XG4gICAgICBpZiAoaXNBcnJheUltcGwob2JqZWN0T3JBcnJheSkpXG4gICAgICAgIGlmIChqc3hDaGlsZHJlblBhcmVudHMuaGFzKG9iamVjdE9yQXJyYXkpKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBqc3hDaGlsZHJlblBhcmVudHMuZ2V0KG9iamVjdE9yQXJyYXkpO1xuICAgICAgICAgIG9iaktpbmQgPSBcIjxcIiArIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZSkgKyBcIj5cIjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdE9yQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdE9yQXJyYXlbaV07XG4gICAgICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICA6IFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBudWxsICE9PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgPyBcIntcIiArIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHZhbHVlKSArIFwifVwiXG4gICAgICAgICAgICAgICAgICA6IFwie1wiICsgZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZSh2YWx1ZSkgKyBcIn1cIjtcbiAgICAgICAgICAgIFwiXCIgKyBpID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgICAgICAgPyAoKHN0YXJ0ID0gb2JqS2luZC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIChsZW5ndGggPSB2YWx1ZS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIChvYmpLaW5kICs9IHZhbHVlKSlcbiAgICAgICAgICAgICAgOiAob2JqS2luZCA9XG4gICAgICAgICAgICAgICAgICAxNSA+IHZhbHVlLmxlbmd0aCAmJiA0MCA+IG9iaktpbmQubGVuZ3RoICsgdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gb2JqS2luZCArIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogb2JqS2luZCArIFwiey4uLn1cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9iaktpbmQgKz0gXCI8L1wiICsgZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlKSArIFwiPlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9iaktpbmQgPSBcIltcIjtcbiAgICAgICAgICBmb3IgKHR5cGUgPSAwOyB0eXBlIDwgb2JqZWN0T3JBcnJheS5sZW5ndGg7IHR5cGUrKylcbiAgICAgICAgICAgIDAgPCB0eXBlICYmIChvYmpLaW5kICs9IFwiLCBcIiksXG4gICAgICAgICAgICAgIChpID0gb2JqZWN0T3JBcnJheVt0eXBlXSksXG4gICAgICAgICAgICAgIChpID1cbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgaSAmJiBudWxsICE9PSBpXG4gICAgICAgICAgICAgICAgICA/IGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKGkpXG4gICAgICAgICAgICAgICAgICA6IGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UoaSkpLFxuICAgICAgICAgICAgICBcIlwiICsgdHlwZSA9PT0gZXhwYW5kZWROYW1lXG4gICAgICAgICAgICAgICAgPyAoKHN0YXJ0ID0gb2JqS2luZC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgKGxlbmd0aCA9IGkubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgIChvYmpLaW5kICs9IGkpKVxuICAgICAgICAgICAgICAgIDogKG9iaktpbmQgPVxuICAgICAgICAgICAgICAgICAgICAxMCA+IGkubGVuZ3RoICYmIDQwID4gb2JqS2luZC5sZW5ndGggKyBpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgID8gb2JqS2luZCArIGlcbiAgICAgICAgICAgICAgICAgICAgICA6IG9iaktpbmQgKyBcIi4uLlwiKTtcbiAgICAgICAgICBvYmpLaW5kICs9IFwiXVwiO1xuICAgICAgICB9XG4gICAgICBlbHNlIGlmIChvYmplY3RPckFycmF5LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpXG4gICAgICAgIG9iaktpbmQgPSBcIjxcIiArIGRlc2NyaWJlRWxlbWVudFR5cGUob2JqZWN0T3JBcnJheS50eXBlKSArIFwiLz5cIjtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAob2JqZWN0T3JBcnJheS4kJHR5cGVvZiA9PT0gQ0xJRU5UX1JFRkVSRU5DRV9UQUcpIHJldHVybiBcImNsaWVudFwiO1xuICAgICAgICBpZiAoanN4UHJvcHNQYXJlbnRzLmhhcyhvYmplY3RPckFycmF5KSkge1xuICAgICAgICAgIG9iaktpbmQgPSBqc3hQcm9wc1BhcmVudHMuZ2V0KG9iamVjdE9yQXJyYXkpO1xuICAgICAgICAgIG9iaktpbmQgPSBcIjxcIiArIChkZXNjcmliZUVsZW1lbnRUeXBlKG9iaktpbmQpIHx8IFwiLi4uXCIpO1xuICAgICAgICAgIHR5cGUgPSBPYmplY3Qua2V5cyhvYmplY3RPckFycmF5KTtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHlwZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb2JqS2luZCArPSBcIiBcIjtcbiAgICAgICAgICAgIHZhbHVlID0gdHlwZVtpXTtcbiAgICAgICAgICAgIG9iaktpbmQgKz0gZGVzY3JpYmVLZXlGb3JFcnJvck1lc3NhZ2UodmFsdWUpICsgXCI9XCI7XG4gICAgICAgICAgICB2YXIgX3ZhbHVlMiA9IG9iamVjdE9yQXJyYXlbdmFsdWVdO1xuICAgICAgICAgICAgdmFyIF9zdWJzdHIyID1cbiAgICAgICAgICAgICAgdmFsdWUgPT09IGV4cGFuZGVkTmFtZSAmJlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgX3ZhbHVlMiAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBfdmFsdWUyXG4gICAgICAgICAgICAgICAgPyBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShfdmFsdWUyKVxuICAgICAgICAgICAgICAgIDogZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZShfdmFsdWUyKTtcbiAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBfdmFsdWUyICYmIChfc3Vic3RyMiA9IFwie1wiICsgX3N1YnN0cjIgKyBcIn1cIik7XG4gICAgICAgICAgICB2YWx1ZSA9PT0gZXhwYW5kZWROYW1lXG4gICAgICAgICAgICAgID8gKChzdGFydCA9IG9iaktpbmQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAobGVuZ3RoID0gX3N1YnN0cjIubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAob2JqS2luZCArPSBfc3Vic3RyMikpXG4gICAgICAgICAgICAgIDogKG9iaktpbmQgPVxuICAgICAgICAgICAgICAgICAgMTAgPiBfc3Vic3RyMi5sZW5ndGggJiYgNDAgPiBvYmpLaW5kLmxlbmd0aCArIF9zdWJzdHIyLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IG9iaktpbmQgKyBfc3Vic3RyMlxuICAgICAgICAgICAgICAgICAgICA6IG9iaktpbmQgKyBcIi4uLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqS2luZCArPSBcIj5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpLaW5kID0gXCJ7XCI7XG4gICAgICAgICAgdHlwZSA9IE9iamVjdC5rZXlzKG9iamVjdE9yQXJyYXkpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgMCA8IGkgJiYgKG9iaktpbmQgKz0gXCIsIFwiKSxcbiAgICAgICAgICAgICAgKHZhbHVlID0gdHlwZVtpXSksXG4gICAgICAgICAgICAgIChvYmpLaW5kICs9IGRlc2NyaWJlS2V5Rm9yRXJyb3JNZXNzYWdlKHZhbHVlKSArIFwiOiBcIiksXG4gICAgICAgICAgICAgIChfdmFsdWUyID0gb2JqZWN0T3JBcnJheVt2YWx1ZV0pLFxuICAgICAgICAgICAgICAoX3ZhbHVlMiA9XG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIF92YWx1ZTIgJiYgbnVsbCAhPT0gX3ZhbHVlMlxuICAgICAgICAgICAgICAgICAgPyBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShfdmFsdWUyKVxuICAgICAgICAgICAgICAgICAgOiBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpKSxcbiAgICAgICAgICAgICAgdmFsdWUgPT09IGV4cGFuZGVkTmFtZVxuICAgICAgICAgICAgICAgID8gKChzdGFydCA9IG9iaktpbmQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgIChsZW5ndGggPSBfdmFsdWUyLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAob2JqS2luZCArPSBfdmFsdWUyKSlcbiAgICAgICAgICAgICAgICA6IChvYmpLaW5kID1cbiAgICAgICAgICAgICAgICAgICAgMTAgPiBfdmFsdWUyLmxlbmd0aCAmJiA0MCA+IG9iaktpbmQubGVuZ3RoICsgX3ZhbHVlMi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA/IG9iaktpbmQgKyBfdmFsdWUyXG4gICAgICAgICAgICAgICAgICAgICAgOiBvYmpLaW5kICsgXCIuLi5cIik7XG4gICAgICAgICAgb2JqS2luZCArPSBcIn1cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZXhwYW5kZWROYW1lXG4gICAgICAgID8gb2JqS2luZFxuICAgICAgICA6IC0xIDwgc3RhcnQgJiYgMCA8IGxlbmd0aFxuICAgICAgICAgID8gKChvYmplY3RPckFycmF5ID0gXCIgXCIucmVwZWF0KHN0YXJ0KSArIFwiXlwiLnJlcGVhdChsZW5ndGgpKSxcbiAgICAgICAgICAgIFwiXFxuICBcIiArIG9iaktpbmQgKyBcIlxcbiAgXCIgKyBvYmplY3RPckFycmF5KVxuICAgICAgICAgIDogXCJcXG4gIFwiICsgb2JqS2luZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2VyaWFsaXplTnVtYmVyKG51bWJlcikge1xuICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG4gICAgICAgID8gMCA9PT0gbnVtYmVyICYmIC1JbmZpbml0eSA9PT0gMSAvIG51bWJlclxuICAgICAgICAgID8gXCIkLTBcIlxuICAgICAgICAgIDogbnVtYmVyXG4gICAgICAgIDogSW5maW5pdHkgPT09IG51bWJlclxuICAgICAgICAgID8gXCIkSW5maW5pdHlcIlxuICAgICAgICAgIDogLUluZmluaXR5ID09PSBudW1iZXJcbiAgICAgICAgICAgID8gXCIkLUluZmluaXR5XCJcbiAgICAgICAgICAgIDogXCIkTmFOXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZXBseShcbiAgICAgIHJvb3QsXG4gICAgICBmb3JtRmllbGRQcmVmaXgsXG4gICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdFxuICAgICkge1xuICAgICAgZnVuY3Rpb24gc2VyaWFsaXplVHlwZWRBcnJheSh0YWcsIHR5cGVkQXJyYXkpIHtcbiAgICAgICAgdHlwZWRBcnJheSA9IG5ldyBCbG9iKFtcbiAgICAgICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgICAgIHR5cGVkQXJyYXkuYnVmZmVyLFxuICAgICAgICAgICAgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdHlwZWRBcnJheS5ieXRlTGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICBdKTtcbiAgICAgICAgdmFyIGJsb2JJZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgYmxvYklkLCB0eXBlZEFycmF5KTtcbiAgICAgICAgcmV0dXJuIFwiJFwiICsgdGFnICsgYmxvYklkLnRvU3RyaW5nKDE2KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZUJpbmFyeVJlYWRlcihyZWFkZXIpIHtcbiAgICAgICAgZnVuY3Rpb24gcHJvZ3Jlc3MoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5kb25lXG4gICAgICAgICAgICA/ICgoZW50cnkgPSBuZXh0UGFydElkKyspLFxuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBlbnRyeSwgbmV3IEJsb2IoYnVmZmVyKSksXG4gICAgICAgICAgICAgIGRhdGEuYXBwZW5kKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZFByZWZpeCArIHN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICdcIiRvJyArIGVudHJ5LnRvU3RyaW5nKDE2KSArICdcIidcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIFwiQ1wiKSxcbiAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzLS0sXG4gICAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKGRhdGEpKVxuICAgICAgICAgICAgOiAoYnVmZmVyLnB1c2goZW50cnkudmFsdWUpLFxuICAgICAgICAgICAgICByZWFkZXIucmVhZChuZXcgVWludDhBcnJheSgxMDI0KSkudGhlbihwcm9ncmVzcywgcmVqZWN0KSk7XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICB2YXIgZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgICBwZW5kaW5nUGFydHMrKztcbiAgICAgICAgdmFyIHN0cmVhbUlkID0gbmV4dFBhcnRJZCsrLFxuICAgICAgICAgIGJ1ZmZlciA9IFtdO1xuICAgICAgICByZWFkZXIucmVhZChuZXcgVWludDhBcnJheSgxMDI0KSkudGhlbihwcm9ncmVzcywgcmVqZWN0KTtcbiAgICAgICAgcmV0dXJuIFwiJHJcIiArIHN0cmVhbUlkLnRvU3RyaW5nKDE2KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZVJlYWRlcihyZWFkZXIpIHtcbiAgICAgICAgZnVuY3Rpb24gcHJvZ3Jlc3MoZW50cnkpIHtcbiAgICAgICAgICBpZiAoZW50cnkuZG9uZSlcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHN0cmVhbUlkLCBcIkNcIiksXG4gICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tLFxuICAgICAgICAgICAgICAwID09PSBwZW5kaW5nUGFydHMgJiYgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgcGFydEpTT04gPSBKU09OLnN0cmluZ2lmeShlbnRyeS52YWx1ZSwgcmVzb2x2ZVRvSlNPTik7XG4gICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHN0cmVhbUlkLCBwYXJ0SlNPTik7XG4gICAgICAgICAgICAgIHJlYWRlci5yZWFkKCkudGhlbihwcm9ncmVzcywgcmVqZWN0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgdmFyIGRhdGEgPSBmb3JtRGF0YTtcbiAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgIHZhciBzdHJlYW1JZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICByZXR1cm4gXCIkUlwiICsgc3RyZWFtSWQudG9TdHJpbmcoMTYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2VyaWFsaXplUmVhZGFibGVTdHJlYW0oc3RyZWFtKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGJpbmFyeVJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoeyBtb2RlOiBcImJ5b2JcIiB9KTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIHJldHVybiBzZXJpYWxpemVSZWFkZXIoc3RyZWFtLmdldFJlYWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplQmluYXJ5UmVhZGVyKGJpbmFyeVJlYWRlcik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVBc3luY0l0ZXJhYmxlKGl0ZXJhYmxlLCBpdGVyYXRvcikge1xuICAgICAgICBmdW5jdGlvbiBwcm9ncmVzcyhlbnRyeSkge1xuICAgICAgICAgIGlmIChlbnRyeS5kb25lKSB7XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSBlbnRyeS52YWx1ZSlcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIFwiQ1wiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgcGFydEpTT04gPSBKU09OLnN0cmluZ2lmeShlbnRyeS52YWx1ZSwgcmVzb2x2ZVRvSlNPTik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIFwiQ1wiICsgcGFydEpTT04pO1xuICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGVuZGluZ1BhcnRzLS07XG4gICAgICAgICAgICAwID09PSBwZW5kaW5nUGFydHMgJiYgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBfcGFydEpTT04gPSBKU09OLnN0cmluZ2lmeShlbnRyeS52YWx1ZSwgcmVzb2x2ZVRvSlNPTik7XG4gICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHN0cmVhbUlkLCBfcGFydEpTT04pO1xuICAgICAgICAgICAgICBpdGVyYXRvci5uZXh0KCkudGhlbihwcm9ncmVzcywgcmVqZWN0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgkMCkge1xuICAgICAgICAgICAgICByZWplY3QoeCQwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgIHZhciBkYXRhID0gZm9ybURhdGE7XG4gICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICB2YXIgc3RyZWFtSWQgPSBuZXh0UGFydElkKys7XG4gICAgICAgIGl0ZXJhYmxlID0gaXRlcmFibGUgPT09IGl0ZXJhdG9yO1xuICAgICAgICBpdGVyYXRvci5uZXh0KCkudGhlbihwcm9ncmVzcywgcmVqZWN0KTtcbiAgICAgICAgcmV0dXJuIFwiJFwiICsgKGl0ZXJhYmxlID8gXCJ4XCIgOiBcIlhcIikgKyBzdHJlYW1JZC50b1N0cmluZygxNik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZXNvbHZlVG9KU09OKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB0aGlzW2tleV07XG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcmlnaW5hbFZhbHVlIHx8XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9PT0gdmFsdWUgfHxcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgIChcIk9iamVjdFwiICE9PSBvYmplY3ROYW1lKG9yaWdpbmFsVmFsdWUpXG4gICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gJXMgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZC4lc1wiLFxuICAgICAgICAgICAgICAgIG9iamVjdE5hbWUob3JpZ2luYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gT2JqZWN0cyB3aXRoIHRvSlNPTiBtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkLiBDb252ZXJ0IGl0IG1hbnVhbGx5IHRvIGEgc2ltcGxlIHZhbHVlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHByb3BzLiVzXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIHN3aXRjaCAodmFsdWUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmIC0xID09PSBrZXkuaW5kZXhPZihcIjpcIikpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50UmVmZXJlbmNlID0gd3JpdHRlbk9iamVjdHMuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMuc2V0KHBhcmVudFJlZmVyZW5jZSArIFwiOlwiICsga2V5LCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIFwiJFRcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0IEVsZW1lbnQgY2Fubm90IGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudCB3aXRob3V0IGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzZXQuIFBhc3MgYSBUZW1wb3JhcnlSZWZlcmVuY2VTZXQgdG8gdGhlIG9wdGlvbnMuXCIgK1xuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB2YWx1ZS5fcGF5bG9hZDtcbiAgICAgICAgICAgICAgdmFyIGluaXQgPSB2YWx1ZS5faW5pdDtcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICAgICAgICBwZW5kaW5nUGFydHMrKztcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPSBpbml0KG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhciBsYXp5SWQgPSBuZXh0UGFydElkKyssXG4gICAgICAgICAgICAgICAgICBwYXJ0SlNPTiA9IHNlcmlhbGl6ZU1vZGVsKHBhcmVudFJlZmVyZW5jZSwgbGF6eUlkKTtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgbGF6eUlkLCBwYXJ0SlNPTik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiJFwiICsgbGF6eUlkLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB4ICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSB4ICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB4LnRoZW5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICAgICAgICAgICAgdmFyIF9sYXp5SWQgPSBuZXh0UGFydElkKys7XG4gICAgICAgICAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJ0SlNPTjIgPSBzZXJpYWxpemVNb2RlbCh2YWx1ZSwgX2xhenlJZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBfZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgICAgICAgICAgICAgICAgIF9kYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBfbGF6eUlkLCBfcGFydEpTT04yKTtcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUGFydHMtLTtcbiAgICAgICAgICAgICAgICAgICAgICAwID09PSBwZW5kaW5nUGFydHMgJiYgcmVzb2x2ZShfZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgeC50aGVuKHBhcmVudFJlZmVyZW5jZSwgcGFyZW50UmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIiRcIiArIF9sYXp5SWQudG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlLnRoZW4pIHtcbiAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICAgICAgdmFyIHByb21pc2VJZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgICAgIHZhbHVlLnRoZW4oZnVuY3Rpb24gKHBhcnRWYWx1ZSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBfcGFydEpTT04zID0gc2VyaWFsaXplTW9kZWwocGFydFZhbHVlLCBwcm9taXNlSWQpO1xuICAgICAgICAgICAgICAgIHBhcnRWYWx1ZSA9IGZvcm1EYXRhO1xuICAgICAgICAgICAgICAgIHBhcnRWYWx1ZS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgcHJvbWlzZUlkLCBfcGFydEpTT04zKTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUGFydHMtLTtcbiAgICAgICAgICAgICAgICAwID09PSBwZW5kaW5nUGFydHMgJiYgcmVzb2x2ZShwYXJ0VmFsdWUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgIHJldHVybiBcIiRAXCIgKyBwcm9taXNlSWQudG9TdHJpbmcoMTYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPSB3cml0dGVuT2JqZWN0cy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICAgIGlmIChtb2RlbFJvb3QgPT09IHZhbHVlKSBtb2RlbFJvb3QgPSBudWxsO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gcGFyZW50UmVmZXJlbmNlO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIC0xID09PSBrZXkuaW5kZXhPZihcIjpcIikgJiZcbiAgICAgICAgICAgICAgKChwYXJlbnRSZWZlcmVuY2UgPSB3cml0dGVuT2JqZWN0cy5nZXQodGhpcykpLFxuICAgICAgICAgICAgICB2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSAmJlxuICAgICAgICAgICAgICAgICgocGFyZW50UmVmZXJlbmNlID0gcGFyZW50UmVmZXJlbmNlICsgXCI6XCIgKyBrZXkpLFxuICAgICAgICAgICAgICAgIHdyaXR0ZW5PYmplY3RzLnNldCh2YWx1ZSwgcGFyZW50UmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IHRlbXBvcmFyeVJlZmVyZW5jZXMgJiZcbiAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMuc2V0KHBhcmVudFJlZmVyZW5jZSwgdmFsdWUpKSk7XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgICAgICB2YXIgX2RhdGEzID0gZm9ybURhdGE7XG4gICAgICAgICAgICBrZXkgPSBuZXh0UGFydElkKys7XG4gICAgICAgICAgICB2YXIgcHJlZml4ID0gZm9ybUZpZWxkUHJlZml4ICsga2V5ICsgXCJfXCI7XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5hbFZhbHVlLCBvcmlnaW5hbEtleSkge1xuICAgICAgICAgICAgICBfZGF0YTMuYXBwZW5kKHByZWZpeCArIG9yaWdpbmFsS2V5LCBvcmlnaW5hbFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFwiJEtcIiArIGtleS50b1N0cmluZygxNik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBuZXh0UGFydElkKyspLFxuICAgICAgICAgICAgICAocGFyZW50UmVmZXJlbmNlID0gc2VyaWFsaXplTW9kZWwoQXJyYXkuZnJvbSh2YWx1ZSksIGtleSkpLFxuICAgICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSksXG4gICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBrZXksIHBhcmVudFJlZmVyZW5jZSksXG4gICAgICAgICAgICAgIFwiJFFcIiArIGtleS50b1N0cmluZygxNilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIChwYXJlbnRSZWZlcmVuY2UgPSBzZXJpYWxpemVNb2RlbChBcnJheS5mcm9tKHZhbHVlKSwga2V5KSksXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGtleSwgcGFyZW50UmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgXCIkV1wiICsga2V5LnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBuZXcgQmxvYihbdmFsdWVdKSksXG4gICAgICAgICAgICAgIChwYXJlbnRSZWZlcmVuY2UgPSBuZXh0UGFydElkKyspLFxuICAgICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSksXG4gICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBwYXJlbnRSZWZlcmVuY2UsIGtleSksXG4gICAgICAgICAgICAgIFwiJEFcIiArIHBhcmVudFJlZmVyZW5jZS50b1N0cmluZygxNilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50OEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJPXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJvXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiVVwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50MTZBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiU1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDE2QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcInNcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEludDMyQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIkxcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJsXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIkdcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiZ1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQmlnSW50NjRBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiTVwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQmlnVWludDY0QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIm1cIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFWaWV3KSByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIlZcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBCbG9iICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgKGtleSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBrZXksIHZhbHVlKSxcbiAgICAgICAgICAgICAgXCIkQlwiICsga2V5LnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoKHBhcmVudFJlZmVyZW5jZSA9IGdldEl0ZXJhdG9yRm4odmFsdWUpKSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwYXJlbnRSZWZlcmVuY2UgPSBwYXJlbnRSZWZlcmVuY2UuY2FsbCh2YWx1ZSkpLFxuICAgICAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgPyAoKGtleSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgICAgICAocGFyZW50UmVmZXJlbmNlID0gc2VyaWFsaXplTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocGFyZW50UmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBrZXksIHBhcmVudFJlZmVyZW5jZSksXG4gICAgICAgICAgICAgICAgICBcIiRpXCIgKyBrZXkudG9TdHJpbmcoMTYpKVxuICAgICAgICAgICAgICAgIDogQXJyYXkuZnJvbShwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFJlYWRhYmxlU3RyZWFtICYmXG4gICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVJlYWRhYmxlU3RyZWFtKHZhbHVlKTtcbiAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPSB2YWx1ZVtBU1lOQ19JVEVSQVRPUl07XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVBc3luY0l0ZXJhYmxlKHZhbHVlLCBwYXJlbnRSZWZlcmVuY2UuY2FsbCh2YWx1ZSkpO1xuICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IGdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgIT09IE9iamVjdFByb3RvdHlwZSAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHBhcmVudFJlZmVyZW5jZSB8fFxuICAgICAgICAgICAgICBudWxsICE9PSBnZXRQcm90b3R5cGVPZihwYXJlbnRSZWZlcmVuY2UpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gdGVtcG9yYXJ5UmVmZXJlbmNlcylcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJPbmx5IHBsYWluIG9iamVjdHMsIGFuZCBhIGZldyBidWlsdC1pbnMsIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEFjdGlvbnMuIENsYXNzZXMgb3IgbnVsbCBwcm90b3R5cGVzIGFyZSBub3Qgc3VwcG9ydGVkLlwiICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBcIiRUXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEVcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0IENvbnRleHQgUHJvdmlkZXJzIGNhbm5vdCBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuJXNcIixcbiAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogXCJPYmplY3RcIiAhPT0gb2JqZWN0TmFtZSh2YWx1ZSlcbiAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gJXMgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZC4lc1wiLFxuICAgICAgICAgICAgICAgICAgb2JqZWN0TmFtZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IGlzU2ltcGxlT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJlxuICAgICAgICAgICAgICAgICAgKChwYXJlbnRSZWZlcmVuY2UgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAwIDwgcGFyZW50UmVmZXJlbmNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuIE9iamVjdHMgd2l0aCBzeW1ib2wgcHJvcGVydGllcyBsaWtlICVzIGFyZSBub3Qgc3VwcG9ydGVkLiVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVmZXJlbmNlWzBdLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuIENsYXNzZXMgb3Igb3RoZXIgb2JqZWN0cyB3aXRoIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQuJXNcIixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGlmIChcIlpcIiA9PT0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0gJiYgdGhpc1trZXldIGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBcIiREXCIgKyB2YWx1ZTtcbiAgICAgICAgICBrZXkgPSBcIiRcIiA9PT0gdmFsdWVbMF0gPyBcIiRcIiArIHZhbHVlIDogdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gc2VyaWFsaXplTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIFwiJHVuZGVmaW5lZFwiO1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPSBrbm93blNlcnZlclJlZmVyZW5jZXMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpZiAodm9pZCAwICE9PSBwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gSlNPTi5zdHJpbmdpZnkocGFyZW50UmVmZXJlbmNlLCByZXNvbHZlVG9KU09OKSksXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIGZvcm1EYXRhLnNldChmb3JtRmllbGRQcmVmaXggKyBwYXJlbnRSZWZlcmVuY2UsIGtleSksXG4gICAgICAgICAgICAgIFwiJEZcIiArIHBhcmVudFJlZmVyZW5jZS50b1N0cmluZygxNilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmXG4gICAgICAgICAgICAtMSA9PT0ga2V5LmluZGV4T2YoXCI6XCIpICYmXG4gICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh0aGlzKSksXG4gICAgICAgICAgICB2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChwYXJlbnRSZWZlcmVuY2UgKyBcIjpcIiArIGtleSwgdmFsdWUpLCBcIiRUXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkNsaWVudCBGdW5jdGlvbnMgY2Fubm90IGJlIHBhc3NlZCBkaXJlY3RseSB0byBTZXJ2ZXIgRnVuY3Rpb25zLiBPbmx5IEZ1bmN0aW9ucyBwYXNzZWQgZnJvbSB0aGUgU2VydmVyIGNhbiBiZSBwYXNzZWQgYmFjayBhZ2Fpbi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gdGVtcG9yYXJ5UmVmZXJlbmNlcyAmJlxuICAgICAgICAgICAgLTEgPT09IGtleS5pbmRleE9mKFwiOlwiKSAmJlxuICAgICAgICAgICAgKChwYXJlbnRSZWZlcmVuY2UgPSB3cml0dGVuT2JqZWN0cy5nZXQodGhpcykpLFxuICAgICAgICAgICAgdm9pZCAwICE9PSBwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXQocGFyZW50UmVmZXJlbmNlICsgXCI6XCIgKyBrZXksIHZhbHVlKSwgXCIkVFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJTeW1ib2xzIGNhbm5vdCBiZSBwYXNzZWQgdG8gYSBTZXJ2ZXIgRnVuY3Rpb24gd2l0aG91dCBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc2V0LiBQYXNzIGEgVGVtcG9yYXJ5UmVmZXJlbmNlU2V0IHRvIHRoZSBvcHRpb25zLlwiICtcbiAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiYmlnaW50XCIgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIFwiJG5cIiArIHZhbHVlLnRvU3RyaW5nKDEwKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUeXBlIFwiICtcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSArXG4gICAgICAgICAgICBcIiBpcyBub3Qgc3VwcG9ydGVkIGFzIGFuIGFyZ3VtZW50IHRvIGEgU2VydmVyIEZ1bmN0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVNb2RlbChtb2RlbCwgaWQpIHtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG1vZGVsICYmXG4gICAgICAgICAgbnVsbCAhPT0gbW9kZWwgJiZcbiAgICAgICAgICAoKGlkID0gXCIkXCIgKyBpZC50b1N0cmluZygxNikpLFxuICAgICAgICAgIHdyaXR0ZW5PYmplY3RzLnNldChtb2RlbCwgaWQpLFxuICAgICAgICAgIHZvaWQgMCAhPT0gdGVtcG9yYXJ5UmVmZXJlbmNlcyAmJiB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChpZCwgbW9kZWwpKTtcbiAgICAgICAgbW9kZWxSb290ID0gbW9kZWw7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtb2RlbCwgcmVzb2x2ZVRvSlNPTik7XG4gICAgICB9XG4gICAgICB2YXIgbmV4dFBhcnRJZCA9IDEsXG4gICAgICAgIHBlbmRpbmdQYXJ0cyA9IDAsXG4gICAgICAgIGZvcm1EYXRhID0gbnVsbCxcbiAgICAgICAgd3JpdHRlbk9iamVjdHMgPSBuZXcgV2Vha01hcCgpLFxuICAgICAgICBtb2RlbFJvb3QgPSByb290LFxuICAgICAgICBqc29uID0gc2VyaWFsaXplTW9kZWwocm9vdCwgMCk7XG4gICAgICBudWxsID09PSBmb3JtRGF0YVxuICAgICAgICA/IHJlc29sdmUoanNvbilcbiAgICAgICAgOiAoZm9ybURhdGEuc2V0KGZvcm1GaWVsZFByZWZpeCArIFwiMFwiLCBqc29uKSxcbiAgICAgICAgICAwID09PSBwZW5kaW5nUGFydHMgJiYgcmVzb2x2ZShmb3JtRGF0YSkpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgMCA8IHBlbmRpbmdQYXJ0cyAmJlxuICAgICAgICAgICgocGVuZGluZ1BhcnRzID0gMCksXG4gICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgPyByZXNvbHZlKGpzb24pIDogcmVzb2x2ZShmb3JtRGF0YSkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5jb2RlRm9ybURhdGEocmVmZXJlbmNlKSB7XG4gICAgICB2YXIgcmVzb2x2ZSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICB0aGVuYWJsZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikge1xuICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICB9KTtcbiAgICAgIHByb2Nlc3NSZXBseShcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBcIlwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIGZ1bmN0aW9uIChib2R5KSB7XG4gICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBib2R5KSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCIwXCIsIGJvZHkpO1xuICAgICAgICAgICAgYm9keSA9IGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgdGhlbmFibGUudmFsdWUgPSBib2R5O1xuICAgICAgICAgIHJlc29sdmUoYm9keSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgdGhlbmFibGUuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgIHRoZW5hYmxlLnJlYXNvbiA9IGU7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZhdWx0RW5jb2RlRm9ybUFjdGlvbihpZGVudGlmaWVyUHJlZml4KSB7XG4gICAgICB2YXIgcmVmZXJlbmNlID0ga25vd25TZXJ2ZXJSZWZlcmVuY2VzLmdldCh0aGlzKTtcbiAgICAgIGlmICghcmVmZXJlbmNlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlRyaWVkIHRvIGVuY29kZSBhIFNlcnZlciBBY3Rpb24gZnJvbSBhIGRpZmZlcmVudCBpbnN0YW5jZSB0aGFuIHRoZSBlbmNvZGVyIGlzIGZyb20uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBkYXRhID0gbnVsbDtcbiAgICAgIGlmIChudWxsICE9PSByZWZlcmVuY2UuYm91bmQpIHtcbiAgICAgICAgZGF0YSA9IGJvdW5kQ2FjaGUuZ2V0KHJlZmVyZW5jZSk7XG4gICAgICAgIGRhdGEgfHxcbiAgICAgICAgICAoKGRhdGEgPSBlbmNvZGVGb3JtRGF0YShyZWZlcmVuY2UpKSwgYm91bmRDYWNoZS5zZXQocmVmZXJlbmNlLCBkYXRhKSk7XG4gICAgICAgIGlmIChcInJlamVjdGVkXCIgPT09IGRhdGEuc3RhdHVzKSB0aHJvdyBkYXRhLnJlYXNvbjtcbiAgICAgICAgaWYgKFwiZnVsZmlsbGVkXCIgIT09IGRhdGEuc3RhdHVzKSB0aHJvdyBkYXRhO1xuICAgICAgICByZWZlcmVuY2UgPSBkYXRhLnZhbHVlO1xuICAgICAgICB2YXIgcHJlZml4ZWREYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIHJlZmVyZW5jZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgcHJlZml4ZWREYXRhLmFwcGVuZChcIiRBQ1RJT05fXCIgKyBpZGVudGlmaWVyUHJlZml4ICsgXCI6XCIgKyBrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGEgPSBwcmVmaXhlZERhdGE7XG4gICAgICAgIHJlZmVyZW5jZSA9IFwiJEFDVElPTl9SRUZfXCIgKyBpZGVudGlmaWVyUHJlZml4O1xuICAgICAgfSBlbHNlIHJlZmVyZW5jZSA9IFwiJEFDVElPTl9JRF9cIiArIHJlZmVyZW5jZS5pZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHJlZmVyZW5jZSxcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgZW5jVHlwZTogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2lnbmF0dXJlRXF1YWwocmVmZXJlbmNlSWQsIG51bWJlck9mQm91bmRBcmdzKSB7XG4gICAgICB2YXIgcmVmZXJlbmNlID0ga25vd25TZXJ2ZXJSZWZlcmVuY2VzLmdldCh0aGlzKTtcbiAgICAgIGlmICghcmVmZXJlbmNlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlRyaWVkIHRvIGVuY29kZSBhIFNlcnZlciBBY3Rpb24gZnJvbSBhIGRpZmZlcmVudCBpbnN0YW5jZSB0aGFuIHRoZSBlbmNvZGVyIGlzIGZyb20uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIGlmIChyZWZlcmVuY2UuaWQgIT09IHJlZmVyZW5jZUlkKSByZXR1cm4gITE7XG4gICAgICB2YXIgYm91bmRQcm9taXNlID0gcmVmZXJlbmNlLmJvdW5kO1xuICAgICAgaWYgKG51bGwgPT09IGJvdW5kUHJvbWlzZSkgcmV0dXJuIDAgPT09IG51bWJlck9mQm91bmRBcmdzO1xuICAgICAgc3dpdGNoIChib3VuZFByb21pc2Uuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICByZXR1cm4gYm91bmRQcm9taXNlLnZhbHVlLmxlbmd0aCA9PT0gbnVtYmVyT2ZCb3VuZEFyZ3M7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgdGhyb3cgYm91bmRQcm9taXNlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyBib3VuZFByb21pc2UucmVhc29uO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgYm91bmRQcm9taXNlLnN0YXR1cyAmJlxuICAgICAgICAgICAgICAoKGJvdW5kUHJvbWlzZS5zdGF0dXMgPSBcInBlbmRpbmdcIiksXG4gICAgICAgICAgICAgIGJvdW5kUHJvbWlzZS50aGVuKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChib3VuZEFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgIGJvdW5kUHJvbWlzZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICAgICAgICAgICAgYm91bmRQcm9taXNlLnZhbHVlID0gYm91bmRBcmdzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBib3VuZFByb21pc2Uuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgYm91bmRQcm9taXNlLnJlYXNvbiA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBib3VuZFByb21pc2UpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmFrZVNlcnZlckZ1bmN0aW9uKFxuICAgICAgbmFtZSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlTWFwLFxuICAgICAgbGluZSxcbiAgICAgIGNvbCxcbiAgICAgIGVudmlyb25tZW50TmFtZSxcbiAgICAgIGlubmVyRnVuY3Rpb25cbiAgICApIHtcbiAgICAgIG5hbWUgfHwgKG5hbWUgPSBcIjxhbm9ueW1vdXM+XCIpO1xuICAgICAgdmFyIGVuY29kZWROYW1lID0gSlNPTi5zdHJpbmdpZnkobmFtZSk7XG4gICAgICAxID49IGxpbmVcbiAgICAgICAgPyAoKGxpbmUgPSBlbmNvZGVkTmFtZS5sZW5ndGggKyA3KSxcbiAgICAgICAgICAoY29sID1cbiAgICAgICAgICAgIFwicz0+KHtcIiArXG4gICAgICAgICAgICBlbmNvZGVkTmFtZSArXG4gICAgICAgICAgICBcIiBcIi5yZXBlYXQoY29sIDwgbGluZSA/IDAgOiBjb2wgLSBsaW5lKSArXG4gICAgICAgICAgICBcIjooLi4uYXJncykgPT4gcyguLi5hcmdzKX0pXFxuLyogVGhpcyBtb2R1bGUgaXMgYSBwcm94eSB0byBhIFNlcnZlciBBY3Rpb24uIFR1cm4gb24gU291cmNlIE1hcHMgdG8gc2VlIHRoZSBzZXJ2ZXIgc291cmNlLiAqL1wiKSlcbiAgICAgICAgOiAoY29sID1cbiAgICAgICAgICAgIFwiLyogVGhpcyBtb2R1bGUgaXMgYSBwcm94eSB0byBhIFNlcnZlciBBY3Rpb24uIFR1cm4gb24gU291cmNlIE1hcHMgdG8gc2VlIHRoZSBzZXJ2ZXIgc291cmNlLiAqL1wiICtcbiAgICAgICAgICAgIFwiXFxuXCIucmVwZWF0KGxpbmUgLSAyKSArXG4gICAgICAgICAgICBcInNlcnZlcj0+KHtcIiArXG4gICAgICAgICAgICBlbmNvZGVkTmFtZSArXG4gICAgICAgICAgICBcIjpcXG5cIiArXG4gICAgICAgICAgICBcIiBcIi5yZXBlYXQoMSA+IGNvbCA/IDAgOiBjb2wgLSAxKSArXG4gICAgICAgICAgICBcIiguLi5hcmdzKSA9PiBzZXJ2ZXIoLi4uYXJncyl9KVwiKTtcbiAgICAgIGZpbGVuYW1lLnN0YXJ0c1dpdGgoXCIvXCIpICYmIChmaWxlbmFtZSA9IFwiZmlsZTovL1wiICsgZmlsZW5hbWUpO1xuICAgICAgc291cmNlTWFwXG4gICAgICAgID8gKChjb2wgKz1cbiAgICAgICAgICAgIFwiXFxuLy8jIHNvdXJjZVVSTD1yc2M6Ly9SZWFjdC9cIiArXG4gICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoZW52aXJvbm1lbnROYW1lKSArXG4gICAgICAgICAgICBcIi9cIiArXG4gICAgICAgICAgICBmaWxlbmFtZSArXG4gICAgICAgICAgICBcIj9zXCIgK1xuICAgICAgICAgICAgZmFrZVNlcnZlckZ1bmN0aW9uSWR4KyspLFxuICAgICAgICAgIChjb2wgKz0gXCJcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1cIiArIHNvdXJjZU1hcCkpXG4gICAgICAgIDogZmlsZW5hbWUgJiYgKGNvbCArPSBcIlxcbi8vIyBzb3VyY2VVUkw9XCIgKyBmaWxlbmFtZSk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKDAsIGV2YWwpKGNvbCkoaW5uZXJGdW5jdGlvbilbbmFtZV07XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBpbm5lckZ1bmN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWdpc3RlclNlcnZlclJlZmVyZW5jZShcbiAgICAgIHByb3h5LFxuICAgICAgcmVmZXJlbmNlJGpzY29tcCQwLFxuICAgICAgZW5jb2RlRm9ybUFjdGlvblxuICAgICkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHJveHksIHtcbiAgICAgICAgJCRGT1JNX0FDVElPTjoge1xuICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgdm9pZCAwID09PSBlbmNvZGVGb3JtQWN0aW9uXG4gICAgICAgICAgICAgID8gZGVmYXVsdEVuY29kZUZvcm1BY3Rpb25cbiAgICAgICAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVmZXJlbmNlID0ga25vd25TZXJ2ZXJSZWZlcmVuY2VzLmdldCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgIGlmICghcmVmZXJlbmNlKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlRyaWVkIHRvIGVuY29kZSBhIFNlcnZlciBBY3Rpb24gZnJvbSBhIGRpZmZlcmVudCBpbnN0YW5jZSB0aGFuIHRoZSBlbmNvZGVyIGlzIGZyb20uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHZhciBib3VuZFByb21pc2UgPSByZWZlcmVuY2UuYm91bmQ7XG4gICAgICAgICAgICAgICAgICBudWxsID09PSBib3VuZFByb21pc2UgJiYgKGJvdW5kUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShbXSkpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZUZvcm1BY3Rpb24ocmVmZXJlbmNlLmlkLCBib3VuZFByb21pc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJCRJU19TSUdOQVRVUkVfRVFVQUw6IHsgdmFsdWU6IGlzU2lnbmF0dXJlRXF1YWwgfSxcbiAgICAgICAgYmluZDogeyB2YWx1ZTogYmluZCB9XG4gICAgICB9KTtcbiAgICAgIGtub3duU2VydmVyUmVmZXJlbmNlcy5zZXQocHJveHksIHJlZmVyZW5jZSRqc2NvbXAkMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmQoKSB7XG4gICAgICB2YXIgbmV3Rm4gPSBGdW5jdGlvbkJpbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgcmVmZXJlbmNlID0ga25vd25TZXJ2ZXJSZWZlcmVuY2VzLmdldCh0aGlzKTtcbiAgICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgbnVsbCAhPSBhcmd1bWVudHNbMF0gJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ0Nhbm5vdCBiaW5kIFwidGhpc1wiIG9mIGEgU2VydmVyIEFjdGlvbi4gUGFzcyBudWxsIG9yIHVuZGVmaW5lZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gLmJpbmQoKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgICBib3VuZFByb21pc2UgPSBudWxsO1xuICAgICAgICBib3VuZFByb21pc2UgPVxuICAgICAgICAgIG51bGwgIT09IHJlZmVyZW5jZS5ib3VuZFxuICAgICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUocmVmZXJlbmNlLmJvdW5kKS50aGVuKGZ1bmN0aW9uIChib3VuZEFyZ3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYm91bmRBcmdzLmNvbmNhdChhcmdzKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGFyZ3MpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZXdGbiwge1xuICAgICAgICAgICQkRk9STV9BQ1RJT046IHsgdmFsdWU6IHRoaXMuJCRGT1JNX0FDVElPTiB9LFxuICAgICAgICAgICQkSVNfU0lHTkFUVVJFX0VRVUFMOiB7IHZhbHVlOiBpc1NpZ25hdHVyZUVxdWFsIH0sXG4gICAgICAgICAgYmluZDogeyB2YWx1ZTogYmluZCB9XG4gICAgICAgIH0pO1xuICAgICAgICBrbm93blNlcnZlclJlZmVyZW5jZXMuc2V0KG5ld0ZuLCB7XG4gICAgICAgICAgaWQ6IHJlZmVyZW5jZS5pZCxcbiAgICAgICAgICBib3VuZDogYm91bmRQcm9taXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld0ZuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCb3VuZFNlcnZlclJlZmVyZW5jZShcbiAgICAgIG1ldGFEYXRhLFxuICAgICAgY2FsbFNlcnZlcixcbiAgICAgIGVuY29kZUZvcm1BY3Rpb24sXG4gICAgICBmaW5kU291cmNlTWFwVVJMXG4gICAgKSB7XG4gICAgICBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kXG4gICAgICAgICAgPyBcImZ1bGZpbGxlZFwiID09PSBib3VuZC5zdGF0dXNcbiAgICAgICAgICAgID8gY2FsbFNlcnZlcihpZCwgYm91bmQudmFsdWUuY29uY2F0KGFyZ3MpKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoYm91bmQpLnRoZW4oZnVuY3Rpb24gKGJvdW5kQXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsU2VydmVyKGlkLCBib3VuZEFyZ3MuY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IGNhbGxTZXJ2ZXIoaWQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgdmFyIGlkID0gbWV0YURhdGEuaWQsXG4gICAgICAgIGJvdW5kID0gbWV0YURhdGEuYm91bmQsXG4gICAgICAgIGxvY2F0aW9uID0gbWV0YURhdGEubG9jYXRpb247XG4gICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGFEYXRhLm5hbWUgfHwgXCJcIixcbiAgICAgICAgICBmaWxlbmFtZSA9IGxvY2F0aW9uWzFdLFxuICAgICAgICAgIGxpbmUgPSBsb2NhdGlvblsyXTtcbiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvblszXTtcbiAgICAgICAgbWV0YURhdGEgPSBtZXRhRGF0YS5lbnYgfHwgXCJTZXJ2ZXJcIjtcbiAgICAgICAgZmluZFNvdXJjZU1hcFVSTCA9XG4gICAgICAgICAgbnVsbCA9PSBmaW5kU291cmNlTWFwVVJMXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogZmluZFNvdXJjZU1hcFVSTChmaWxlbmFtZSwgbWV0YURhdGEpO1xuICAgICAgICBhY3Rpb24gPSBjcmVhdGVGYWtlU2VydmVyRnVuY3Rpb24oXG4gICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gICAgICAgICAgbGluZSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICBtZXRhRGF0YSxcbiAgICAgICAgICBhY3Rpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKFxuICAgICAgICBhY3Rpb24sXG4gICAgICAgIHsgaWQ6IGlkLCBib3VuZDogYm91bmQgfSxcbiAgICAgICAgZW5jb2RlRm9ybUFjdGlvblxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlU3RhY2tMb2NhdGlvbihlcnJvcikge1xuICAgICAgZXJyb3IgPSBlcnJvci5zdGFjaztcbiAgICAgIGVycm9yLnN0YXJ0c1dpdGgoXCJFcnJvcjogcmVhY3Qtc3RhY2stdG9wLWZyYW1lXFxuXCIpICYmXG4gICAgICAgIChlcnJvciA9IGVycm9yLnNsaWNlKDI5KSk7XG4gICAgICB2YXIgZW5kT2ZGaXJzdCA9IGVycm9yLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICBpZiAoLTEgIT09IGVuZE9mRmlyc3QpIHtcbiAgICAgICAgdmFyIGVuZE9mU2Vjb25kID0gZXJyb3IuaW5kZXhPZihcIlxcblwiLCBlbmRPZkZpcnN0ICsgMSk7XG4gICAgICAgIGVuZE9mRmlyc3QgPVxuICAgICAgICAgIC0xID09PSBlbmRPZlNlY29uZFxuICAgICAgICAgICAgPyBlcnJvci5zbGljZShlbmRPZkZpcnN0ICsgMSlcbiAgICAgICAgICAgIDogZXJyb3Iuc2xpY2UoZW5kT2ZGaXJzdCArIDEsIGVuZE9mU2Vjb25kKTtcbiAgICAgIH0gZWxzZSBlbmRPZkZpcnN0ID0gZXJyb3I7XG4gICAgICBlcnJvciA9IHY4RnJhbWVSZWdFeHAuZXhlYyhlbmRPZkZpcnN0KTtcbiAgICAgIGlmIChcbiAgICAgICAgIWVycm9yICYmXG4gICAgICAgICgoZXJyb3IgPSBqc2NTcGlkZXJNb25rZXlGcmFtZVJlZ0V4cC5leGVjKGVuZE9mRmlyc3QpKSwgIWVycm9yKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGVuZE9mRmlyc3QgPSBlcnJvclsxXSB8fCBcIlwiO1xuICAgICAgXCI8YW5vbnltb3VzPlwiID09PSBlbmRPZkZpcnN0ICYmIChlbmRPZkZpcnN0ID0gXCJcIik7XG4gICAgICBlbmRPZlNlY29uZCA9IGVycm9yWzJdIHx8IGVycm9yWzVdIHx8IFwiXCI7XG4gICAgICBcIjxhbm9ueW1vdXM+XCIgPT09IGVuZE9mU2Vjb25kICYmIChlbmRPZlNlY29uZCA9IFwiXCIpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgZW5kT2ZGaXJzdCxcbiAgICAgICAgZW5kT2ZTZWNvbmQsXG4gICAgICAgICsoZXJyb3JbM10gfHwgZXJyb3JbNl0pLFxuICAgICAgICArKGVycm9yWzRdIHx8IGVycm9yWzddKVxuICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU2VydmVyUmVmZXJlbmNlJDEoXG4gICAgICBpZCxcbiAgICAgIGNhbGxTZXJ2ZXIsXG4gICAgICBlbmNvZGVGb3JtQWN0aW9uLFxuICAgICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICkge1xuICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjYWxsU2VydmVyKGlkLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHZhciBsb2NhdGlvbiA9IHBhcnNlU3RhY2tMb2NhdGlvbihFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKSk7XG4gICAgICBpZiAobnVsbCAhPT0gbG9jYXRpb24pIHtcbiAgICAgICAgdmFyIGZpbGVuYW1lID0gbG9jYXRpb25bMV0sXG4gICAgICAgICAgbGluZSA9IGxvY2F0aW9uWzJdO1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uWzNdO1xuICAgICAgICBmaW5kU291cmNlTWFwVVJMID1cbiAgICAgICAgICBudWxsID09IGZpbmRTb3VyY2VNYXBVUkxcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBmaW5kU291cmNlTWFwVVJMKGZpbGVuYW1lLCBcIkNsaWVudFwiKTtcbiAgICAgICAgYWN0aW9uID0gY3JlYXRlRmFrZVNlcnZlckZ1bmN0aW9uKFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZSB8fCBcIlwiLFxuICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gICAgICAgICAgbGluZSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICBcIkNsaWVudFwiLFxuICAgICAgICAgIGFjdGlvblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgeyBpZDogaWQsIGJvdW5kOiBudWxsIH0sXG4gICAgICAgIGVuY29kZUZvcm1BY3Rpb25cbiAgICAgICk7XG4gICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RQcm9taXNlKHN0YXR1cywgdmFsdWUsIHJlYXNvbiwgcmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgICB0aGlzLl9yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgdGhpcy5fZGVidWdJbmZvID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENodW5rKGNodW5rKSB7XG4gICAgICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kZWxcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2R1bGVcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kdWxlQ2h1bmsoY2h1bmspO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChjaHVuay5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgIHJldHVybiBjaHVuay52YWx1ZTtcbiAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgY2FzZSBcImJsb2NrZWRcIjpcbiAgICAgICAgICB0aHJvdyBjaHVuaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBjaHVuay5yZWFzb247XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdFByb21pc2UoXCJwZW5kaW5nXCIsIG51bGwsIG51bGwsIHJlc3BvbnNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FrZUNodW5rKGxpc3RlbmVycywgdmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSAoMCwgbGlzdGVuZXJzW2ldKSh2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoY2h1bmssIHJlc29sdmVMaXN0ZW5lcnMsIHJlamVjdExpc3RlbmVycykge1xuICAgICAgc3dpdGNoIChjaHVuay5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgIHdha2VDaHVuayhyZXNvbHZlTGlzdGVuZXJzLCBjaHVuay52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgIGNhc2UgXCJibG9ja2VkXCI6XG4gICAgICAgICAgaWYgKGNodW5rLnZhbHVlKVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvbHZlTGlzdGVuZXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICBjaHVuay52YWx1ZS5wdXNoKHJlc29sdmVMaXN0ZW5lcnNbaV0pO1xuICAgICAgICAgIGVsc2UgY2h1bmsudmFsdWUgPSByZXNvbHZlTGlzdGVuZXJzO1xuICAgICAgICAgIGlmIChjaHVuay5yZWFzb24pIHtcbiAgICAgICAgICAgIGlmIChyZWplY3RMaXN0ZW5lcnMpXG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycyA9IDA7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycyA8IHJlamVjdExpc3RlbmVycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycysrXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjaHVuay5yZWFzb24ucHVzaChyZWplY3RMaXN0ZW5lcnNbcmVzb2x2ZUxpc3RlbmVyc10pO1xuICAgICAgICAgIH0gZWxzZSBjaHVuay5yZWFzb24gPSByZWplY3RMaXN0ZW5lcnM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgIHJlamVjdExpc3RlbmVycyAmJiB3YWtlQ2h1bmsocmVqZWN0TGlzdGVuZXJzLCBjaHVuay5yZWFzb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0cmlnZ2VyRXJyb3JPbkNodW5rKGNodW5rLCBlcnJvcikge1xuICAgICAgaWYgKFwicGVuZGluZ1wiICE9PSBjaHVuay5zdGF0dXMgJiYgXCJibG9ja2VkXCIgIT09IGNodW5rLnN0YXR1cylcbiAgICAgICAgY2h1bmsucmVhc29uLmVycm9yKGVycm9yKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgbGlzdGVuZXJzID0gY2h1bmsucmVhc29uO1xuICAgICAgICBjaHVuay5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgIGNodW5rLnJlYXNvbiA9IGVycm9yO1xuICAgICAgICBudWxsICE9PSBsaXN0ZW5lcnMgJiYgd2FrZUNodW5rKGxpc3RlbmVycywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSZXNvbHZlZEl0ZXJhdG9yUmVzdWx0Q2h1bmsocmVzcG9uc2UsIHZhbHVlLCBkb25lKSB7XG4gICAgICByZXR1cm4gbmV3IFJlYWN0UHJvbWlzZShcbiAgICAgICAgXCJyZXNvbHZlZF9tb2RlbFwiLFxuICAgICAgICAoZG9uZSA/ICd7XCJkb25lXCI6dHJ1ZSxcInZhbHVlXCI6JyA6ICd7XCJkb25lXCI6ZmFsc2UsXCJ2YWx1ZVwiOicpICtcbiAgICAgICAgICB2YWx1ZSArXG4gICAgICAgICAgXCJ9XCIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHJlc3BvbnNlXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlSXRlcmF0b3JSZXN1bHRDaHVuayhjaHVuaywgdmFsdWUsIGRvbmUpIHtcbiAgICAgIHJlc29sdmVNb2RlbENodW5rKFxuICAgICAgICBjaHVuayxcbiAgICAgICAgKGRvbmUgPyAne1wiZG9uZVwiOnRydWUsXCJ2YWx1ZVwiOicgOiAne1wiZG9uZVwiOmZhbHNlLFwidmFsdWVcIjonKSArXG4gICAgICAgICAgdmFsdWUgK1xuICAgICAgICAgIFwifVwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlTW9kZWxDaHVuayhjaHVuaywgdmFsdWUpIHtcbiAgICAgIGlmIChcInBlbmRpbmdcIiAhPT0gY2h1bmsuc3RhdHVzKSBjaHVuay5yZWFzb24uZW5xdWV1ZU1vZGVsKHZhbHVlKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgcmVzb2x2ZUxpc3RlbmVycyA9IGNodW5rLnZhbHVlLFxuICAgICAgICAgIHJlamVjdExpc3RlbmVycyA9IGNodW5rLnJlYXNvbjtcbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJyZXNvbHZlZF9tb2RlbFwiO1xuICAgICAgICBjaHVuay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBudWxsICE9PSByZXNvbHZlTGlzdGVuZXJzICYmXG4gICAgICAgICAgKGluaXRpYWxpemVNb2RlbENodW5rKGNodW5rKSxcbiAgICAgICAgICB3YWtlQ2h1bmtJZkluaXRpYWxpemVkKGNodW5rLCByZXNvbHZlTGlzdGVuZXJzLCByZWplY3RMaXN0ZW5lcnMpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZUNodW5rKGNodW5rLCB2YWx1ZSkge1xuICAgICAgaWYgKFwicGVuZGluZ1wiID09PSBjaHVuay5zdGF0dXMgfHwgXCJibG9ja2VkXCIgPT09IGNodW5rLnN0YXR1cykge1xuICAgICAgICB2YXIgcmVzb2x2ZUxpc3RlbmVycyA9IGNodW5rLnZhbHVlLFxuICAgICAgICAgIHJlamVjdExpc3RlbmVycyA9IGNodW5rLnJlYXNvbjtcbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJyZXNvbHZlZF9tb2R1bGVcIjtcbiAgICAgICAgY2h1bmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbnVsbCAhPT0gcmVzb2x2ZUxpc3RlbmVycyAmJlxuICAgICAgICAgIChpbml0aWFsaXplTW9kdWxlQ2h1bmsoY2h1bmspLFxuICAgICAgICAgIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoY2h1bmssIHJlc29sdmVMaXN0ZW5lcnMsIHJlamVjdExpc3RlbmVycykpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuaykge1xuICAgICAgdmFyIHByZXZIYW5kbGVyID0gaW5pdGlhbGl6aW5nSGFuZGxlcjtcbiAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIgPSBudWxsO1xuICAgICAgdmFyIHJlc29sdmVkTW9kZWwgPSBjaHVuay52YWx1ZTtcbiAgICAgIGNodW5rLnN0YXR1cyA9IFwiYmxvY2tlZFwiO1xuICAgICAgY2h1bmsudmFsdWUgPSBudWxsO1xuICAgICAgY2h1bmsucmVhc29uID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IEpTT04ucGFyc2UocmVzb2x2ZWRNb2RlbCwgY2h1bmsuX3Jlc3BvbnNlLl9mcm9tSlNPTiksXG4gICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycyA9IGNodW5rLnZhbHVlO1xuICAgICAgICBudWxsICE9PSByZXNvbHZlTGlzdGVuZXJzICYmXG4gICAgICAgICAgKChjaHVuay52YWx1ZSA9IG51bGwpLFxuICAgICAgICAgIChjaHVuay5yZWFzb24gPSBudWxsKSxcbiAgICAgICAgICB3YWtlQ2h1bmsocmVzb2x2ZUxpc3RlbmVycywgdmFsdWUpKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGluaXRpYWxpemluZ0hhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoaW5pdGlhbGl6aW5nSGFuZGxlci5lcnJvcmVkKSB0aHJvdyBpbml0aWFsaXppbmdIYW5kbGVyLnZhbHVlO1xuICAgICAgICAgIGlmICgwIDwgaW5pdGlhbGl6aW5nSGFuZGxlci5kZXBzKSB7XG4gICAgICAgICAgICBpbml0aWFsaXppbmdIYW5kbGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpbml0aWFsaXppbmdIYW5kbGVyLmNodW5rID0gY2h1bms7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNodW5rLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgIGNodW5rLnZhbHVlID0gdmFsdWU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAoY2h1bmsuc3RhdHVzID0gXCJyZWplY3RlZFwiKSwgKGNodW5rLnJlYXNvbiA9IGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIgPSBwcmV2SGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZU1vZHVsZUNodW5rKGNodW5rKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdmFsdWUgPSByZXF1aXJlTW9kdWxlKGNodW5rLnZhbHVlKTtcbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgY2h1bmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIChjaHVuay5zdGF0dXMgPSBcInJlamVjdGVkXCIpLCAoY2h1bmsucmVhc29uID0gZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXBvcnRHbG9iYWxFcnJvcihyZXNwb25zZSwgZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlLl9jaHVua3MuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgXCJwZW5kaW5nXCIgPT09IGNodW5rLnN0YXR1cyAmJiB0cmlnZ2VyRXJyb3JPbkNodW5rKGNodW5rLCBlcnJvcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVsbFJlZkdldHRlcigpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKGNodW5rKSB7XG4gICAgICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgICAgIF9wYXlsb2FkOiBjaHVuayxcbiAgICAgICAgX2luaXQ6IHJlYWRDaHVua1xuICAgICAgfTtcbiAgICAgIGNodW5rID0gY2h1bmsuX2RlYnVnSW5mbyB8fCAoY2h1bmsuX2RlYnVnSW5mbyA9IFtdKTtcbiAgICAgIGxhenlUeXBlLl9kZWJ1Z0luZm8gPSBjaHVuaztcbiAgICAgIHJldHVybiBsYXp5VHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2h1bmsocmVzcG9uc2UsIGlkKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rIHx8ICgoY2h1bmsgPSBjcmVhdGVQZW5kaW5nQ2h1bmsocmVzcG9uc2UpKSwgY2h1bmtzLnNldChpZCwgY2h1bmspKTtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FpdEZvclJlZmVyZW5jZShcbiAgICAgIHJlZmVyZW5jZWRDaHVuayxcbiAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgIGtleSxcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgbWFwLFxuICAgICAgcGF0aFxuICAgICkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKDsgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRTsgKVxuICAgICAgICAgICAgaWYgKCgodmFsdWUgPSB2YWx1ZS5fcGF5bG9hZCksIHZhbHVlID09PSBoYW5kbGVyLmNodW5rKSlcbiAgICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVyLnZhbHVlO1xuICAgICAgICAgICAgZWxzZSBpZiAoXCJmdWxmaWxsZWRcIiA9PT0gdmFsdWUuc3RhdHVzKSB2YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHBhdGguc3BsaWNlKDAsIGkgLSAxKTtcbiAgICAgICAgICAgICAgdmFsdWUudGhlbihmdWxmaWxsLCByZWplY3QpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZVtwYXRoW2ldXTtcbiAgICAgICAgfVxuICAgICAgICBpID0gbWFwKHJlc3BvbnNlLCB2YWx1ZSwgcGFyZW50T2JqZWN0LCBrZXkpO1xuICAgICAgICBwYXJlbnRPYmplY3Rba2V5XSA9IGk7XG4gICAgICAgIFwiXCIgPT09IGtleSAmJiBudWxsID09PSBoYW5kbGVyLnZhbHVlICYmIChoYW5kbGVyLnZhbHVlID0gaSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRPYmplY3RbMF0gPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgbnVsbCAhPT0gaGFuZGxlci52YWx1ZSAmJlxuICAgICAgICAgIGhhbmRsZXIudmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgICApXG4gICAgICAgICAgc3dpdGNoICgoKHZhbHVlID0gaGFuZGxlci52YWx1ZSksIGtleSkpIHtcbiAgICAgICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgICAgICAgIHZhbHVlLnByb3BzID0gaTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiNFwiOlxuICAgICAgICAgICAgICB2YWx1ZS5fb3duZXIgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgaGFuZGxlci5kZXBzLS07XG4gICAgICAgIDAgPT09IGhhbmRsZXIuZGVwcyAmJlxuICAgICAgICAgICgoaSA9IGhhbmRsZXIuY2h1bmspLFxuICAgICAgICAgIG51bGwgIT09IGkgJiZcbiAgICAgICAgICAgIFwiYmxvY2tlZFwiID09PSBpLnN0YXR1cyAmJlxuICAgICAgICAgICAgKCh2YWx1ZSA9IGkudmFsdWUpLFxuICAgICAgICAgICAgKGkuc3RhdHVzID0gXCJmdWxmaWxsZWRcIiksXG4gICAgICAgICAgICAoaS52YWx1ZSA9IGhhbmRsZXIudmFsdWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gdmFsdWUgJiYgd2FrZUNodW5rKHZhbHVlLCBoYW5kbGVyLnZhbHVlKSkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0KGVycm9yKSB7XG4gICAgICAgIGlmICghaGFuZGxlci5lcnJvcmVkKSB7XG4gICAgICAgICAgdmFyIGJsb2NrZWRWYWx1ZSA9IGhhbmRsZXIudmFsdWU7XG4gICAgICAgICAgaGFuZGxlci5lcnJvcmVkID0gITA7XG4gICAgICAgICAgaGFuZGxlci52YWx1ZSA9IGVycm9yO1xuICAgICAgICAgIHZhciBjaHVuayA9IGhhbmRsZXIuY2h1bms7XG4gICAgICAgICAgbnVsbCAhPT0gY2h1bmsgJiZcbiAgICAgICAgICAgIFwiYmxvY2tlZFwiID09PSBjaHVuay5zdGF0dXMgJiZcbiAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgYmxvY2tlZFZhbHVlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRWYWx1ZSAmJlxuICAgICAgICAgICAgICBibG9ja2VkVmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICAgICAgICAoKGJsb2NrZWRWYWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoYmxvY2tlZFZhbHVlLnR5cGUpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgb3duZXI6IGJsb2NrZWRWYWx1ZS5fb3duZXJcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIChjaHVuay5fZGVidWdJbmZvIHx8IChjaHVuay5fZGVidWdJbmZvID0gW10pKS5wdXNoKGJsb2NrZWRWYWx1ZSkpLFxuICAgICAgICAgICAgdHJpZ2dlckVycm9yT25DaHVuayhjaHVuaywgZXJyb3IpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGluaXRpYWxpemluZ0hhbmRsZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyO1xuICAgICAgICBoYW5kbGVyLmRlcHMrKztcbiAgICAgIH0gZWxzZVxuICAgICAgICBoYW5kbGVyID0gaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgZGVwczogMSxcbiAgICAgICAgICBlcnJvcmVkOiAhMVxuICAgICAgICB9O1xuICAgICAgcmVmZXJlbmNlZENodW5rLnRoZW4oZnVsZmlsbCwgcmVqZWN0KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb2FkU2VydmVyUmVmZXJlbmNlKHJlc3BvbnNlLCBtZXRhRGF0YSwgcGFyZW50T2JqZWN0LCBrZXkpIHtcbiAgICAgIGlmICghcmVzcG9uc2UuX3NlcnZlclJlZmVyZW5jZUNvbmZpZylcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJvdW5kU2VydmVyUmVmZXJlbmNlKFxuICAgICAgICAgIG1ldGFEYXRhLFxuICAgICAgICAgIHJlc3BvbnNlLl9jYWxsU2VydmVyLFxuICAgICAgICAgIHJlc3BvbnNlLl9lbmNvZGVGb3JtQWN0aW9uLFxuICAgICAgICAgIHJlc3BvbnNlLl9kZWJ1Z0ZpbmRTb3VyY2VNYXBVUkxcbiAgICAgICAgKTtcbiAgICAgIHZhciBzZXJ2ZXJSZWZlcmVuY2UgPSByZXNvbHZlU2VydmVyUmVmZXJlbmNlKFxuICAgICAgICByZXNwb25zZS5fc2VydmVyUmVmZXJlbmNlQ29uZmlnLFxuICAgICAgICBtZXRhRGF0YS5pZFxuICAgICAgKTtcbiAgICAgIGlmICgocmVzcG9uc2UgPSBwcmVsb2FkTW9kdWxlKHNlcnZlclJlZmVyZW5jZSkpKVxuICAgICAgICBtZXRhRGF0YS5ib3VuZCAmJiAocmVzcG9uc2UgPSBQcm9taXNlLmFsbChbcmVzcG9uc2UsIG1ldGFEYXRhLmJvdW5kXSkpO1xuICAgICAgZWxzZSBpZiAobWV0YURhdGEuYm91bmQpIHJlc3BvbnNlID0gUHJvbWlzZS5yZXNvbHZlKG1ldGFEYXRhLmJvdW5kKTtcbiAgICAgIGVsc2UgcmV0dXJuIHJlcXVpcmVNb2R1bGUoc2VydmVyUmVmZXJlbmNlKTtcbiAgICAgIGlmIChpbml0aWFsaXppbmdIYW5kbGVyKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gaW5pdGlhbGl6aW5nSGFuZGxlcjtcbiAgICAgICAgaGFuZGxlci5kZXBzKys7XG4gICAgICB9IGVsc2VcbiAgICAgICAgaGFuZGxlciA9IGluaXRpYWxpemluZ0hhbmRsZXIgPSB7XG4gICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgIGNodW5rOiBudWxsLFxuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIGRlcHM6IDEsXG4gICAgICAgICAgZXJyb3JlZDogITFcbiAgICAgICAgfTtcbiAgICAgIHJlc3BvbnNlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgcmVzb2x2ZWRWYWx1ZSA9IHJlcXVpcmVNb2R1bGUoc2VydmVyUmVmZXJlbmNlKTtcbiAgICAgICAgICBpZiAobWV0YURhdGEuYm91bmQpIHtcbiAgICAgICAgICAgIHZhciBib3VuZEFyZ3MgPSBtZXRhRGF0YS5ib3VuZC52YWx1ZS5zbGljZSgwKTtcbiAgICAgICAgICAgIGJvdW5kQXJncy51bnNoaWZ0KG51bGwpO1xuICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHJlc29sdmVkVmFsdWUuYmluZC5hcHBseShyZXNvbHZlZFZhbHVlLCBib3VuZEFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnRPYmplY3Rba2V5XSA9IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgXCJcIiA9PT0ga2V5ICYmXG4gICAgICAgICAgICBudWxsID09PSBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgICAoaGFuZGxlci52YWx1ZSA9IHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudE9iamVjdFswXSA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFICYmXG4gICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgaGFuZGxlci52YWx1ZSAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gaGFuZGxlci52YWx1ZSAmJlxuICAgICAgICAgICAgaGFuZGxlci52YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgKVxuICAgICAgICAgICAgc3dpdGNoICgoKGJvdW5kQXJncyA9IGhhbmRsZXIudmFsdWUpLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgICAgICAgICAgYm91bmRBcmdzLnByb3BzID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIjRcIjpcbiAgICAgICAgICAgICAgICBib3VuZEFyZ3MuX293bmVyID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBoYW5kbGVyLmRlcHMtLTtcbiAgICAgICAgICAwID09PSBoYW5kbGVyLmRlcHMgJiZcbiAgICAgICAgICAgICgocmVzb2x2ZWRWYWx1ZSA9IGhhbmRsZXIuY2h1bmspLFxuICAgICAgICAgICAgbnVsbCAhPT0gcmVzb2x2ZWRWYWx1ZSAmJlxuICAgICAgICAgICAgICBcImJsb2NrZWRcIiA9PT0gcmVzb2x2ZWRWYWx1ZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgKChib3VuZEFyZ3MgPSByZXNvbHZlZFZhbHVlLnZhbHVlKSxcbiAgICAgICAgICAgICAgKHJlc29sdmVkVmFsdWUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIiksXG4gICAgICAgICAgICAgIChyZXNvbHZlZFZhbHVlLnZhbHVlID0gaGFuZGxlci52YWx1ZSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGJvdW5kQXJncyAmJiB3YWtlQ2h1bmsoYm91bmRBcmdzLCBoYW5kbGVyLnZhbHVlKSkpO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoIWhhbmRsZXIuZXJyb3JlZCkge1xuICAgICAgICAgICAgdmFyIGJsb2NrZWRWYWx1ZSA9IGhhbmRsZXIudmFsdWU7XG4gICAgICAgICAgICBoYW5kbGVyLmVycm9yZWQgPSAhMDtcbiAgICAgICAgICAgIGhhbmRsZXIudmFsdWUgPSBlcnJvcjtcbiAgICAgICAgICAgIHZhciBjaHVuayA9IGhhbmRsZXIuY2h1bms7XG4gICAgICAgICAgICBudWxsICE9PSBjaHVuayAmJlxuICAgICAgICAgICAgICBcImJsb2NrZWRcIiA9PT0gY2h1bmsuc3RhdHVzICYmXG4gICAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgYmxvY2tlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gYmxvY2tlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgYmxvY2tlZFZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUgJiZcbiAgICAgICAgICAgICAgICAoKGJsb2NrZWRWYWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShibG9ja2VkVmFsdWUudHlwZSkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgIG93bmVyOiBibG9ja2VkVmFsdWUuX293bmVyXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKGNodW5rLl9kZWJ1Z0luZm8gfHwgKGNodW5rLl9kZWJ1Z0luZm8gPSBbXSkpLnB1c2goXG4gICAgICAgICAgICAgICAgICBibG9ja2VkVmFsdWVcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgdHJpZ2dlckVycm9yT25DaHVuayhjaHVuaywgZXJyb3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgcmVmZXJlbmNlLCBwYXJlbnRPYmplY3QsIGtleSwgbWFwKSB7XG4gICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2Uuc3BsaXQoXCI6XCIpO1xuICAgICAgdmFyIGlkID0gcGFyc2VJbnQocmVmZXJlbmNlWzBdLCAxNik7XG4gICAgICBpZCA9IGdldENodW5rKHJlc3BvbnNlLCBpZCk7XG4gICAgICBzd2l0Y2ggKGlkLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kZWxcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayhpZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2R1bGVcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kdWxlQ2h1bmsoaWQpO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChpZC5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgIGZvciAodmFyIHZhbHVlID0gaWQudmFsdWUsIGkgPSAxOyBpIDwgcmVmZXJlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKDsgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRTsgKVxuICAgICAgICAgICAgICBpZiAoKCh2YWx1ZSA9IHZhbHVlLl9wYXlsb2FkKSwgXCJmdWxmaWxsZWRcIiA9PT0gdmFsdWUuc3RhdHVzKSlcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JSZWZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgbWFwLFxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLnNsaWNlKGkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3JlZmVyZW5jZVtpXV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3BvbnNlID0gbWFwKHJlc3BvbnNlLCB2YWx1ZSwgcGFyZW50T2JqZWN0LCBrZXkpO1xuICAgICAgICAgIGlkLl9kZWJ1Z0luZm8gJiZcbiAgICAgICAgICAgIChcIm9iamVjdFwiICE9PSB0eXBlb2YgcmVzcG9uc2UgfHxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gcmVzcG9uc2UgfHxcbiAgICAgICAgICAgICAgKCFpc0FycmF5SW1wbChyZXNwb25zZSkgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZXNwb25zZVtBU1lOQ19JVEVSQVRPUl0gJiZcbiAgICAgICAgICAgICAgICByZXNwb25zZS4kJHR5cGVvZiAhPT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB8fFxuICAgICAgICAgICAgICByZXNwb25zZS5fZGVidWdJbmZvIHx8XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNwb25zZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaWQuX2RlYnVnSW5mb1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgIHJldHVybiB3YWl0Rm9yUmVmZXJlbmNlKFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBwYXJlbnRPYmplY3QsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIG1hcCxcbiAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXJcbiAgICAgICAgICAgICAgPyAoKGluaXRpYWxpemluZ0hhbmRsZXIuZXJyb3JlZCA9ICEwKSxcbiAgICAgICAgICAgICAgICAoaW5pdGlhbGl6aW5nSGFuZGxlci52YWx1ZSA9IGlkLnJlYXNvbikpXG4gICAgICAgICAgICAgIDogKGluaXRpYWxpemluZ0hhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBpZC5yZWFzb24sXG4gICAgICAgICAgICAgICAgICBkZXBzOiAwLFxuICAgICAgICAgICAgICAgICAgZXJyb3JlZDogITBcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVNYXAocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcChtb2RlbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVNldChyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KG1vZGVsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQmxvYihyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBuZXcgQmxvYihtb2RlbC5zbGljZSgxKSwgeyB0eXBlOiBtb2RlbFswXSB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybURhdGEocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXNwb25zZSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlbC5sZW5ndGg7IGkrKylcbiAgICAgICAgcmVzcG9uc2UuYXBwZW5kKG1vZGVsW2ldWzBdLCBtb2RlbFtpXVsxXSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3RJdGVyYXRvcihyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBtb2RlbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU1vZGVsKHJlc3BvbnNlLCBtb2RlbCkge1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZU1vZGVsU3RyaW5nKHJlc3BvbnNlLCBwYXJlbnRPYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChcIiRcIiA9PT0gdmFsdWVbMF0pIHtcbiAgICAgICAgaWYgKFwiJFwiID09PSB2YWx1ZSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVsbCAhPT0gaW5pdGlhbGl6aW5nSGFuZGxlciAmJlxuICAgICAgICAgICAgICBcIjBcIiA9PT0ga2V5ICYmXG4gICAgICAgICAgICAgIChpbml0aWFsaXppbmdIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgIHBhcmVudDogaW5pdGlhbGl6aW5nSGFuZGxlcixcbiAgICAgICAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICBkZXBzOiAwLFxuICAgICAgICAgICAgICAgIGVycm9yZWQ6ICExXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgKTtcbiAgICAgICAgc3dpdGNoICh2YWx1ZVsxXSkge1xuICAgICAgICAgIGNhc2UgXCIkXCI6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwYXJlbnRPYmplY3QgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpKSxcbiAgICAgICAgICAgICAgKHJlc3BvbnNlID0gZ2V0Q2h1bmsocmVzcG9uc2UsIHBhcmVudE9iamVjdCkpLFxuICAgICAgICAgICAgICBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKHJlc3BvbnNlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiQFwiOlxuICAgICAgICAgICAgaWYgKDIgPT09IHZhbHVlLmxlbmd0aCkgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgIHBhcmVudE9iamVjdCA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAxNik7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2h1bmsocmVzcG9uc2UsIHBhcmVudE9iamVjdCk7XG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiBTeW1ib2wuZm9yKHZhbHVlLnNsaWNlKDIpKTtcbiAgICAgICAgICBjYXNlIFwiRlwiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHZhbHVlID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgbG9hZFNlcnZlclJlZmVyZW5jZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJUXCI6XG4gICAgICAgICAgICBwYXJlbnRPYmplY3QgPSBcIiRcIiArIHZhbHVlLnNsaWNlKDIpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5fdGVtcFJlZnM7XG4gICAgICAgICAgICBpZiAobnVsbCA9PSByZXNwb25zZSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJNaXNzaW5nIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzZXQgYnV0IHRoZSBSU0MgcmVzcG9uc2UgcmV0dXJuZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlLiBQYXNzIGEgdGVtcG9yYXJ5UmVmZXJlbmNlIG9wdGlvbiB3aXRoIHRoZSBzZXQgdGhhdCB3YXMgdXNlZCB3aXRoIHRoZSByZXBseS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldChwYXJlbnRPYmplY3QpO1xuICAgICAgICAgIGNhc2UgXCJRXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodmFsdWUgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIHZhbHVlLCBwYXJlbnRPYmplY3QsIGtleSwgY3JlYXRlTWFwKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHZhbHVlID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCB2YWx1ZSwgcGFyZW50T2JqZWN0LCBrZXksIGNyZWF0ZVNldClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIkJcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh2YWx1ZSA9IHZhbHVlLnNsaWNlKDIpKSxcbiAgICAgICAgICAgICAgZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgdmFsdWUsIHBhcmVudE9iamVjdCwga2V5LCBjcmVhdGVCbG9iKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiS1wiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHZhbHVlID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgY3JlYXRlRm9ybURhdGFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHZhbHVlID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcmVzb2x2ZUVycm9yRGV2XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh2YWx1ZSA9IHZhbHVlLnNsaWNlKDIpKSxcbiAgICAgICAgICAgICAgZ2V0T3V0bGluZWRNb2RlbChcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3QsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGV4dHJhY3RJdGVyYXRvclxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJJXCI6XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgIHJldHVybiBcIiQtMFwiID09PSB2YWx1ZSA/IC0wIDogLUluZmluaXR5O1xuICAgICAgICAgIGNhc2UgXCJOXCI6XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKHZhbHVlLnNsaWNlKDIpKSk7XG4gICAgICAgICAgY2FzZSBcIm5cIjpcbiAgICAgICAgICAgIHJldHVybiBCaWdJbnQodmFsdWUuc2xpY2UoMikpO1xuICAgICAgICAgIGNhc2UgXCJFXCI6XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gKDAsIGV2YWwpKHZhbHVlLnNsaWNlKDIpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJZXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50T2JqZWN0LCBrZXksIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIlRoaXMgb2JqZWN0IGhhcyBiZWVuIG9taXR0ZWQgYnkgUmVhY3QgaW4gdGhlIGNvbnNvbGUgbG9nIHRvIGF2b2lkIHNlbmRpbmcgdG9vIG11Y2ggZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuIFRyeSBsb2dnaW5nIHNtYWxsZXIgb3IgbW9yZSBzcGVjaWZpYyBvYmplY3RzLlwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHZhbHVlID0gdmFsdWUuc2xpY2UoMSkpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCB2YWx1ZSwgcGFyZW50T2JqZWN0LCBrZXksIGNyZWF0ZU1vZGVsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtaXNzaW5nQ2FsbCgpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnVHJ5aW5nIHRvIGNhbGwgYSBmdW5jdGlvbiBmcm9tIFwidXNlIHNlcnZlclwiIGJ1dCB0aGUgY2FsbFNlcnZlciBvcHRpb24gd2FzIG5vdCBpbXBsZW1lbnRlZCBpbiB5b3VyIHJvdXRlciBydW50aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlc3BvbnNlSW5zdGFuY2UoXG4gICAgICBidW5kbGVyQ29uZmlnLFxuICAgICAgc2VydmVyUmVmZXJlbmNlQ29uZmlnLFxuICAgICAgbW9kdWxlTG9hZGluZyxcbiAgICAgIGNhbGxTZXJ2ZXIsXG4gICAgICBlbmNvZGVGb3JtQWN0aW9uLFxuICAgICAgbm9uY2UsXG4gICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLFxuICAgICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgICAgIHJlcGxheUNvbnNvbGUsXG4gICAgICBlbnZpcm9ubWVudE5hbWVcbiAgICApIHtcbiAgICAgIHZhciBjaHVua3MgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLl9idW5kbGVyQ29uZmlnID0gYnVuZGxlckNvbmZpZztcbiAgICAgIHRoaXMuX3NlcnZlclJlZmVyZW5jZUNvbmZpZyA9IHNlcnZlclJlZmVyZW5jZUNvbmZpZztcbiAgICAgIHRoaXMuX21vZHVsZUxvYWRpbmcgPSBtb2R1bGVMb2FkaW5nO1xuICAgICAgdGhpcy5fY2FsbFNlcnZlciA9IHZvaWQgMCAhPT0gY2FsbFNlcnZlciA/IGNhbGxTZXJ2ZXIgOiBtaXNzaW5nQ2FsbDtcbiAgICAgIHRoaXMuX2VuY29kZUZvcm1BY3Rpb24gPSBlbmNvZGVGb3JtQWN0aW9uO1xuICAgICAgdGhpcy5fbm9uY2UgPSBub25jZTtcbiAgICAgIHRoaXMuX2NodW5rcyA9IGNodW5rcztcbiAgICAgIHRoaXMuX3N0cmluZ0RlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgIHRoaXMuX2Zyb21KU09OID0gbnVsbDtcbiAgICAgIHRoaXMuX3Jvd0xlbmd0aCA9IHRoaXMuX3Jvd1RhZyA9IHRoaXMuX3Jvd0lEID0gdGhpcy5fcm93U3RhdGUgPSAwO1xuICAgICAgdGhpcy5fYnVmZmVyID0gW107XG4gICAgICB0aGlzLl90ZW1wUmVmcyA9IHRlbXBvcmFyeVJlZmVyZW5jZXM7XG4gICAgICB0aGlzLl9kZWJ1Z1Jvb3RPd25lciA9IGJ1bmRsZXJDb25maWcgPVxuICAgICAgICB2b2lkIDAgPT09IFJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXIgfHxcbiAgICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlci5BXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBSZWFjdFNoYXJlZEludGVyYWxzU2VydmVyLkEuZ2V0T3duZXIoKTtcbiAgICAgIHRoaXMuX2RlYnVnUm9vdFN0YWNrID1cbiAgICAgICAgbnVsbCAhPT0gYnVuZGxlckNvbmZpZyA/IEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpIDogbnVsbDtcbiAgICAgIHRoaXMuX2RlYnVnRmluZFNvdXJjZU1hcFVSTCA9IGZpbmRTb3VyY2VNYXBVUkw7XG4gICAgICB0aGlzLl9yZXBsYXlDb25zb2xlID0gcmVwbGF5Q29uc29sZTtcbiAgICAgIHRoaXMuX3Jvb3RFbnZpcm9ubWVudE5hbWUgPVxuICAgICAgICB2b2lkIDAgPT09IGVudmlyb25tZW50TmFtZSA/IFwiU2VydmVyXCIgOiBlbnZpcm9ubWVudE5hbWU7XG4gICAgICB0aGlzLl9mcm9tSlNPTiA9IGNyZWF0ZUZyb21KU09OQ2FsbGJhY2sodGhpcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVNb2RlbChyZXNwb25zZSwgaWQsIG1vZGVsKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rXG4gICAgICAgID8gcmVzb2x2ZU1vZGVsQ2h1bmsoY2h1bmssIG1vZGVsKVxuICAgICAgICA6IGNodW5rcy5zZXQoXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5ldyBSZWFjdFByb21pc2UoXCJyZXNvbHZlZF9tb2RlbFwiLCBtb2RlbCwgbnVsbCwgcmVzcG9uc2UpXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRleHQocmVzcG9uc2UsIGlkLCB0ZXh0KSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rICYmIFwicGVuZGluZ1wiICE9PSBjaHVuay5zdGF0dXNcbiAgICAgICAgPyBjaHVuay5yZWFzb24uZW5xdWV1ZVZhbHVlKHRleHQpXG4gICAgICAgIDogY2h1bmtzLnNldChpZCwgbmV3IFJlYWN0UHJvbWlzZShcImZ1bGZpbGxlZFwiLCB0ZXh0LCBudWxsLCByZXNwb25zZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlQnVmZmVyKHJlc3BvbnNlLCBpZCwgYnVmZmVyKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rICYmIFwicGVuZGluZ1wiICE9PSBjaHVuay5zdGF0dXNcbiAgICAgICAgPyBjaHVuay5yZWFzb24uZW5xdWV1ZVZhbHVlKGJ1ZmZlcilcbiAgICAgICAgOiBjaHVua3Muc2V0KGlkLCBuZXcgUmVhY3RQcm9taXNlKFwiZnVsZmlsbGVkXCIsIGJ1ZmZlciwgbnVsbCwgcmVzcG9uc2UpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZShyZXNwb25zZSwgaWQsIG1vZGVsKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIG1vZGVsID0gSlNPTi5wYXJzZShtb2RlbCwgcmVzcG9uc2UuX2Zyb21KU09OKTtcbiAgICAgIHZhciBjbGllbnRSZWZlcmVuY2UgPSByZXNvbHZlQ2xpZW50UmVmZXJlbmNlKFxuICAgICAgICByZXNwb25zZS5fYnVuZGxlckNvbmZpZyxcbiAgICAgICAgbW9kZWxcbiAgICAgICk7XG4gICAgICBwcmVwYXJlRGVzdGluYXRpb25XaXRoQ2h1bmtzKFxuICAgICAgICByZXNwb25zZS5fbW9kdWxlTG9hZGluZyxcbiAgICAgICAgbW9kZWxbMV0sXG4gICAgICAgIHJlc3BvbnNlLl9ub25jZVxuICAgICAgKTtcbiAgICAgIGlmICgobW9kZWwgPSBwcmVsb2FkTW9kdWxlKGNsaWVudFJlZmVyZW5jZSkpKSB7XG4gICAgICAgIGlmIChjaHVuaykge1xuICAgICAgICAgIHZhciBibG9ja2VkQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICBibG9ja2VkQ2h1bmsuc3RhdHVzID0gXCJibG9ja2VkXCI7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIChibG9ja2VkQ2h1bmsgPSBuZXcgUmVhY3RQcm9taXNlKFwiYmxvY2tlZFwiLCBudWxsLCBudWxsLCByZXNwb25zZSkpLFxuICAgICAgICAgICAgY2h1bmtzLnNldChpZCwgYmxvY2tlZENodW5rKTtcbiAgICAgICAgbW9kZWwudGhlbihcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZU1vZHVsZUNodW5rKGJsb2NrZWRDaHVuaywgY2xpZW50UmVmZXJlbmNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXJFcnJvck9uQ2h1bmsoYmxvY2tlZENodW5rLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGNodW5rXG4gICAgICAgICAgPyByZXNvbHZlTW9kdWxlQ2h1bmsoY2h1bmssIGNsaWVudFJlZmVyZW5jZSlcbiAgICAgICAgICA6IGNodW5rcy5zZXQoXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICAgICAgICAgIFwicmVzb2x2ZWRfbW9kdWxlXCIsXG4gICAgICAgICAgICAgICAgY2xpZW50UmVmZXJlbmNlLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVN0cmVhbShyZXNwb25zZSwgaWQsIHN0cmVhbSwgY29udHJvbGxlcikge1xuICAgICAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3MsXG4gICAgICAgIGNodW5rID0gY2h1bmtzLmdldChpZCk7XG4gICAgICBjaHVua1xuICAgICAgICA/IFwicGVuZGluZ1wiID09PSBjaHVuay5zdGF0dXMgJiZcbiAgICAgICAgICAoKHJlc3BvbnNlID0gY2h1bmsudmFsdWUpLFxuICAgICAgICAgIChjaHVuay5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKSxcbiAgICAgICAgICAoY2h1bmsudmFsdWUgPSBzdHJlYW0pLFxuICAgICAgICAgIChjaHVuay5yZWFzb24gPSBjb250cm9sbGVyKSxcbiAgICAgICAgICBudWxsICE9PSByZXNwb25zZSAmJiB3YWtlQ2h1bmsocmVzcG9uc2UsIGNodW5rLnZhbHVlKSlcbiAgICAgICAgOiBjaHVua3Muc2V0KFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBuZXcgUmVhY3RQcm9taXNlKFwiZnVsZmlsbGVkXCIsIHN0cmVhbSwgY29udHJvbGxlciwgcmVzcG9uc2UpXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSwgaWQsIHR5cGUpIHtcbiAgICAgIHZhciBjb250cm9sbGVyID0gbnVsbDtcbiAgICAgIHR5cGUgPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBzdGFydDogZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICBjb250cm9sbGVyID0gYztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXIgcHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBudWxsO1xuICAgICAgcmVzb2x2ZVN0cmVhbShyZXNwb25zZSwgaWQsIHR5cGUsIHtcbiAgICAgICAgZW5xdWV1ZVZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c0Jsb2NrZWRDaHVua1xuICAgICAgICAgICAgPyBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICAgICAgICA6IHByZXZpb3VzQmxvY2tlZENodW5rLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlTW9kZWw6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHByZXZpb3VzQmxvY2tlZENodW5rKSB7XG4gICAgICAgICAgICB2YXIgY2h1bmsgPSBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICAgICAgICBcInJlc29sdmVkX21vZGVsXCIsXG4gICAgICAgICAgICAgIGpzb24sXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoY2h1bmspO1xuICAgICAgICAgICAgXCJmdWxmaWxsZWRcIiA9PT0gY2h1bmsuc3RhdHVzXG4gICAgICAgICAgICAgID8gY29udHJvbGxlci5lbnF1ZXVlKGNodW5rLnZhbHVlKVxuICAgICAgICAgICAgICA6IChjaHVuay50aGVuKFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZW5xdWV1ZSh2KTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c0Jsb2NrZWRDaHVuayA9IGNodW5rKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNodW5rID0gcHJldmlvdXNCbG9ja2VkQ2h1bms7XG4gICAgICAgICAgICB2YXIgX2NodW5rMyA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSk7XG4gICAgICAgICAgICBfY2h1bmszLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZW5xdWV1ZSh2KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByZXZpb3VzQmxvY2tlZENodW5rID0gX2NodW5rMztcbiAgICAgICAgICAgIGNodW5rLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBwcmV2aW91c0Jsb2NrZWRDaHVuayA9PT0gX2NodW5rMyAmJiAocHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBudWxsKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZU1vZGVsQ2h1bmsoX2NodW5rMywganNvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHByZXZpb3VzQmxvY2tlZENodW5rKSBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYmxvY2tlZENodW5rID0gcHJldmlvdXNCbG9ja2VkQ2h1bms7XG4gICAgICAgICAgICBwcmV2aW91c0Jsb2NrZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICBibG9ja2VkQ2h1bmsudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcHJldmlvdXNCbG9ja2VkQ2h1bmspIGNvbnRyb2xsZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJsb2NrZWRDaHVuayA9IHByZXZpb3VzQmxvY2tlZENodW5rO1xuICAgICAgICAgICAgcHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBudWxsO1xuICAgICAgICAgICAgYmxvY2tlZENodW5rLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3luY0l0ZXJhdG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKG5leHQpIHtcbiAgICAgIG5leHQgPSB7IG5leHQ6IG5leHQgfTtcbiAgICAgIG5leHRbQVNZTkNfSVRFUkFUT1JdID0gYXN5bmNJdGVyYXRvcjtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydEFzeW5jSXRlcmFibGUocmVzcG9uc2UsIGlkLCBpdGVyYXRvcikge1xuICAgICAgdmFyIGJ1ZmZlciA9IFtdLFxuICAgICAgICBjbG9zZWQgPSAhMSxcbiAgICAgICAgbmV4dFdyaXRlSW5kZXggPSAwLFxuICAgICAgICBpdGVyYWJsZSA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgQVNZTkNfSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgbmV4dFJlYWRJbmRleCA9IDA7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGFyZylcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJWYWx1ZXMgY2Fubm90IGJlIHBhc3NlZCB0byBuZXh0KCkgb2YgQXN5bmNJdGVyYWJsZXMgcGFzc2VkIHRvIENsaWVudCBDb21wb25lbnRzLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobmV4dFJlYWRJbmRleCA9PT0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAoY2xvc2VkKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgXCJmdWxmaWxsZWRcIixcbiAgICAgICAgICAgICAgICAgIHsgZG9uZTogITAsIHZhbHVlOiB2b2lkIDAgfSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJ1ZmZlcltuZXh0UmVhZEluZGV4XSA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyW25leHRSZWFkSW5kZXgrK107XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgcmVzb2x2ZVN0cmVhbShcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGlkLFxuICAgICAgICBpdGVyYXRvciA/IGl0ZXJhYmxlW0FTWU5DX0lURVJBVE9SXSgpIDogaXRlcmFibGUsXG4gICAgICAgIHtcbiAgICAgICAgICBlbnF1ZXVlVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKG5leHRXcml0ZUluZGV4ID09PSBidWZmZXIubGVuZ3RoKVxuICAgICAgICAgICAgICBidWZmZXJbbmV4dFdyaXRlSW5kZXhdID0gbmV3IFJlYWN0UHJvbWlzZShcbiAgICAgICAgICAgICAgICBcImZ1bGZpbGxlZFwiLFxuICAgICAgICAgICAgICAgIHsgZG9uZTogITEsIHZhbHVlOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBidWZmZXJbbmV4dFdyaXRlSW5kZXhdLFxuICAgICAgICAgICAgICAgIHJlc29sdmVMaXN0ZW5lcnMgPSBjaHVuay52YWx1ZSxcbiAgICAgICAgICAgICAgICByZWplY3RMaXN0ZW5lcnMgPSBjaHVuay5yZWFzb247XG4gICAgICAgICAgICAgIGNodW5rLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICAgIGNodW5rLnZhbHVlID0geyBkb25lOiAhMSwgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgICAgIG51bGwgIT09IHJlc29sdmVMaXN0ZW5lcnMgJiZcbiAgICAgICAgICAgICAgICB3YWtlQ2h1bmtJZkluaXRpYWxpemVkKFxuICAgICAgICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzLFxuICAgICAgICAgICAgICAgICAgcmVqZWN0TGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRXcml0ZUluZGV4Kys7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnF1ZXVlTW9kZWw6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXggPT09IGJ1ZmZlci5sZW5ndGhcbiAgICAgICAgICAgICAgPyAoYnVmZmVyW25leHRXcml0ZUluZGV4XSA9IGNyZWF0ZVJlc29sdmVkSXRlcmF0b3JSZXN1bHRDaHVuayhcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogcmVzb2x2ZUl0ZXJhdG9yUmVzdWx0Q2h1bmsoYnVmZmVyW25leHRXcml0ZUluZGV4XSwgdmFsdWUsICExKTtcbiAgICAgICAgICAgIG5leHRXcml0ZUluZGV4Kys7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBjbG9zZWQgPSAhMDtcbiAgICAgICAgICAgIG5leHRXcml0ZUluZGV4ID09PSBidWZmZXIubGVuZ3RoXG4gICAgICAgICAgICAgID8gKGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0gPSBjcmVhdGVSZXNvbHZlZEl0ZXJhdG9yUmVzdWx0Q2h1bmsoXG4gICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICA6IHJlc29sdmVJdGVyYXRvclJlc3VsdENodW5rKGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0sIHZhbHVlLCAhMCk7XG4gICAgICAgICAgICBmb3IgKG5leHRXcml0ZUluZGV4Kys7IG5leHRXcml0ZUluZGV4IDwgYnVmZmVyLmxlbmd0aDsgKVxuICAgICAgICAgICAgICByZXNvbHZlSXRlcmF0b3JSZXN1bHRDaHVuayhcbiAgICAgICAgICAgICAgICBidWZmZXJbbmV4dFdyaXRlSW5kZXgrK10sXG4gICAgICAgICAgICAgICAgJ1wiJHVuZGVmaW5lZFwiJyxcbiAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2xvc2VkID0gITA7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBuZXh0V3JpdGVJbmRleCA9PT0gYnVmZmVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoYnVmZmVyW25leHRXcml0ZUluZGV4XSA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSkpO1xuICAgICAgICAgICAgICBuZXh0V3JpdGVJbmRleCA8IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdHJpZ2dlckVycm9yT25DaHVuayhidWZmZXJbbmV4dFdyaXRlSW5kZXgrK10sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0b3BTdHJlYW0ocmVzcG9uc2UsIGlkLCByb3cpIHtcbiAgICAgIChyZXNwb25zZSA9IHJlc3BvbnNlLl9jaHVua3MuZ2V0KGlkKSkgJiZcbiAgICAgICAgXCJmdWxmaWxsZWRcIiA9PT0gcmVzcG9uc2Uuc3RhdHVzICYmXG4gICAgICAgIHJlc3BvbnNlLnJlYXNvbi5jbG9zZShcIlwiID09PSByb3cgPyAnXCIkdW5kZWZpbmVkXCInIDogcm93KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUVycm9yRGV2KHJlc3BvbnNlLCBlcnJvckluZm8pIHtcbiAgICAgIHZhciBlbnYgPSBlcnJvckluZm8uZW52O1xuICAgICAgZXJyb3JJbmZvID0gYnVpbGRGYWtlQ2FsbFN0YWNrKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgZXJyb3JJbmZvLnN0YWNrLFxuICAgICAgICBlbnYsXG4gICAgICAgIEVycm9yLmJpbmQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBlcnJvckluZm8ubWVzc2FnZSB8fFxuICAgICAgICAgICAgXCJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgU2VydmVyIENvbXBvbmVudHMgcmVuZGVyIGJ1dCBubyBtZXNzYWdlIHdhcyBwcm92aWRlZFwiXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXNwb25zZSA9IGdldFJvb3RUYXNrKHJlc3BvbnNlLCBlbnYpO1xuICAgICAgcmVzcG9uc2UgPSBudWxsICE9IHJlc3BvbnNlID8gcmVzcG9uc2UucnVuKGVycm9ySW5mbykgOiBlcnJvckluZm8oKTtcbiAgICAgIHJlc3BvbnNlLmVudmlyb25tZW50TmFtZSA9IGVudjtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUhpbnQocmVzcG9uc2UsIGNvZGUsIG1vZGVsKSB7XG4gICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UobW9kZWwsIHJlc3BvbnNlLl9mcm9tSlNPTik7XG4gICAgICBtb2RlbCA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLmQ7XG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICBtb2RlbC5EKHJlc3BvbnNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNcIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuQyhyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuQyhyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgIGNvZGUgPSByZXNwb25zZVswXTtcbiAgICAgICAgICB2YXIgYXMgPSByZXNwb25zZVsxXTtcbiAgICAgICAgICAzID09PSByZXNwb25zZS5sZW5ndGhcbiAgICAgICAgICAgID8gbW9kZWwuTChjb2RlLCBhcywgcmVzcG9uc2VbMl0pXG4gICAgICAgICAgICA6IG1vZGVsLkwoY29kZSwgYXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZXNwb25zZVxuICAgICAgICAgICAgPyBtb2RlbC5tKHJlc3BvbnNlKVxuICAgICAgICAgICAgOiBtb2RlbC5tKHJlc3BvbnNlWzBdLCByZXNwb25zZVsxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlc3BvbnNlXG4gICAgICAgICAgICA/IG1vZGVsLlgocmVzcG9uc2UpXG4gICAgICAgICAgICA6IG1vZGVsLlgocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuUyhyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuUyhcbiAgICAgICAgICAgICAgICByZXNwb25zZVswXSxcbiAgICAgICAgICAgICAgICAwID09PSByZXNwb25zZVsxXSA/IHZvaWQgMCA6IHJlc3BvbnNlWzFdLFxuICAgICAgICAgICAgICAgIDMgPT09IHJlc3BvbnNlLmxlbmd0aCA/IHJlc3BvbnNlWzJdIDogdm9pZCAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlc3BvbnNlXG4gICAgICAgICAgICA/IG1vZGVsLk0ocmVzcG9uc2UpXG4gICAgICAgICAgICA6IG1vZGVsLk0ocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmFrZUZ1bmN0aW9uKFxuICAgICAgbmFtZSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlTWFwLFxuICAgICAgbGluZSxcbiAgICAgIGNvbCxcbiAgICAgIGVudmlyb25tZW50TmFtZVxuICAgICkge1xuICAgICAgbmFtZSB8fCAobmFtZSA9IFwiPGFub255bW91cz5cIik7XG4gICAgICB2YXIgZW5jb2RlZE5hbWUgPSBKU09OLnN0cmluZ2lmeShuYW1lKTtcbiAgICAgIDEgPj0gbGluZVxuICAgICAgICA/ICgobGluZSA9IGVuY29kZWROYW1lLmxlbmd0aCArIDcpLFxuICAgICAgICAgIChjb2wgPVxuICAgICAgICAgICAgXCIoe1wiICtcbiAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgIFwiOl89PlwiICtcbiAgICAgICAgICAgIFwiIFwiLnJlcGVhdChjb2wgPCBsaW5lID8gMCA6IGNvbCAtIGxpbmUpICtcbiAgICAgICAgICAgIFwiXygpfSlcXG4vKiBUaGlzIG1vZHVsZSB3YXMgcmVuZGVyZWQgYnkgYSBTZXJ2ZXIgQ29tcG9uZW50LiBUdXJuIG9uIFNvdXJjZSBNYXBzIHRvIHNlZSB0aGUgc2VydmVyIHNvdXJjZS4gKi9cIikpXG4gICAgICAgIDogKGNvbCA9XG4gICAgICAgICAgICBcIi8qIFRoaXMgbW9kdWxlIHdhcyByZW5kZXJlZCBieSBhIFNlcnZlciBDb21wb25lbnQuIFR1cm4gb24gU291cmNlIE1hcHMgdG8gc2VlIHRoZSBzZXJ2ZXIgc291cmNlLiAqL1wiICtcbiAgICAgICAgICAgIFwiXFxuXCIucmVwZWF0KGxpbmUgLSAyKSArXG4gICAgICAgICAgICBcIih7XCIgK1xuICAgICAgICAgICAgZW5jb2RlZE5hbWUgK1xuICAgICAgICAgICAgXCI6Xz0+XFxuXCIgK1xuICAgICAgICAgICAgXCIgXCIucmVwZWF0KDEgPiBjb2wgPyAwIDogY29sIC0gMSkgK1xuICAgICAgICAgICAgXCJfKCl9KVwiKTtcbiAgICAgIGZpbGVuYW1lLnN0YXJ0c1dpdGgoXCIvXCIpICYmIChmaWxlbmFtZSA9IFwiZmlsZTovL1wiICsgZmlsZW5hbWUpO1xuICAgICAgc291cmNlTWFwXG4gICAgICAgID8gKChjb2wgKz1cbiAgICAgICAgICAgIFwiXFxuLy8jIHNvdXJjZVVSTD1yc2M6Ly9SZWFjdC9cIiArXG4gICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoZW52aXJvbm1lbnROYW1lKSArXG4gICAgICAgICAgICBcIi9cIiArXG4gICAgICAgICAgICBlbmNvZGVVUkkoZmlsZW5hbWUpICtcbiAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgIGZha2VGdW5jdGlvbklkeCsrKSxcbiAgICAgICAgICAoY29sICs9IFwiXFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9XCIgKyBzb3VyY2VNYXApKVxuICAgICAgICA6IChjb2wgPSBmaWxlbmFtZVxuICAgICAgICAgICAgPyBjb2wgKyAoXCJcXG4vLyMgc291cmNlVVJMPVwiICsgZW5jb2RlVVJJKGZpbGVuYW1lKSlcbiAgICAgICAgICAgIDogY29sICsgXCJcXG4vLyMgc291cmNlVVJMPTxhbm9ueW1vdXM+XCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGZuID0gKDAsIGV2YWwpKGNvbClbbmFtZV07XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGZuID0gZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICByZXR1cm4gXygpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZEZha2VDYWxsU3RhY2socmVzcG9uc2UsIHN0YWNrLCBlbnZpcm9ubWVudE5hbWUsIGlubmVyQ2FsbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZnJhbWUgPSBzdGFja1tpXSxcbiAgICAgICAgICBmcmFtZUtleSA9IGZyYW1lLmpvaW4oXCItXCIpICsgXCItXCIgKyBlbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgZm4gPSBmYWtlRnVuY3Rpb25DYWNoZS5nZXQoZnJhbWVLZXkpO1xuICAgICAgICBpZiAodm9pZCAwID09PSBmbikge1xuICAgICAgICAgIGZuID0gZnJhbWVbMF07XG4gICAgICAgICAgdmFyIGZpbGVuYW1lID0gZnJhbWVbMV0sXG4gICAgICAgICAgICBsaW5lID0gZnJhbWVbMl07XG4gICAgICAgICAgZnJhbWUgPSBmcmFtZVszXTtcbiAgICAgICAgICB2YXIgZmluZFNvdXJjZU1hcFVSTCA9IHJlc3BvbnNlLl9kZWJ1Z0ZpbmRTb3VyY2VNYXBVUkw7XG4gICAgICAgICAgZmluZFNvdXJjZU1hcFVSTCA9IGZpbmRTb3VyY2VNYXBVUkxcbiAgICAgICAgICAgID8gZmluZFNvdXJjZU1hcFVSTChmaWxlbmFtZSwgZW52aXJvbm1lbnROYW1lKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIGZuID0gY3JlYXRlRmFrZUZ1bmN0aW9uKFxuICAgICAgICAgICAgZm4sXG4gICAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgZnJhbWUsXG4gICAgICAgICAgICBlbnZpcm9ubWVudE5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGZha2VGdW5jdGlvbkNhY2hlLnNldChmcmFtZUtleSwgZm4pO1xuICAgICAgICB9XG4gICAgICAgIGlubmVyQ2FsbCA9IGZuLmJpbmQobnVsbCwgaW5uZXJDYWxsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbm5lckNhbGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJvb3RUYXNrKHJlc3BvbnNlLCBjaGlsZEVudmlyb25tZW50TmFtZSkge1xuICAgICAgdmFyIHJvb3RUYXNrID0gcmVzcG9uc2UuX2RlYnVnUm9vdFRhc2s7XG4gICAgICByZXR1cm4gcm9vdFRhc2tcbiAgICAgICAgPyByZXNwb25zZS5fcm9vdEVudmlyb25tZW50TmFtZSAhPT0gY2hpbGRFbnZpcm9ubWVudE5hbWVcbiAgICAgICAgICA/ICgocmVzcG9uc2UgPSBjb25zb2xlLmNyZWF0ZVRhc2suYmluZChcbiAgICAgICAgICAgICAgY29uc29sZSxcbiAgICAgICAgICAgICAgJ1widXNlICcgKyBjaGlsZEVudmlyb25tZW50TmFtZS50b0xvd2VyQ2FzZSgpICsgJ1wiJ1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICByb290VGFzay5ydW4ocmVzcG9uc2UpKVxuICAgICAgICAgIDogcm9vdFRhc2tcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmYWtlSlNYQ2FsbFNpdGUoKSB7XG4gICAgICByZXR1cm4gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVGYWtlU3RhY2socmVzcG9uc2UsIGRlYnVnSW5mbykge1xuICAgICAgdm9pZCAwID09PSBkZWJ1Z0luZm8uZGVidWdTdGFjayAmJlxuICAgICAgICAobnVsbCAhPSBkZWJ1Z0luZm8uc3RhY2sgJiZcbiAgICAgICAgICAoZGVidWdJbmZvLmRlYnVnU3RhY2sgPSBjcmVhdGVGYWtlSlNYQ2FsbFN0YWNrSW5ERVYoXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIGRlYnVnSW5mby5zdGFjayxcbiAgICAgICAgICAgIG51bGwgPT0gZGVidWdJbmZvLmVudiA/IFwiXCIgOiBkZWJ1Z0luZm8uZW52XG4gICAgICAgICAgKSksXG4gICAgICAgIG51bGwgIT0gZGVidWdJbmZvLm93bmVyICYmXG4gICAgICAgICAgaW5pdGlhbGl6ZUZha2VTdGFjayhyZXNwb25zZSwgZGVidWdJbmZvLm93bmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVEZWJ1Z0luZm8ocmVzcG9uc2UsIGlkLCBkZWJ1Z0luZm8pIHtcbiAgICAgIG51bGwgPT09IGRlYnVnSW5mby5vd25lciAmJiBudWxsICE9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RPd25lclxuICAgICAgICA/ICgoZGVidWdJbmZvLm93bmVyID0gcmVzcG9uc2UuX2RlYnVnUm9vdE93bmVyKSxcbiAgICAgICAgICAoZGVidWdJbmZvLmRlYnVnU3RhY2sgPSByZXNwb25zZS5fZGVidWdSb290U3RhY2spKVxuICAgICAgICA6IGluaXRpYWxpemVGYWtlU3RhY2socmVzcG9uc2UsIGRlYnVnSW5mbyk7XG4gICAgICByZXNwb25zZSA9IGdldENodW5rKHJlc3BvbnNlLCBpZCk7XG4gICAgICAocmVzcG9uc2UuX2RlYnVnSW5mbyB8fCAocmVzcG9uc2UuX2RlYnVnSW5mbyA9IFtdKSkucHVzaChkZWJ1Z0luZm8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50U3RhY2tJbkRFVigpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlQ29uc29sZUVudHJ5KHJlc3BvbnNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHJlc3BvbnNlLl9yZXBsYXlDb25zb2xlKSB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZSh2YWx1ZSwgcmVzcG9uc2UuX2Zyb21KU09OKTtcbiAgICAgICAgdmFsdWUgPSBwYXlsb2FkWzBdO1xuICAgICAgICB2YXIgc3RhY2tUcmFjZSA9IHBheWxvYWRbMV0sXG4gICAgICAgICAgb3duZXIgPSBwYXlsb2FkWzJdLFxuICAgICAgICAgIGVudiA9IHBheWxvYWRbM107XG4gICAgICAgIHBheWxvYWQgPSBwYXlsb2FkLnNsaWNlKDQpO1xuICAgICAgICByZXBsYXlDb25zb2xlV2l0aENhbGxTdGFja0luREVWKFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHN0YWNrVHJhY2UsXG4gICAgICAgICAgb3duZXIsXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbWVyZ2VCdWZmZXIoYnVmZmVyLCBsYXN0Q2h1bmspIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBsID0gYnVmZmVyLmxlbmd0aCwgYnl0ZUxlbmd0aCA9IGxhc3RDaHVuay5sZW5ndGgsIGkgPSAwO1xuICAgICAgICBpIDwgbDtcbiAgICAgICAgaSsrXG4gICAgICApXG4gICAgICAgIGJ5dGVMZW5ndGggKz0gYnVmZmVyW2ldLmJ5dGVMZW5ndGg7XG4gICAgICBieXRlTGVuZ3RoID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAoaSA9IDApOyBfaTIgPCBsOyBfaTIrKykge1xuICAgICAgICB2YXIgY2h1bmsgPSBidWZmZXJbX2kyXTtcbiAgICAgICAgYnl0ZUxlbmd0aC5zZXQoY2h1bmssIGkpO1xuICAgICAgICBpICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICB9XG4gICAgICBieXRlTGVuZ3RoLnNldChsYXN0Q2h1bmssIGkpO1xuICAgICAgcmV0dXJuIGJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVUeXBlZEFycmF5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBpZCxcbiAgICAgIGJ1ZmZlcixcbiAgICAgIGxhc3RDaHVuayxcbiAgICAgIGNvbnN0cnVjdG9yLFxuICAgICAgYnl0ZXNQZXJFbGVtZW50XG4gICAgKSB7XG4gICAgICBidWZmZXIgPVxuICAgICAgICAwID09PSBidWZmZXIubGVuZ3RoICYmIDAgPT09IGxhc3RDaHVuay5ieXRlT2Zmc2V0ICUgYnl0ZXNQZXJFbGVtZW50XG4gICAgICAgICAgPyBsYXN0Q2h1bmtcbiAgICAgICAgICA6IG1lcmdlQnVmZmVyKGJ1ZmZlciwgbGFzdENodW5rKTtcbiAgICAgIGNvbnN0cnVjdG9yID0gbmV3IGNvbnN0cnVjdG9yKFxuICAgICAgICBidWZmZXIuYnVmZmVyLFxuICAgICAgICBidWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgYnVmZmVyLmJ5dGVMZW5ndGggLyBieXRlc1BlckVsZW1lbnRcbiAgICAgICk7XG4gICAgICByZXNvbHZlQnVmZmVyKHJlc3BvbnNlLCBpZCwgY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRnVsbEJpbmFyeVJvdyhyZXNwb25zZSwgaWQsIHRhZywgYnVmZmVyLCBjaHVuaykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICByZXNvbHZlQnVmZmVyKHJlc3BvbnNlLCBpZCwgbWVyZ2VCdWZmZXIoYnVmZmVyLCBjaHVuaykuYnVmZmVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBJbnQ4QXJyYXksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgcmVzb2x2ZUJ1ZmZlcihcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAwID09PSBidWZmZXIubGVuZ3RoID8gY2h1bmsgOiBtZXJnZUJ1ZmZlcihidWZmZXIsIGNodW5rKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDg1OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgVWludDhDbGFtcGVkQXJyYXksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA4MzpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEludDE2QXJyYXksIDIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBVaW50MTZBcnJheSwgMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgSW50MzJBcnJheSwgNCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIFVpbnQzMkFycmF5LCA0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBGbG9hdDMyQXJyYXksIDQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBGbG9hdDY0QXJyYXksIDgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEJpZ0ludDY0QXJyYXksIDgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBCaWdVaW50NjRBcnJheSwgOCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDg2OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgRGF0YVZpZXcsIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBzdHJpbmdEZWNvZGVyID0gcmVzcG9uc2UuX3N0cmluZ0RlY29kZXIsIHJvdyA9IFwiXCIsIGkgPSAwO1xuICAgICAgICBpIDwgYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgaSsrXG4gICAgICApXG4gICAgICAgIHJvdyArPSBzdHJpbmdEZWNvZGVyLmRlY29kZShidWZmZXJbaV0sIGRlY29kZXJPcHRpb25zKTtcbiAgICAgIHJvdyArPSBzdHJpbmdEZWNvZGVyLmRlY29kZShjaHVuayk7XG4gICAgICBwcm9jZXNzRnVsbFN0cmluZ1JvdyhyZXNwb25zZSwgaWQsIHRhZywgcm93KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0Z1bGxTdHJpbmdSb3cocmVzcG9uc2UsIGlkLCB0YWcsIHJvdykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICByZXNvbHZlTW9kdWxlKHJlc3BvbnNlLCBpZCwgcm93KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICByZXNvbHZlSGludChyZXNwb25zZSwgcm93WzBdLCByb3cuc2xpY2UoMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgIHJvdyA9IEpTT04ucGFyc2Uocm93KTtcbiAgICAgICAgICB0YWcgPSByZXNvbHZlRXJyb3JEZXYocmVzcG9uc2UsIHJvdyk7XG4gICAgICAgICAgdGFnLmRpZ2VzdCA9IHJvdy5kaWdlc3Q7XG4gICAgICAgICAgcm93ID0gcmVzcG9uc2UuX2NodW5rcztcbiAgICAgICAgICB2YXIgY2h1bmsgPSByb3cuZ2V0KGlkKTtcbiAgICAgICAgICBjaHVua1xuICAgICAgICAgICAgPyB0cmlnZ2VyRXJyb3JPbkNodW5rKGNodW5rLCB0YWcpXG4gICAgICAgICAgICA6IHJvdy5zZXQoaWQsIG5ldyBSZWFjdFByb21pc2UoXCJyZWplY3RlZFwiLCBudWxsLCB0YWcsIHJlc3BvbnNlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODQ6XG4gICAgICAgICAgcmVzb2x2ZVRleHQocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHRhZyA9IG5ldyBSZWFjdFByb21pc2UoXCJyZXNvbHZlZF9tb2RlbFwiLCByb3csIG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayh0YWcpO1xuICAgICAgICAgIFwiZnVsZmlsbGVkXCIgPT09IHRhZy5zdGF0dXNcbiAgICAgICAgICAgID8gcmVzb2x2ZURlYnVnSW5mbyhyZXNwb25zZSwgaWQsIHRhZy52YWx1ZSlcbiAgICAgICAgICAgIDogdGFnLnRoZW4oXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlRGVidWdJbmZvKHJlc3BvbnNlLCBpZCwgdik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg3OlxuICAgICAgICAgIHJlc29sdmVDb25zb2xlRW50cnkocmVzcG9uc2UsIHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgc3RhcnRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSwgaWQsIHZvaWQgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW0ocmVzcG9uc2UsIGlkLCBcImJ5dGVzXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg4OlxuICAgICAgICAgIHN0YXJ0QXN5bmNJdGVyYWJsZShyZXNwb25zZSwgaWQsICExKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgc3RhcnRBc3luY0l0ZXJhYmxlKHJlc3BvbnNlLCBpZCwgITApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgIHN0b3BTdHJlYW0ocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlc29sdmVNb2RlbChyZXNwb25zZSwgaWQsIHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21KU09OQ2FsbGJhY2socmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICAgIHJldHVybiBwYXJzZU1vZGVsU3RyaW5nKHJlc3BvbnNlLCB0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBudWxsICE9PSB2YWx1ZSkge1xuICAgICAgICAgIGlmICh2YWx1ZVswXSA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKGtleSA9IHZhbHVlWzRdKSxcbiAgICAgICAgICAgICAgKHZhbHVlID0ge1xuICAgICAgICAgICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgICAgICAgICAgdHlwZTogdmFsdWVbMV0sXG4gICAgICAgICAgICAgICAga2V5OiB2YWx1ZVsyXSxcbiAgICAgICAgICAgICAgICBwcm9wczogdmFsdWVbM10sXG4gICAgICAgICAgICAgICAgX293bmVyOiBudWxsID09PSBrZXkgPyByZXNwb25zZS5fZGVidWdSb290T3duZXIgOiBrZXlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgXCJyZWZcIiwge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGdldDogbnVsbFJlZkdldHRlclxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKHZhbHVlLl9zdG9yZSA9IHt9KSxcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsIFwiX2RlYnVnSW5mb1wiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGluaXRpYWxpemluZ0hhbmRsZXIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyO1xuICAgICAgICAgICAgICBpbml0aWFsaXppbmdIYW5kbGVyID0gaGFuZGxlci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGhhbmRsZXIuZXJyb3JlZFxuICAgICAgICAgICAgICAgID8gKChrZXkgPSBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICBcInJlamVjdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHZhbHVlLnR5cGUpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB2YWx1ZS5fb3duZXJcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKGtleS5fZGVidWdJbmZvID0gW3ZhbHVlXSksXG4gICAgICAgICAgICAgICAgICAodmFsdWUgPSBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKGtleSkpKVxuICAgICAgICAgICAgICAgIDogMCA8IGhhbmRsZXIuZGVwcyAmJlxuICAgICAgICAgICAgICAgICAgKChrZXkgPSBuZXcgUmVhY3RQcm9taXNlKFwiYmxvY2tlZFwiLCBudWxsLCBudWxsLCByZXNwb25zZSkpLFxuICAgICAgICAgICAgICAgICAgKGhhbmRsZXIudmFsdWUgPSB2YWx1ZSksXG4gICAgICAgICAgICAgICAgICAoaGFuZGxlci5jaHVuayA9IGtleSksXG4gICAgICAgICAgICAgICAgICAodmFsdWUgPSBPYmplY3QuZnJlZXplLmJpbmQoT2JqZWN0LCB2YWx1ZS5wcm9wcykpLFxuICAgICAgICAgICAgICAgICAga2V5LnRoZW4odmFsdWUsIHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSA9IGNyZWF0ZUxhenlDaHVua1dyYXBwZXIoa2V5KSkpO1xuICAgICAgICAgICAgfSBlbHNlIE9iamVjdC5mcmVlemUodmFsdWUucHJvcHMpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBub1NlcnZlckNhbGwoKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJTZXJ2ZXIgRnVuY3Rpb25zIGNhbm5vdCBiZSBjYWxsZWQgZHVyaW5nIGluaXRpYWwgcmVuZGVyLiBUaGlzIHdvdWxkIGNyZWF0ZSBhIGZldGNoIHdhdGVyZmFsbC4gVHJ5IHRvIHVzZSBhIFNlcnZlciBDb21wb25lbnQgdG8gcGFzcyBkYXRhIHRvIENsaWVudCBDb21wb25lbnRzIGluc3RlYWQuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlRnJvbU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUluc3RhbmNlKFxuICAgICAgICBvcHRpb25zLnNlcnZlckNvbnN1bWVyTWFuaWZlc3QubW9kdWxlTWFwLFxuICAgICAgICBvcHRpb25zLnNlcnZlckNvbnN1bWVyTWFuaWZlc3Quc2VydmVyTW9kdWxlTWFwLFxuICAgICAgICBvcHRpb25zLnNlcnZlckNvbnN1bWVyTWFuaWZlc3QubW9kdWxlTG9hZGluZyxcbiAgICAgICAgbm9TZXJ2ZXJDYWxsLFxuICAgICAgICBvcHRpb25zLmVuY29kZUZvcm1BY3Rpb24sXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm5vbmNlID8gb3B0aW9ucy5ub25jZSA6IHZvaWQgMCxcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRlbXBvcmFyeVJlZmVyZW5jZXNcbiAgICAgICAgICA/IG9wdGlvbnMudGVtcG9yYXJ5UmVmZXJlbmNlc1xuICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuZmluZFNvdXJjZU1hcFVSTCA/IG9wdGlvbnMuZmluZFNvdXJjZU1hcFVSTCA6IHZvaWQgMCxcbiAgICAgICAgb3B0aW9ucyA/ICEwID09PSBvcHRpb25zLnJlcGxheUNvbnNvbGVMb2dzIDogITEsXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5lbnZpcm9ubWVudE5hbWUgPyBvcHRpb25zLmVudmlyb25tZW50TmFtZSA6IHZvaWQgMFxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRSZWFkaW5nRnJvbVN0cmVhbShyZXNwb25zZSwgc3RyZWFtKSB7XG4gICAgICBmdW5jdGlvbiBwcm9ncmVzcyhfcmVmKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gICAgICAgIGlmIChfcmVmLmRvbmUpIHJlcG9ydEdsb2JhbEVycm9yKHJlc3BvbnNlLCBFcnJvcihcIkNvbm5lY3Rpb24gY2xvc2VkLlwiKSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIHJvd1N0YXRlID0gcmVzcG9uc2UuX3Jvd1N0YXRlO1xuICAgICAgICAgIF9yZWYgPSByZXNwb25zZS5fcm93SUQ7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciByb3dUYWcgPSByZXNwb25zZS5fcm93VGFnLFxuICAgICAgICAgICAgICByb3dMZW5ndGggPSByZXNwb25zZS5fcm93TGVuZ3RoLFxuICAgICAgICAgICAgICBidWZmZXIgPSByZXNwb25zZS5fYnVmZmVyLFxuICAgICAgICAgICAgICBjaHVua0xlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIGkgPCBjaHVua0xlbmd0aDtcblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIGxhc3RJZHggPSAtMTtcbiAgICAgICAgICAgIHN3aXRjaCAocm93U3RhdGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGxhc3RJZHggPSB2YWx1ZVtpKytdO1xuICAgICAgICAgICAgICAgIDU4ID09PSBsYXN0SWR4XG4gICAgICAgICAgICAgICAgICA/IChyb3dTdGF0ZSA9IDEpXG4gICAgICAgICAgICAgICAgICA6IChfcmVmID1cbiAgICAgICAgICAgICAgICAgICAgICAoX3JlZiA8PCA0KSB8XG4gICAgICAgICAgICAgICAgICAgICAgKDk2IDwgbGFzdElkeCA/IGxhc3RJZHggLSA4NyA6IGxhc3RJZHggLSA0OCkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcm93U3RhdGUgPSB2YWx1ZVtpXTtcbiAgICAgICAgICAgICAgICA4NCA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICA2NSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICA3OSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAxMTEgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgODUgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgODMgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgMTE1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDc2ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDEwOCA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICA3MSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAxMDMgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgNzcgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgMTA5ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIDg2ID09PSByb3dTdGF0ZVxuICAgICAgICAgICAgICAgICAgPyAoKHJvd1RhZyA9IHJvd1N0YXRlKSwgKHJvd1N0YXRlID0gMiksIGkrKylcbiAgICAgICAgICAgICAgICAgIDogKDY0IDwgcm93U3RhdGUgJiYgOTEgPiByb3dTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAzNSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAxMTQgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgMTIwID09PSByb3dTdGF0ZVxuICAgICAgICAgICAgICAgICAgICA/ICgocm93VGFnID0gcm93U3RhdGUpLCAocm93U3RhdGUgPSAzKSwgaSsrKVxuICAgICAgICAgICAgICAgICAgICA6ICgocm93VGFnID0gMCksIChyb3dTdGF0ZSA9IDMpKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGxhc3RJZHggPSB2YWx1ZVtpKytdO1xuICAgICAgICAgICAgICAgIDQ0ID09PSBsYXN0SWR4XG4gICAgICAgICAgICAgICAgICA/IChyb3dTdGF0ZSA9IDQpXG4gICAgICAgICAgICAgICAgICA6IChyb3dMZW5ndGggPVxuICAgICAgICAgICAgICAgICAgICAgIChyb3dMZW5ndGggPDwgNCkgfFxuICAgICAgICAgICAgICAgICAgICAgICg5NiA8IGxhc3RJZHggPyBsYXN0SWR4IC0gODcgOiBsYXN0SWR4IC0gNDgpKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGxhc3RJZHggPSB2YWx1ZS5pbmRleE9mKDEwLCBpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIChsYXN0SWR4ID0gaSArIHJvd0xlbmd0aCksXG4gICAgICAgICAgICAgICAgICBsYXN0SWR4ID4gdmFsdWUubGVuZ3RoICYmIChsYXN0SWR4ID0gLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZhbHVlLmJ5dGVPZmZzZXQgKyBpO1xuICAgICAgICAgICAgaWYgKC0xIDwgbGFzdElkeClcbiAgICAgICAgICAgICAgKHJvd0xlbmd0aCA9IG5ldyBVaW50OEFycmF5KHZhbHVlLmJ1ZmZlciwgb2Zmc2V0LCBsYXN0SWR4IC0gaSkpLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdWxsQmluYXJ5Um93KHJlc3BvbnNlLCBfcmVmLCByb3dUYWcsIGJ1ZmZlciwgcm93TGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAoaSA9IGxhc3RJZHgpLFxuICAgICAgICAgICAgICAgIDMgPT09IHJvd1N0YXRlICYmIGkrKyxcbiAgICAgICAgICAgICAgICAocm93TGVuZ3RoID0gX3JlZiA9IHJvd1RhZyA9IHJvd1N0YXRlID0gMCksXG4gICAgICAgICAgICAgICAgKGJ1ZmZlci5sZW5ndGggPSAwKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgICAgIHZhbHVlLmJ1ZmZlcixcbiAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgdmFsdWUuYnl0ZUxlbmd0aCAtIGlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICByb3dMZW5ndGggLT0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3BvbnNlLl9yb3dTdGF0ZSA9IHJvd1N0YXRlO1xuICAgICAgICAgIHJlc3BvbnNlLl9yb3dJRCA9IF9yZWY7XG4gICAgICAgICAgcmVzcG9uc2UuX3Jvd1RhZyA9IHJvd1RhZztcbiAgICAgICAgICByZXNwb25zZS5fcm93TGVuZ3RoID0gcm93TGVuZ3RoO1xuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MpLmNhdGNoKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICByZXBvcnRHbG9iYWxFcnJvcihyZXNwb25zZSwgZSk7XG4gICAgICB9XG4gICAgICB2YXIgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzKS5jYXRjaChlcnJvcik7XG4gICAgfVxuICAgIHZhciBSZWFjdERPTSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIiksXG4gICAgICBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIGRlY29kZXJPcHRpb25zID0geyBzdHJlYW06ICEwIH0sXG4gICAgICBiaW5kJDEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCxcbiAgICAgIGNodW5rQ2FjaGUgPSBuZXcgTWFwKCksXG4gICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0RE9NLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG4gICAgdmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgICAgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgQVNZTkNfSVRFUkFUT1IgPSBTeW1ib2wuYXN5bmNJdGVyYXRvcixcbiAgICAgIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICAgICAganN4UHJvcHNQYXJlbnRzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIGpzeENoaWxkcmVuUGFyZW50cyA9IG5ldyBXZWFrTWFwKCksXG4gICAgICBDTElFTlRfUkVGRVJFTkNFX1RBRyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICAgIGtub3duU2VydmVyUmVmZXJlbmNlcyA9IG5ldyBXZWFrTWFwKCksXG4gICAgICBib3VuZENhY2hlID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIGZha2VTZXJ2ZXJGdW5jdGlvbklkeCA9IDAsXG4gICAgICBGdW5jdGlvbkJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCxcbiAgICAgIEFycmF5U2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgICB2OEZyYW1lUmVnRXhwID1cbiAgICAgICAgL14gezN9IGF0ICg/OiguKykgXFwoKC4rKTooXFxkKyk6KFxcZCspXFwpfCg/OmFzeW5jICk/KC4rKTooXFxkKyk6KFxcZCspKSQvLFxuICAgICAganNjU3BpZGVyTW9ua2V5RnJhbWVSZWdFeHAgPSAvKD86KC4qKUApPyguKik6KFxcZCspOihcXGQrKS8sXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIik7XG4gICAgbmV3IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcCkoKTtcbiAgICB2YXIgUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlciA9XG4gICAgICAgIFJlYWN0Ll9fU0VSVkVSX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFIHx8XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXI7XG4gICAgUmVhY3RQcm9taXNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJvbWlzZS5wcm90b3R5cGUpO1xuICAgIFJlYWN0UHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZGVsXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsodGhpcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2R1bGVcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kdWxlQ2h1bmsodGhpcyk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHRoaXMuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICByZXNvbHZlKHRoaXMudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgIHJlc29sdmUgJiZcbiAgICAgICAgICAgIChudWxsID09PSB0aGlzLnZhbHVlICYmICh0aGlzLnZhbHVlID0gW10pLFxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHJlc29sdmUpKTtcbiAgICAgICAgICByZWplY3QgJiZcbiAgICAgICAgICAgIChudWxsID09PSB0aGlzLnJlYXNvbiAmJiAodGhpcy5yZWFzb24gPSBbXSksXG4gICAgICAgICAgICB0aGlzLnJlYXNvbi5wdXNoKHJlamVjdCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlamVjdCAmJiByZWplY3QodGhpcy5yZWFzb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGluaXRpYWxpemluZ0hhbmRsZXIgPSBudWxsLFxuICAgICAgZmFrZUZ1bmN0aW9uQ2FjaGUgPSBuZXcgTWFwKCksXG4gICAgICBmYWtlRnVuY3Rpb25JZHggPSAwLFxuICAgICAgY3JlYXRlRmFrZUpTWENhbGxTdGFjayA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgIGVudmlyb25tZW50TmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gYnVpbGRGYWtlQ2FsbFN0YWNrKFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgIGVudmlyb25tZW50TmFtZSxcbiAgICAgICAgICAgIGZha2VKU1hDYWxsU2l0ZVxuICAgICAgICAgICkoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZUZha2VKU1hDYWxsU3RhY2tJbkRFViA9IGNyZWF0ZUZha2VKU1hDYWxsU3RhY2tbXG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICAgIF0uYmluZChjcmVhdGVGYWtlSlNYQ2FsbFN0YWNrKSxcbiAgICAgIHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoXG4gICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBhcmdzXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBwcmV2U3RhY2sgPSBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2s7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gZ2V0Q3VycmVudFN0YWNrSW5ERVY7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kTmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkaXJcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlyeG1sXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImdyb3VwRW5kXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInRhYmxlXCI6XG4gICAgICAgICAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gYmluZCQxLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlW21ldGhvZE5hbWVdLFxuICAgICAgICAgICAgICAgICAgICBbY29uc29sZV0uY29uY2F0KGFyZ3MpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXNzZXJ0XCI6XG4gICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBuZXdBcmdzID0gYXJncy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0FyZ3Nbb2Zmc2V0XVxuICAgICAgICAgICAgICAgID8gbmV3QXJncy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgXCJcXHUwMDFiWzBtXFx1MDAxYls3bSVjJXNcXHUwMDFiWzBtJWMgXCIgKyBuZXdBcmdzW29mZnNldF0sXG4gICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZDogI2U2ZTZlNjtiYWNrZ3JvdW5kOiBsaWdodC1kYXJrKHJnYmEoMCwwLDAsMC4xKSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KSk7Y29sb3I6ICMwMDAwMDA7Y29sb3I6IGxpZ2h0LWRhcmsoIzAwMDAwMCwgI2ZmZmZmZik7Ym9yZGVyLXJhZGl1czogMnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICsgZW52ICsgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IG5ld0FyZ3Muc3BsaWNlKFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIFwiXFx1MDAxYlswbVxcdTAwMWJbN20lYyVzXFx1MDAxYlswbSVjIFwiLFxuICAgICAgICAgICAgICAgICAgICBcImJhY2tncm91bmQ6ICNlNmU2ZTY7YmFja2dyb3VuZDogbGlnaHQtZGFyayhyZ2JhKDAsMCwwLDAuMSksIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkpO2NvbG9yOiAjMDAwMDAwO2NvbG9yOiBsaWdodC1kYXJrKCMwMDAwMDAsICNmZmZmZmYpO2JvcmRlci1yYWRpdXM6IDJweFwiLFxuICAgICAgICAgICAgICAgICAgICBcIiBcIiArIGVudiArIFwiIFwiLFxuICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBuZXdBcmdzLnVuc2hpZnQoY29uc29sZSk7XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGJpbmQkMS5hcHBseShcbiAgICAgICAgICAgICAgICBjb25zb2xlW21ldGhvZE5hbWVdLFxuICAgICAgICAgICAgICAgIG5ld0FyZ3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjYWxsU3RhY2sgPSBidWlsZEZha2VDYWxsU3RhY2soXG4gICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICAgICAgICBlbnYsXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG51bGwgIT0gb3duZXIgJiYgaW5pdGlhbGl6ZUZha2VTdGFjayhyZXNwb25zZSwgb3duZXIpO1xuICAgICAgICAgICAgdmFyIHJvb3RUYXNrID0gZ2V0Um9vdFRhc2socmVzcG9uc2UsIGVudik7XG4gICAgICAgICAgICBudWxsICE9IHJvb3RUYXNrID8gcm9vdFRhc2sucnVuKGNhbGxTdGFjaykgOiBjYWxsU3RhY2soKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gcHJldlN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrSW5ERVYgPSByZXBsYXlDb25zb2xlV2l0aENhbGxTdGFja1tcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIlxuICAgICAgXS5iaW5kKHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrKTtcbiAgICBleHBvcnRzLmNyZWF0ZUZyb21GZXRjaCA9IGZ1bmN0aW9uIChwcm9taXNlRm9yUmVzcG9uc2UsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IGNyZWF0ZVJlc3BvbnNlRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICBwcm9taXNlRm9yUmVzcG9uc2UudGhlbihcbiAgICAgICAgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKHJlc3BvbnNlLCByLmJvZHkpO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKHJlc3BvbnNlLCBlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBnZXRDaHVuayhyZXNwb25zZSwgMCk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSA9IGZ1bmN0aW9uIChzdHJlYW0sIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBjcmVhdGVSZXNwb25zZUZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAgICAgc3RhcnRSZWFkaW5nRnJvbVN0cmVhbShvcHRpb25zLCBzdHJlYW0pO1xuICAgICAgcmV0dXJuIGdldENodW5rKG9wdGlvbnMsIDApO1xuICAgIH07XG4gICAgZXhwb3J0cy5jcmVhdGVTZXJ2ZXJSZWZlcmVuY2UgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UkMShpZCwgbm9TZXJ2ZXJDYWxsKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlVGVtcG9yYXJ5UmVmZXJlbmNlU2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5ldyBNYXAoKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuZW5jb2RlUmVwbHkgPSBmdW5jdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBhYm9ydCA9IHByb2Nlc3NSZXBseShcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50ZW1wb3JhcnlSZWZlcmVuY2VzXG4gICAgICAgICAgICA/IG9wdGlvbnMudGVtcG9yYXJ5UmVmZXJlbmNlc1xuICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3RcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaWduYWwpIHtcbiAgICAgICAgICB2YXIgc2lnbmFsID0gb3B0aW9ucy5zaWduYWw7XG4gICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSBhYm9ydChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYWJvcnQoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgbGlzdGVuZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6WyJfZGVmaW5lUHJvcGVydHkiLCJvYmoiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwicmVzb2x2ZUNsaWVudFJlZmVyZW5jZSIsImJ1bmRsZXJDb25maWciLCJtZXRhZGF0YSIsIm1vZHVsZUV4cG9ydHMiLCJuYW1lIiwiRXJyb3IiLCJsZW5ndGgiLCJpZCIsImNodW5rcyIsInJlc29sdmVTZXJ2ZXJSZWZlcmVuY2UiLCJyZXNvbHZlZE1vZHVsZURhdGEiLCJpZHgiLCJsYXN0SW5kZXhPZiIsInNsaWNlIiwiYXN5bmMiLCJyZXF1aXJlQXN5bmNNb2R1bGUiLCJwcm9taXNlIiwiZ2xvYmFsVGhpcyIsIl9fbmV4dF9yZXF1aXJlX18iLCJ0aGVuIiwic3RhdHVzIiwicmVhc29uIiwiaWdub3JlUmVqZWN0IiwicHJlbG9hZE1vZHVsZSIsInByb21pc2VzIiwiaSIsImNodW5rSWQiLCJlbnRyeSIsImNodW5rQ2FjaGUiLCJnZXQiLCJfX3dlYnBhY2tfY2h1bmtfbG9hZF9fIiwicHVzaCIsInJlc29sdmUiLCJzZXQiLCJiaW5kIiwiUHJvbWlzZSIsImFsbCIsInJlcXVpcmVNb2R1bGUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInByZXBhcmVEZXN0aW5hdGlvbldpdGhDaHVua3MiLCJtb2R1bGVMb2FkaW5nIiwibm9uY2UkanNjb21wJDAiLCJub25jZSIsIkpTQ29tcGlsZXJfdGVtcF9jb25zdCIsIlJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzIiwiZCIsIkpTQ29tcGlsZXJfdGVtcF9jb25zdCRqc2NvbXAkMCIsIlgiLCJKU0NvbXBpbGVyX3RlbXBfY29uc3QkanNjb21wJDEiLCJwcmVmaXgiLCJKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQiLCJjcm9zc09yaWdpbiIsImNhbGwiLCJnZXRJdGVyYXRvckZuIiwibWF5YmVJdGVyYWJsZSIsIk1BWUJFX0lURVJBVE9SX1NZTUJPTCIsImlzT2JqZWN0UHJvdG90eXBlIiwib2JqZWN0IiwiT2JqZWN0UHJvdG90eXBlIiwicHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaXNTaW1wbGVPYmplY3QiLCJuYW1lcyIsImRlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvYmplY3ROYW1lIiwidG9TdHJpbmciLCJyZXBsYWNlIiwibSIsInAwIiwiZGVzY3JpYmVLZXlGb3JFcnJvck1lc3NhZ2UiLCJlbmNvZGVkS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsImRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UiLCJpc0FycmF5SW1wbCIsIiQkdHlwZW9mIiwiQ0xJRU5UX1JFRkVSRU5DRV9UQUciLCJkaXNwbGF5TmFtZSIsIlN0cmluZyIsImRlc2NyaWJlRWxlbWVudFR5cGUiLCJ0eXBlIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsIlJFQUNUX0ZPUldBUkRfUkVGX1RZUEUiLCJyZW5kZXIiLCJSRUFDVF9NRU1PX1RZUEUiLCJSRUFDVF9MQVpZX1RZUEUiLCJwYXlsb2FkIiwiX3BheWxvYWQiLCJfaW5pdCIsIngiLCJkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSIsIm9iamVjdE9yQXJyYXkiLCJleHBhbmRlZE5hbWUiLCJvYmpLaW5kIiwic3RhcnQiLCJqc3hDaGlsZHJlblBhcmVudHMiLCJoYXMiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJqc3hQcm9wc1BhcmVudHMiLCJrZXlzIiwiX3ZhbHVlMiIsIl9zdWJzdHIyIiwicmVwZWF0Iiwic2VyaWFsaXplTnVtYmVyIiwibnVtYmVyIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJJbmZpbml0eSIsInByb2Nlc3NSZXBseSIsInJvb3QiLCJmb3JtRmllbGRQcmVmaXgiLCJ0ZW1wb3JhcnlSZWZlcmVuY2VzIiwicmVqZWN0Iiwic2VyaWFsaXplVHlwZWRBcnJheSIsInRhZyIsInR5cGVkQXJyYXkiLCJCbG9iIiwiVWludDhBcnJheSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiYmxvYklkIiwibmV4dFBhcnRJZCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJzZXJpYWxpemVCaW5hcnlSZWFkZXIiLCJyZWFkZXIiLCJwcm9ncmVzcyIsImRvbmUiLCJkYXRhIiwic3RyZWFtSWQiLCJwZW5kaW5nUGFydHMiLCJyZWFkIiwic2VyaWFsaXplUmVhZGVyIiwicGFydEpTT04iLCJyZXNvbHZlVG9KU09OIiwic2VyaWFsaXplUmVhZGFibGVTdHJlYW0iLCJzdHJlYW0iLCJiaW5hcnlSZWFkZXIiLCJnZXRSZWFkZXIiLCJtb2RlIiwic2VyaWFsaXplQXN5bmNJdGVyYWJsZSIsIml0ZXJhYmxlIiwiaXRlcmF0b3IiLCJfcGFydEpTT04iLCJuZXh0IiwieCQwIiwib3JpZ2luYWxWYWx1ZSIsIkRhdGUiLCJjb25zb2xlIiwiZXJyb3IiLCJpbmRleE9mIiwicGFyZW50UmVmZXJlbmNlIiwid3JpdHRlbk9iamVjdHMiLCJpbml0IiwibGF6eUlkIiwic2VyaWFsaXplTW9kZWwiLCJfbGF6eUlkIiwiX3BhcnRKU09OMiIsIl9kYXRhIiwicHJvbWlzZUlkIiwicGFydFZhbHVlIiwiX3BhcnRKU09OMyIsIm1vZGVsUm9vdCIsIl9kYXRhMyIsImZvckVhY2giLCJvcmlnaW5hbEtleSIsIk1hcCIsIkFycmF5IiwiZnJvbSIsIlNldCIsIkFycmF5QnVmZmVyIiwiSW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiLCJEYXRhVmlldyIsIlJlYWRhYmxlU3RyZWFtIiwiQVNZTkNfSVRFUkFUT1IiLCJSRUFDVF9DT05URVhUX1RZUEUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJkZXNjcmlwdGlvbiIsImtub3duU2VydmVyUmVmZXJlbmNlcyIsIm1vZGVsIiwiV2Vha01hcCIsImpzb24iLCJlbmNvZGVGb3JtRGF0YSIsInJlZmVyZW5jZSIsInRoZW5hYmxlIiwicmVzIiwicmVqIiwiYm9keSIsImUiLCJkZWZhdWx0RW5jb2RlRm9ybUFjdGlvbiIsImlkZW50aWZpZXJQcmVmaXgiLCJib3VuZCIsImJvdW5kQ2FjaGUiLCJwcmVmaXhlZERhdGEiLCJtZXRob2QiLCJlbmNUeXBlIiwiaXNTaWduYXR1cmVFcXVhbCIsInJlZmVyZW5jZUlkIiwibnVtYmVyT2ZCb3VuZEFyZ3MiLCJib3VuZFByb21pc2UiLCJib3VuZEFyZ3MiLCJjcmVhdGVGYWtlU2VydmVyRnVuY3Rpb24iLCJmaWxlbmFtZSIsInNvdXJjZU1hcCIsImxpbmUiLCJjb2wiLCJlbnZpcm9ubWVudE5hbWUiLCJpbm5lckZ1bmN0aW9uIiwiZW5jb2RlZE5hbWUiLCJzdGFydHNXaXRoIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmFrZVNlcnZlckZ1bmN0aW9uSWR4IiwiZXZhbCIsInJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlIiwicHJveHkiLCJyZWZlcmVuY2UkanNjb21wJDAiLCJlbmNvZGVGb3JtQWN0aW9uIiwiZGVmaW5lUHJvcGVydGllcyIsIiQkRk9STV9BQ1RJT04iLCIkJElTX1NJR05BVFVSRV9FUVVBTCIsIm5ld0ZuIiwiRnVuY3Rpb25CaW5kIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJhcmdzIiwiQXJyYXlTbGljZSIsImNvbmNhdCIsImNyZWF0ZUJvdW5kU2VydmVyUmVmZXJlbmNlIiwibWV0YURhdGEiLCJjYWxsU2VydmVyIiwiZmluZFNvdXJjZU1hcFVSTCIsImFjdGlvbiIsImxvY2F0aW9uIiwiZnVuY3Rpb25OYW1lIiwiZW52IiwicGFyc2VTdGFja0xvY2F0aW9uIiwic3RhY2siLCJlbmRPZkZpcnN0IiwiZW5kT2ZTZWNvbmQiLCJ2OEZyYW1lUmVnRXhwIiwiZXhlYyIsImpzY1NwaWRlck1vbmtleUZyYW1lUmVnRXhwIiwiY3JlYXRlU2VydmVyUmVmZXJlbmNlJDEiLCJnZXRDb21wb25lbnROYW1lRnJvbVR5cGUiLCJSRUFDVF9DTElFTlRfUkVGRVJFTkNFIiwiUkVBQ1RfRlJBR01FTlRfVFlQRSIsIlJFQUNUX1BPUlRBTF9UWVBFIiwiUkVBQ1RfUFJPRklMRVJfVFlQRSIsIlJFQUNUX1NUUklDVF9NT0RFX1RZUEUiLCJSRUFDVF9DT05TVU1FUl9UWVBFIiwiX2NvbnRleHQiLCJpbm5lclR5cGUiLCJSZWFjdFByb21pc2UiLCJyZXNwb25zZSIsIl9yZXNwb25zZSIsIl9kZWJ1Z0luZm8iLCJyZWFkQ2h1bmsiLCJjaHVuayIsImluaXRpYWxpemVNb2RlbENodW5rIiwiaW5pdGlhbGl6ZU1vZHVsZUNodW5rIiwiY3JlYXRlUGVuZGluZ0NodW5rIiwid2FrZUNodW5rIiwibGlzdGVuZXJzIiwid2FrZUNodW5rSWZJbml0aWFsaXplZCIsInJlc29sdmVMaXN0ZW5lcnMiLCJyZWplY3RMaXN0ZW5lcnMiLCJ0cmlnZ2VyRXJyb3JPbkNodW5rIiwiY3JlYXRlUmVzb2x2ZWRJdGVyYXRvclJlc3VsdENodW5rIiwicmVzb2x2ZUl0ZXJhdG9yUmVzdWx0Q2h1bmsiLCJyZXNvbHZlTW9kZWxDaHVuayIsImVucXVldWVNb2RlbCIsInJlc29sdmVNb2R1bGVDaHVuayIsInByZXZIYW5kbGVyIiwiaW5pdGlhbGl6aW5nSGFuZGxlciIsInJlc29sdmVkTW9kZWwiLCJwYXJzZSIsIl9mcm9tSlNPTiIsImVycm9yZWQiLCJkZXBzIiwicmVwb3J0R2xvYmFsRXJyb3IiLCJfY2h1bmtzIiwibnVsbFJlZkdldHRlciIsImNyZWF0ZUxhenlDaHVua1dyYXBwZXIiLCJsYXp5VHlwZSIsImdldENodW5rIiwid2FpdEZvclJlZmVyZW5jZSIsInJlZmVyZW5jZWRDaHVuayIsInBhcmVudE9iamVjdCIsIm1hcCIsInBhdGgiLCJmdWxmaWxsIiwiaGFuZGxlciIsInNwbGljZSIsInByb3BzIiwiX293bmVyIiwiYmxvY2tlZFZhbHVlIiwib3duZXIiLCJwYXJlbnQiLCJsb2FkU2VydmVyUmVmZXJlbmNlIiwiX3NlcnZlclJlZmVyZW5jZUNvbmZpZyIsIl9jYWxsU2VydmVyIiwiX2VuY29kZUZvcm1BY3Rpb24iLCJfZGVidWdGaW5kU291cmNlTWFwVVJMIiwic2VydmVyUmVmZXJlbmNlIiwicmVzb2x2ZWRWYWx1ZSIsInVuc2hpZnQiLCJnZXRPdXRsaW5lZE1vZGVsIiwic3BsaXQiLCJwYXJzZUludCIsImNyZWF0ZU1hcCIsImNyZWF0ZVNldCIsImNyZWF0ZUJsb2IiLCJjcmVhdGVGb3JtRGF0YSIsImV4dHJhY3RJdGVyYXRvciIsIlN5bWJvbCIsImNyZWF0ZU1vZGVsIiwicGFyc2VNb2RlbFN0cmluZyIsImZvciIsIl90ZW1wUmVmcyIsInJlc29sdmVFcnJvckRldiIsIk5hTiIsIkJpZ0ludCIsIm1pc3NpbmdDYWxsIiwiUmVzcG9uc2VJbnN0YW5jZSIsInNlcnZlclJlZmVyZW5jZUNvbmZpZyIsInJlcGxheUNvbnNvbGUiLCJfYnVuZGxlckNvbmZpZyIsIl9tb2R1bGVMb2FkaW5nIiwiX25vbmNlIiwiX3N0cmluZ0RlY29kZXIiLCJUZXh0RGVjb2RlciIsIl9yb3dMZW5ndGgiLCJfcm93VGFnIiwiX3Jvd0lEIiwiX3Jvd1N0YXRlIiwiX2J1ZmZlciIsIl9kZWJ1Z1Jvb3RPd25lciIsIlJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXIiLCJBIiwiZ2V0T3duZXIiLCJfZGVidWdSb290U3RhY2siLCJfcmVwbGF5Q29uc29sZSIsIl9yb290RW52aXJvbm1lbnROYW1lIiwiY3JlYXRlRnJvbUpTT05DYWxsYmFjayIsInJlc29sdmVNb2RlbCIsInJlc29sdmVUZXh0IiwidGV4dCIsImVucXVldWVWYWx1ZSIsInJlc29sdmVCdWZmZXIiLCJyZXNvbHZlTW9kdWxlIiwiY2xpZW50UmVmZXJlbmNlIiwiYmxvY2tlZENodW5rIiwicmVzb2x2ZVN0cmVhbSIsImNvbnRyb2xsZXIiLCJzdGFydFJlYWRhYmxlU3RyZWFtIiwiYyIsInByZXZpb3VzQmxvY2tlZENodW5rIiwiZW5xdWV1ZSIsInYiLCJfY2h1bmszIiwiY2xvc2UiLCJhc3luY0l0ZXJhdG9yIiwiY3JlYXRlSXRlcmF0b3IiLCJzdGFydEFzeW5jSXRlcmFibGUiLCJjbG9zZWQiLCJuZXh0V3JpdGVJbmRleCIsIm5leHRSZWFkSW5kZXgiLCJhcmciLCJzdG9wU3RyZWFtIiwicm93IiwiZXJyb3JJbmZvIiwiYnVpbGRGYWtlQ2FsbFN0YWNrIiwibWVzc2FnZSIsImdldFJvb3RUYXNrIiwicnVuIiwicmVzb2x2ZUhpbnQiLCJjb2RlIiwiRCIsIkMiLCJhcyIsIkwiLCJTIiwiTSIsImNyZWF0ZUZha2VGdW5jdGlvbiIsImVuY29kZVVSSSIsImZha2VGdW5jdGlvbklkeCIsImZuIiwiXyIsImlubmVyQ2FsbCIsImZyYW1lIiwiZnJhbWVLZXkiLCJqb2luIiwiZmFrZUZ1bmN0aW9uQ2FjaGUiLCJjaGlsZEVudmlyb25tZW50TmFtZSIsInJvb3RUYXNrIiwiX2RlYnVnUm9vdFRhc2siLCJjcmVhdGVUYXNrIiwidG9Mb3dlckNhc2UiLCJmYWtlSlNYQ2FsbFNpdGUiLCJpbml0aWFsaXplRmFrZVN0YWNrIiwiZGVidWdJbmZvIiwiZGVidWdTdGFjayIsImNyZWF0ZUZha2VKU1hDYWxsU3RhY2tJbkRFViIsInJlc29sdmVEZWJ1Z0luZm8iLCJnZXRDdXJyZW50U3RhY2tJbkRFViIsInJlc29sdmVDb25zb2xlRW50cnkiLCJzdGFja1RyYWNlIiwicmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2tJbkRFViIsIm1lcmdlQnVmZmVyIiwibGFzdENodW5rIiwibCIsIl9pMiIsInJlc29sdmVUeXBlZEFycmF5IiwiY29uc3RydWN0b3IiLCJieXRlc1BlckVsZW1lbnQiLCJwcm9jZXNzRnVsbEJpbmFyeVJvdyIsInN0cmluZ0RlY29kZXIiLCJkZWNvZGUiLCJkZWNvZGVyT3B0aW9ucyIsInByb2Nlc3NGdWxsU3RyaW5nUm93IiwiZGlnZXN0IiwiX3N0b3JlIiwiZnJlZXplIiwibm9TZXJ2ZXJDYWxsIiwiY3JlYXRlUmVzcG9uc2VGcm9tT3B0aW9ucyIsIm9wdGlvbnMiLCJzZXJ2ZXJDb25zdW1lck1hbmlmZXN0IiwibW9kdWxlTWFwIiwic2VydmVyTW9kdWxlTWFwIiwicmVwbGF5Q29uc29sZUxvZ3MiLCJzdGFydFJlYWRpbmdGcm9tU3RyZWFtIiwiX3JlZiIsInJvd1N0YXRlIiwicm93VGFnIiwicm93TGVuZ3RoIiwiY2h1bmtMZW5ndGgiLCJsYXN0SWR4Iiwib2Zmc2V0IiwiY2F0Y2giLCJSZWFjdERPTSIsInJlcXVpcmUiLCJSZWFjdCIsImJpbmQkMSIsIkZ1bmN0aW9uIiwiX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFIiwiaXNBcnJheSIsIl9fU0VSVkVSX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSIsIlJlYWN0U2hhcmVkSW50ZXJuYWxzIiwiX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFIiwiY3JlYXRlIiwiY3JlYXRlRmFrZUpTWENhbGxTdGFjayIsInJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrIiwibWV0aG9kTmFtZSIsInByZXZTdGFjayIsImdldEN1cnJlbnRTdGFjayIsImEiLCJuZXdBcmdzIiwiY2FsbFN0YWNrIiwiZXhwb3J0cyIsImNyZWF0ZUZyb21GZXRjaCIsInByb21pc2VGb3JSZXNwb25zZSIsInIiLCJjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW0iLCJjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UiLCJjcmVhdGVUZW1wb3JhcnlSZWZlcmVuY2VTZXQiLCJlbmNvZGVSZXBseSIsImFib3J0Iiwic2lnbmFsIiwiYWJvcnRlZCIsImxpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js\n");
|
2322
1905
|
|
2323
1906
|
/***/ }),
|
2324
1907
|
|