{"version":3,"sources":["../../.yarn/cache/browser-pack-npm-6.1.0-67557e011b-9e5993d3ee.zip/node_modules/browser-pack/_prelude.js","../../.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip/node_modules/he/he.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/decode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/encode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/index.js","../../.yarn/cache/underscore-npm-1.13.6-3ebe9d92fb-d5cedd14a9.zip/node_modules/underscore/underscore-umd.js","business-objects/GeneratedCollectionDetails.js","lib/colorUtility.js","lib/getOptimizedCover-ts.js","models/dao/MediaParameters.js","public/ecmascript/components/collection_campaign_page/CollectionDefinition.js","public/ecmascript/components/collection_campaign_page/CollectionHighlightFactory.js","public/ecmascript/components/collection_campaign_page/CollectionManager.js","public/ecmascript/components/collection_campaign_page/PageManager.js","public/ecmascript/components/collection_highlight/templates/collection_highlight.html.js","public/ecmascript/components/collection_highlight/views/CollectionHighlight.js","public/ecmascript/components/collection_highlight_slanted/SlantedCollectionHightlight.html.js","public/ecmascript/components/collection_highlight_slanted/SlantedCollectionHightlight.js","public/ecmascript/components/common/HashManager.js","public/ecmascript/components/common/templates/Error.html.js","public/ecmascript/components/featured_collections/FeaturedCollectionView.js","public/ecmascript/components/media/ContextMenu.js","public/ecmascript/components/media/Cover.js","public/ecmascript/components/media/MediaInterface.js","public/ecmascript/components/media/TitleActionButton.js","public/ecmascript/components/media/TitleCard.js","public/ecmascript/components/media/TitleCollectionView.js","public/ecmascript/components/media/TitleHeaderBar.js","public/ecmascript/components/media/WishListButton.js","public/ecmascript/components/media/models/Title.js","public/ecmascript/components/media/models/TitleCollection.js","public/ecmascript/components/media/templates/ContextMenu.html.js","public/ecmascript/components/media/templates/Cover.html.js","public/ecmascript/components/media/templates/NoCover.html.js","public/ecmascript/components/media/templates/TitleAuthor.html.js","public/ecmascript/components/media/templates/TitleCard.html.js","public/ecmascript/components/media/templates/TitleFormatBadge.html.js","public/ecmascript/components/media/templates/TitleName.html.js","public/ecmascript/components/media/templates/WishListButton.html.js","public/ecmascript/components/media/views/TitleInfo.js","public/ecmascript/components/media/views/TitleInfo/TitleAuthor.js","public/ecmascript/components/media/views/TitleInfo/TitleEdition.js","public/ecmascript/components/media/views/TitleInfo/TitleFormatBadge.js","public/ecmascript/components/media/views/TitleInfo/TitleName.js","public/ecmascript/models/PatronTitleStatus.js","public/ecmascript/pages/featured_collection.js","public/ecmascript/title-actions/TitleActions.js","public/ecmascript/title-actions/TitleState.js","public/ecmascript/util/Promise.js","public/ecmascript/util/title-actions/processForwardedAction.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC1/DA,IAAM,IAAI,QAAQ,YAAR,CAAV;;AAEA;AACA,OAAO,OAAP;AACI,0CAAc;AAAA;;AACV,aAAK,SAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,EAA1B;AACA,aAAK,iBAAL,GAA0B,IAA1B,CAHU,CAGsB;AAChC,aAAK,cAAL,GAA0B,EAA1B,CAJU,CAIoB;AAC9B,aAAK,QAAL,GAA0B,EAA1B,CALU,CAKoB;AAC9B,aAAK,UAAL,GAA0B,EAA1B;;AAEA,aAAK,MAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,SAA1B,CATU,CAS2B;;AAErC,eAAO,MAA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","file":"featured_collection.bundle.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '"',\n\t\t'&': '&',\n\t\t'\\'': ''',\n\t\t'<': '<',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '>',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '`'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t\t.replace(/<\\u20D2/g, '<⃒')\n\t\t\t\t\t.replace(/fj/g, 'fj');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t.replace(/<\\u20D2/g, '<⃒');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `𝌆`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `𝌆`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n // Underscore.js 1.13.6\n // https://underscorejs.org\n // (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n\n // Current version.\n var VERSION = '1.13.6';\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // Modern feature detection.\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n // All **ECMAScript 5+** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n // Create references to these builtin functions because we override them.\n var _isNaN = isNaN,\n _isFinite = isFinite;\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n // The largest integer that can be represented exactly.\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n\n // Is a given variable an object?\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n }\n\n // Is a given value equal to null?\n function isNull(obj) {\n return obj === null;\n }\n\n // Is a given variable undefined?\n function isUndefined(obj) {\n return obj === void 0;\n }\n\n // Is a given value a boolean?\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n\n // Is a given value a DOM element?\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n // Internal function for creating a `toString`-based type tester.\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n\n // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n\n // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n // In IE 11, the most common among them, this problem also applies to\n // `Map`, `WeakMap` and `Set`.\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n\n // In IE 10 - Edge 13, we need a different heuristic\n // to determine whether an object is a `DataView`.\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n\n // Is a given value an array?\n // Delegates to ECMA5's native `Array.isArray`.\n var isArray = nativeIsArray || tagTester('Array');\n\n // Internal function to check whether `key` is an own property name of `obj`.\n function has$1(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has$1(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n\n // Is a given object a finite number?\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n\n // Is the given value `NaN`?\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n // Common internal logic for `isArrayLike` and `isBufferLike`.\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n\n // Internal helper to generate a function to obtain property `key` from `obj`.\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n\n // Internal helper to obtain the `byteLength` property of an object.\n var getByteLength = shallowProperty('byteLength');\n\n // Internal helper to determine whether we should spend extensive checks against\n // `ArrayBuffer` et al.\n var isBufferLike = createSizePropertyCheck(getByteLength);\n\n // Is a given value a typed array?\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n\n // Internal helper to obtain the `length` property of an object.\n var getLength = shallowProperty('length');\n\n // Internal helper to create a simple lookup structure.\n // `collectNonEnumProps` used to depend on `_.contains`, but this led to\n // circular imports. `emulatedSet` is a one-off solution that only works for\n // arrays of strings.\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n\n // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n // be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n // needed.\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has$1(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n\n // Returns whether an object has a given set of `key:value` pairs.\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n\n // If Underscore is called as a function, it returns a wrapped object that can\n // be used OO-style. This wrapper holds altered versions of all functions added\n // through `_.mixin`. Wrapped objects may be chained.\n function _$1(obj) {\n if (obj instanceof _$1) return obj;\n if (!(this instanceof _$1)) return new _$1(obj);\n this._wrapped = obj;\n }\n\n _$1.VERSION = VERSION;\n\n // Extracts the result from a wrapped and chained object.\n _$1.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxies for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n _$1.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // Internal function to wrap or shallow-copy an ArrayBuffer,\n // typed array or DataView to a new view, reusing the buffer.\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n\n // We use this string twice, so give it a name for minification.\n var tagDataView = '[object DataView]';\n\n // Internal recursive comparison function for `_.isEqual`.\n function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n\n // Internal recursive comparison function for `_.isEqual`.\n function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _$1) a = a._wrapped;\n if (b instanceof _$1) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n function isEqual(a, b) {\n return eq(a, b);\n }\n\n // Retrieve all the enumerable property names of an object.\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Since the regular `Object.prototype.toString` type tests don't work for\n // some types in IE 11, we use a fingerprinting heuristic instead, based\n // on the methods. It's not great, but it's the best we got.\n // The fingerprint method lists are defined below.\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n\n // In the interest of compact minification, we write\n // each string in the fingerprints only once.\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n // `Map`, `WeakMap` and `Set` each have slightly different\n // combinations of the above sublists.\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n\n // Retrieve the values of an object's properties.\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of `_.object` with one argument.\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n\n // Invert the keys and values of an object. The values must be serializable.\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n\n // Return a sorted list of the function names available on the object.\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n\n // An internal function for creating assigner functions.\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n\n // Extend a given object with all the properties in passed-in object(s).\n var extend = createAssigner(allKeys);\n\n // Assigns a given object with all the own properties in the passed-in\n // object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var extendOwn = createAssigner(keys);\n\n // Fill in a given object with default properties.\n var defaults = createAssigner(allKeys, true);\n\n // Create a naked function reference for surrogate-prototype-swapping.\n function ctor() {\n return function(){};\n }\n\n // An internal function for creating a new object that inherits from another.\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n\n // Create a (shallow-cloned) duplicate of an object.\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n\n // Invokes `interceptor` with the `obj` and then returns `obj`.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n\n // Normalize a (deep) property `path` to array.\n // Like `_.iteratee`, this function can be customized.\n function toPath$1(path) {\n return isArray(path) ? path : [path];\n }\n _$1.toPath = toPath$1;\n\n // Internal wrapper for `_.toPath` to enable minification.\n // Similar to `cb` for `_.iteratee`.\n function toPath(path) {\n return _$1.toPath(path);\n }\n\n // Internal function to obtain a nested property in `obj` along `path`.\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n\n // Get the value of the (deep) property on `path` from `object`.\n // If any property in `path` does not exist or if the value is\n // `undefined`, return `defaultValue` instead.\n // The `path` is normalized through `_.toPath`.\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n }\n\n // Shortcut function for checking if an object has a given property directly on\n // itself (in other words, not on a prototype). Unlike the internal `has`\n // function, this public version can also traverse nested properties.\n function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has$1(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n\n // Keep the identity function around for default iteratees.\n function identity(value) {\n return value;\n }\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indices.\n function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `_.identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only `argCount` argument.\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _$1.iteratee = iteratee;\n\n // The function we call internally to generate a callback. It invokes\n // `_.iteratee` if overridden, otherwise `baseIteratee`.\n function cb(value, context, argCount) {\n if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n\n // Returns the results of applying the `iteratee` to each element of `obj`.\n // In contrast to `_.map` it returns an object.\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function noop(){}\n\n // Generates a function for a given object that returns a given property.\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n\n // Run a function **n** times.\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n\n // Return a random integer between `min` and `max` (inclusive).\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n\n // A (possibly faster) way to get the current timestamp as an integer.\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n // Internal helper to generate functions for escaping and unescaping strings\n // to/from HTML interpolation.\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n\n // Internal list of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n // Function for escaping strings to HTML interpolation.\n var _escape = createEscaper(escapeMap);\n\n // Internal list of HTML entities for unescaping.\n var unescapeMap = invert(escapeMap);\n\n // Function for unescaping strings from HTML interpolation.\n var _unescape = createEscaper(unescapeMap);\n\n // By default, Underscore uses ERB-style template delimiters. Change the\n // following template settings to use alternative delimiters.\n var templateSettings = _$1.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `_.templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n\n // In order to prevent third-party code injection through\n // `_.templateSettings.variable`, we test it against the following regular\n // expression. It is intentionally a bit more liberal than just matching valid\n // identifiers, but still prevents possible loopholes through defaults or\n // destructuring assignment.\n var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _$1.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _$1);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n\n // Start chaining a wrapped Underscore object.\n function chain(obj) {\n var instance = _$1(obj);\n instance._chain = true;\n return instance;\n }\n\n // Internal function to execute `sourceFunc` bound to `context` with optional\n // `args`. Determines whether to execute a function as a constructor or as a\n // normal function.\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. `_` acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _$1;\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally).\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Internal helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var isArrayLike = createSizePropertyCheck(getLength);\n\n // Internal implementation of a recursive `flatten` function.\n function flatten$1(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten$1(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten$1(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n\n // Memoize an expensive function by storing its results.\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n var defer = partial(delay, _$1, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n\n // When a sequence of calls of the returned function ends, the argument\n // function is triggered. The end of a sequence is defined by the `wait`\n // parameter. If `immediate` is passed, the argument function will be\n // triggered at the beginning of the sequence instead of at the end.\n function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n }\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n\n // Returns a negated version of the passed-in predicate.\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n\n // Returns a function that will only be executed on and after the Nth call.\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n // Returns a function that will only be executed up to (but not including) the\n // Nth call.\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n var once = partial(before, 2);\n\n // Returns the first key on an object that passes a truth test.\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n\n // Internal function to generate `_.findIndex` and `_.findLastIndex`.\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a truth test.\n var findIndex = createPredicateIndexFinder(1);\n\n // Returns the last index on an array-like that passes a truth test.\n var findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n\n // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n\n // Return the position of the last occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n // Return the first value which passes a truth test.\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n\n // Convenience version of a common use case of `_.find`: getting the first\n // object containing specific `key:value` pairs.\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n\n // The cornerstone for collection functions, an `each`\n // implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n\n // Return the results of applying the iteratee to each element.\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Internal helper to create a reducing function, iterating left or right.\n function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n var reduce = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n var reduceRight = createReduce(-1);\n\n // Return all the elements that pass a truth test.\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n\n // Return all the elements for which a truth test fails.\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n\n // Determine whether all of the elements pass a truth test.\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n\n // Determine if at least one element in the object passes a truth test.\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n\n // Determine if the array or object contains a given item (using `===`).\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n\n // Invoke a method (with arguments) on every item in a collection.\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `_.map`: fetching a property.\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n\n // Convenience version of a common use case of `_.filter`: selecting only\n // objects containing specific `key:value` pairs.\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n\n // Return the maximum element (or element-based computation).\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Return the minimum element (or element-based computation).\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Safely create a real, live array from anything iterable.\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `_.map`.\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n\n // Shuffle a collection.\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n\n // Sort the object's values by a criterion produced by an iteratee.\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n\n // An internal function used for aggregate \"group by\" operations.\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n var groupBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n // when you know that your index values will be unique.\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n var countBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Split a collection into two arrays: one whose elements all pass the given\n // truth test, and one whose elements all do not pass the truth test.\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Return the number of elements in a collection.\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n\n // Internal `_.pick` helper function to determine whether `key` is an enumerable\n // property name of `obj`.\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n\n // Return a copy of the object only containing the allowed properties.\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten$1(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the disallowed properties.\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten$1(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. The **guard** check allows it to work with `_.map`.\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n\n // Returns everything but the first entry of the `array`. Especially useful on\n // the `arguments` object. Passing an **n** will return the rest N values in the\n // `array`.\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n\n // Trim out all falsy values from an array.\n function compact(array) {\n return filter(array, Boolean);\n }\n\n // Flatten out an array, either recursively (by default), or up to `depth`.\n // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\n function flatten(array, depth) {\n return flatten$1(array, depth, false);\n }\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n var difference = restArguments(function(array, rest) {\n rest = flatten$1(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n\n // Return a version of the array that does not contain the specified value(s).\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n var union = restArguments(function(arrays) {\n return uniq(flatten$1(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n\n // Complement of zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n var zip = restArguments(unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of `_.pairs`.\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n\n // Helper function to continue chaining intermediate results.\n function chainResult(instance, obj) {\n return instance._chain ? _$1(obj).chain() : obj;\n }\n\n // Add your own custom functions to the Underscore object.\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _$1[name] = obj[name];\n _$1.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_$1, args));\n };\n });\n return _$1;\n }\n\n // Add all mutator `Array` functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor `Array` functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n // Named Exports\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath$1,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _$1\n };\n\n // Default Export\n\n // Add all of the Underscore functions to the wrapper object.\n var _ = mixin(allExports);\n // Legacy Node.js API.\n _._ = _;\n\n return _;\n\n})));\n//# sourceMappingURL=underscore-umd.js.map\n","const _ = require('underscore');\n\n// ref: OverDrive.Thunder.Models.DataModels.GeneratedCollectionDetails\nmodule.exports = class GeneratedCollectionDetails {\n constructor() {\n this.mediaType = '';\n this.language = '';\n this.publisherEntityId = null; // int\n this.maturityLevels = []; // string\n this.subjects = []; // string\n this.bisacCodes = [];\n\n this.sortBy = '';\n this.maxItems = undefined; // int\n\n Object.assign(this, ...arguments);\n }\n\n // Translates GeneratedCollectionDetails model to parameters that align with the MediaParameters model for executing a \"search\"\n serializeForSearch() {\n let model = _.extend({}, this);\n\n // language is an array in MediaParameters\n model.language = _(_.flatten([model.language])).reject((val) => _.isEmpty(val));\n\n // maturityLevels is called maturityLevel\n model.maturityLevel = _(_.flatten([model.maturityLevels])).reject((val) => _.isEmpty(val));\n delete model.maturityLevels;\n\n // subjects is called subject\n model.subject = _(_.flatten([model.subjects])).reject((val) => _.isEmpty(val));\n delete model.subjects;\n\n if (window.featureManager.isEnabled('bisac-collection-filtering')) {\n model.bisacCode = _(_.flatten([model.bisacCodes])).reject((val) => _.isEmpty(val));\n }\n\n if (model.mediaTypes) {\n if (window.featureManager.isEnabled('media-types-collection-param')) {\n delete model.mediaType;\n } else{\n delete model.mediaTypes;\n }\n }\n\n if (model.mediaTypes) {\n model.mediaTypes = model.mediaTypes.join(',');\n } else if (window.featureManager.isEnabled('filter-out-ntc')) {\n model.mediaTypes = window.OverDrive.whitelistedMediaTypes;\n }\n\n delete model.bisacCodes; // we need to remove this property regardless because the correct query param is `bisacCode`. The mismatch between the thunder query params and the property names in the generated collection definitions is...fun.\n\n return model;\n }\n};\n","export default class ColorUtility {\n\n // see _vars.scss for the corresponding css color vars\n //\n static get highContrastBlue(){\n return '#0000FF';\n }\n\n static get highContrastBlueHover(){\n return '#0000F5';\n }\n\n static get highContrastYellow(){\n return '#FFFF00';\n }\n\n static get highContrastYellowHover() {\n return '#F5E600';\n }\n\n// credit: https://stackoverflow.com/a/39077686\n // This will accept three character shorthand hex colors as well as the standard six character format.\n static hexToRGB(hexColor){\n return hexColor.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i\n ,(m, r, g, b) => '#' + r + r + g + g + b + b)\n .substring(1).match(/.{2}/g)\n .map(x => parseInt(x, 16));\n }\n\n static rgbToHex(rgb) {\n let nToHex = function (n) {\n let hex = parseInt(n, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n return '#' + nToHex(rgb[0]) + nToHex(rgb[1]) + nToHex(rgb[2]);\n }\n\n static getTextColorFromRGB(backgroundRGB){\n // Standard contrast calculation based on the Y component of the YIQ color space. Libby uses the same default Luma threshold.\n // https://github.com/bksh/dewey-js/blob/ebb7189241c5eade8000776d97cd5451bf643e3d/src/app/base/cover-guru.js#L10\n // https://en.wikipedia.org/wiki/YIQ#From_RGB_to_YIQ\n const LUMA_THRESHOLD_YIQ = 190;\n return (backgroundRGB[0] * 299 + backgroundRGB[1] * 587 + backgroundRGB[2] * 114) / 1000 > LUMA_THRESHOLD_YIQ ? '#000000' : '#ffffff';\n }\n\n static getTextColorFromHex(backgroundHex){\n let rgb = ColorUtility.hexToRGB(backgroundHex);\n return ColorUtility.getTextColorFromRGB(rgb);\n }\n\n static shadeColorHex(hexColor, percent){\n let rgb = ColorUtility.hexToRGB(hexColor);\n let shadedRGB = ColorUtility.shadeColor(rgb, percent);\n return ColorUtility.rgbToHex(shadedRGB);\n }\n\n static shadeColor(rgb, percent){\n percent = Math.abs(percent);\n let hsl = ColorUtility.rgbToHsl(rgb[0], rgb[1], rgb[2]);\n let l = hsl[2];\n if (l >= 0.5){\n percent *= -1;\n }\n l = l + percent;\n hsl[2] = l;\n return ColorUtility.hslToRgb(hsl[0], hsl[1], hsl[2]);\n }\n\n /**\n * Credit: taken from https://stackoverflow.com/a/9493060\n *\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param {number} h The hue\n * @param {number} s The saturation\n * @param {number} l The lightness\n * @return {Array} The RGB representation\n */\n static hslToRgb(h, s, l){\n var r, g, b;\n\n if (s === 0){\n r = g = b = l; // achromatic\n } else {\n let hue2rgb = function (p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n };\n\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n }\n\n /**\n * Credit: taken from https://stackoverflow.com/a/9493060\n *\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and l in the set [0, 1].\n *\n * @param {number} r The red color value\n * @param {number} g The green color value\n * @param {number} b The blue color value\n * @return {Array} The HSL representation\n */\n static rgbToHsl(r, g, b){\n r = r / 255;\n g = g / 255;\n b = b / 255;\n let max = Math.max(r, g, b);\n let min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min){\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max){\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n\n return [h, s, l];\n }\n\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOptimizedCovers = void 0;\nvar _ = __importStar(require(\"underscore\"));\nfunction getOptimizedCovers(covers, desiredSize) {\n // coversBySize is now an array of covers, from smallest to largest\n var coversBySize = _.sortBy(covers, 'width');\n // Start with the biggest cover\n // Copy object with Object.assign() so we dont damage reference\n var optimizedCover = Object.assign({}, _.last(coversBySize));\n if (optimizedCover && optimizedCover.href) {\n var legacyToOptimizedImageHostsMap = {\n 'https://img1.od-cdn.com/': 'https://ic.od-cdn.com/resize',\n 'https://images.overdrivechina.cn/': 'https://images.overdrivechina.cn/resize'\n };\n var hostMapKey = _.find(Object.keys(legacyToOptimizedImageHostsMap), function (legacy) { return optimizedCover.href.startsWith(legacy); });\n if (hostMapKey) {\n // look up the corresponding optimized root, e.g. https://img1.od-cdn.com/ -> https://ic.od-cdn.com/resize\n var optimizedImageHost = legacyToOptimizedImageHostsMap[hostMapKey];\n var optimizations = 'type=auto'; // format = auto -> use webp if the device supports it\n var path = '';\n if (typeof document === 'undefined') {\n // node.js usage should be fine with the URL api\n var url = new URL(optimizedCover.href);\n path = url.pathname;\n }\n else {\n // hack to get url pathname since IE doesn't support the URL api. I didn't want to add a polyfill\n var a = document.createElement('a');\n a.href = optimizedCover.href;\n path = a.pathname;\n if (!path.startsWith('/')) { // browsers are inconsistent about whether the pathname includes a leading slash, but the cachefly api requires exactly one on the url param\n path = \"/\".concat(path);\n }\n }\n var encodedSrcUrl = encodeURIComponent(path);\n var coverHrefWithoutSize = \"\".concat(optimizedImageHost, \"?\").concat(optimizations, \"&url=\").concat(encodedSrcUrl, \"&stripmeta=true\");\n optimizedCover.href = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize);\n optimizedCover.srcset = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 2), \" 2x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 1.5), \" 1.5x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize, \" 1x\");\n return optimizedCover;\n }\n }\n return _.find(coversBySize, function (cover) { return cover.width >= desiredSize; }) ||\n _.last(coversBySize); // finds the first cover that is big enough\n}\nexports.getOptimizedCovers = getOptimizedCovers;\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n","const _ = require('underscore');\n\n/**\n * Defines all the available input parameters for the media endpoint\n * @class MediaParameters\n * ref: https://thunder.api.test.overdrive.com/docs/ui/index#!/Media/V2Media_IndexMedia\n */\nmodule.exports = class MediaParameters {\n\n constructor() {\n this.query = '';\n this.mediaType = '';\n this.mediaTypes = '';\n this.title = '';\n this.series = '';\n this.publisherId = '';\n this.publisherEntityId = null;\n this.imprintId = '';\n this.identifier = '';\n this.creator = '';\n this.creatorId = null;\n this.addedDate = '';\n this.availableFirst = null;\n this.showOnlyAvailable = false;\n this.showOnlyPrerelease = false;\n this.showOnlyLuckyDayAvailable = false;\n this.hasAudioSynchronizedText = null;\n this.collectionId = 0;\n\n // All of the following arrays are string arrays\n this.format = [];\n this.subject = [];\n this.bisacCode = [];\n this.maturityLevel = [];\n this.language = [];\n this.atosLevel = [];\n this.lexileScore = [];\n this.interestLevel = [];\n this.gradeLevel = [];\n this.includedFacets = [];\n\n this.sortBy = 'relevance';\n this.show = 'owned';\n this.page = 1;\n this.perPage = 24;\n this.includeFacets = true;\n this.includeNoFormatTitles = false;\n this.filterCpcTitles = false;\n this.maxItems = 0;\n\n Object.assign(this, ...arguments);\n }\n\n applyRoomFiltersAndUserPrefs(roomFilters, userPreferences) {\n if (roomFilters) {\n // Note that the names don't match up so we can't just extend\n if (roomFilters.maturityLevels) {\n this.maturityLevel = roomFilters.maturityLevels;\n }\n if (roomFilters.subjects) {\n this.subject = roomFilters.subjects;\n }\n if (roomFilters.language) {\n this.language = roomFilters.language;\n }\n if (roomFilters.mediaType) {\n this.mediaType = roomFilters.mediaType;\n this.mediaTypes = roomFilters.mediaType;\n }\n }\n\n if (userPreferences) {\n // There may be more user prefs to apply besides audience-settings but this\n // was the immediate need. We can add more as they come up.\n if (userPreferences['audience-setting'] && this.maturityLevel.length === 0) {\n let audience = userPreferences['audience-setting'];\n let maturityLevels = [];\n _.each(_.keys(audience), function(key) {\n if (audience[key] && key !== 'all') {\n maturityLevels.push(key);\n }\n });\n if (maturityLevels.length > 0) {\n this.maturityLevel = maturityLevels;\n }\n }\n }\n }\n\n serialize() {\n let response = _.extend({}, this);\n\n // Remove all properties that do not have a value set\n Object.keys(response).forEach((key) => {\n !this._hasValue(response[key]) && delete response[key];\n });\n\n return response;\n }\n\n _hasValue(value) {\n return !((_(value).isObject() && _(value).isEmpty()) || !value) || value === false;\n }\n};\n","import MediaInterface from '../media/MediaInterface';\n\nimport GeneratedCollectionDetails from '../../../../business-objects/GeneratedCollectionDetails';\n\n// ref: Thunder.Models.ResponseModels.CollectionDefinition\nexport default class CollectionDefinition extends Backbone.Model {\n\n get idAttribute() { return 'id'; }\n\n get collectionOptions() {\n let options = {\n includeFacets: false,\n perPage: this.pageSize || 6,\n shuffle: this.shuffle || this.isLuckyDay\n };\n if (this.get('sortByAvailability') || this.get('availabilityOption') === 'available-first') {\n options.availableFirst = true;\n }\n if (this.get('showOnlyAvailable') || this.get('availabilityOption') === 'available-only') {\n options.showOnlyAvailable = true;\n }\n if (this.get('showOnlyPrerelease')) {\n options.showOnlyPrerelease = true;\n }\n if (this.useListOrder){\n options.sortBy = 'listorder';\n }\n\n return options;\n }\n\n defaults() {\n return {\n id : '0',\n name : '',\n description : '',\n availabilityOption : '',\n showOnlyAvailable : false,\n showOnlyPrerelease : false,\n sortByAvailability : false,\n curatedCollectionDetails : null,\n generatedCollectionDetails : null,\n lastModified : null,\n order : 0,\n\n // Computed property\n totalItems : 0\n };\n }\n\n get isLuckyDay(){\n return this.get('availabilityOption') === 'available-luckyday';\n }\n\n get isGenerated() {\n return !_(this.get('generatedCollectionDetails')).isEmpty();\n }\n\n get isCurated() {\n return !_(this.get('curatedCollectionDetails')).isEmpty();\n }\n\n get useListOrder(){\n return this.isCurated && this.get('curatedCollectionDetails').isOrdered;\n }\n\n /**\n * @prop {TitleCollection} collection\n * @memberof CollectionDefinition\n */\n constructor() {\n super(...arguments);\n\n this._mediaInterface = new MediaInterface();\n\n this.titleCollection = this._mediaInterface.items;\n\n this.listenTo(this.titleCollection, 'all', () => {\n this.set('totalItems', this.titleCollection.length);\n });\n }\n\n fetchCollectionTitles({ patronSettings, room}) {\n // Parse the current room's maturityLevels if there is a room, and a maturityLevels filter has been set\n let roomHasMaturityLevelFilter = !_.isEmpty(room && room.filters && room.filters.maturityLevels);\n\n let patronMaturityLevelPreferences = this._parsePatronAudienceSettings(patronSettings);\n\n if (this.isGenerated) {\n let genColDetails = this.get('generatedCollectionDetails');\n if (this.attributes.sortBy) {\n genColDetails.sortBy = this.attributes.sortBy;\n }\n if (!!this.get('showOnlyLuckyDayAvailable')){\n genColDetails.showOnlyLuckyDayAvailable = true;\n }\n let details = new GeneratedCollectionDetails(genColDetails);\n let params = details.serializeForSearch();\n\n if (!!patronSettings.showOnlyAvailable) {\n params.showOnlyAvailable = true;\n }\n\n // If we are in a room with maturity filters applied, the filters will be apart of the collection definition and we can simply query for the collection\n // User preferences should NOT override a room's maturity filter\n if (roomHasMaturityLevelFilter) {\n return this._mediaInterface.fetchCollectionByParameters(params, this.collectionOptions);\n }\n // Otherwise determine if the User's maturity filter settings cover the collection's maturityLevel settings\n else {\n let generatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!_(patronMaturityLevelPreferences).isEmpty() && _(params.maturityLevel).isEmpty()) {\n Object.assign(generatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n // Fake an empty response if all the auto generated collection's filters are not covered by the user's maturity level settings\n return this._patronFiltersPermitCollection(params.maturityLevel, patronMaturityLevelPreferences)\n ? this._mediaInterface.fetchCollectionByParameters(params, generatedCollectionOptions)\n : this._mediaInterface.fetchEmptyResponse();\n }\n }\n // else if \"isCurated\"\n else {\n let curatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!!patronSettings.showOnlyAvailable) {\n curatedCollectionOptions.showOnlyAvailable = true;\n }\n\n if (window.featureManager.isEnabled('sort-curated-list-carousels') && this.attributes.sortBy) {\n curatedCollectionOptions.sortBy = this.attributes.sortBy;\n }\n\n // If we are NOT in a room, apply a user's maturity settings if present to the collection request\n // The expectation is that if none of the content satisfies the user's filter its acceptable that no results are returned\n if (_(room).isEmpty()) {\n Object.assign(curatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n return this._mediaInterface.fetchCollectionById(this.id, curatedCollectionOptions);\n }\n }\n\n // Convert the patron audience settings model into an array of filter terms that MediaInterface understands, ex:\n // \"audience-setting\": {\n // \"all\" : false,\n // \"juvenile\" : false,\n // \"youngadult\" : true,\n // \"generalcontent\" : true,\n // \"adultonly\" : true\n // }\n // to: [\"youngadult\", \"generalcontent\", \"adultonly\"]\n /** @returns {string[]} */\n _parsePatronAudienceSettings(patronSettings) {\n let patronAudienceSetting = patronSettings && patronSettings['audience-setting'] || {};\n\n if (_(patronAudienceSetting).isEmpty() || patronAudienceSetting.all) {\n return [];\n }\n\n let audienceFilters = [];\n _(patronAudienceSetting).each((isApplied, key) => {\n if (isApplied && key !== \"all\") {\n audienceFilters.push(key);\n }\n });\n\n return audienceFilters;\n }\n\n _patronFiltersPermitCollection(collectionMaturityFilters = [], userMaturityFilters = []) {\n if (userMaturityFilters.length === 0) {\n return true;\n }\n\n const collectionLower = collectionMaturityFilters.map((filter) => filter.toLowerCase());\n const userLower = userMaturityFilters.map((filter) => filter.toLowerCase());\n\n return _(collectionLower).difference(userLower).length === 0;\n }\n}\n","import CollectionHighlightView from '../collection_highlight/views/CollectionHighlight';\nimport SlantedCollectionHighlight from '../collection_highlight_slanted/SlantedCollectionHightlight';\nconst {featureManager} = window;\n\nexport default class CollectionHighlightViewFactory\n{\n static Build(collectionDefinition, viewOptions, forceSlanted = false){\n if ((featureManager.isEnabled('LuckyDay') && collectionDefinition.isLuckyDay) || forceSlanted){\n return new SlantedCollectionHighlight(viewOptions);\n }\n else {\n return new CollectionHighlightView(viewOptions);\n }\n }\n}\n","import CollectionDefinition from './CollectionDefinition';\n\nexport default class CollectionManager extends Backbone.Collection {\n get model() { return CollectionDefinition; }\n}\n","import CollectionDefinition from './CollectionDefinition';\n\nexport default class PageManager extends Backbone.Model {\n\n get idAttribute() { return 'pageId'; }\n\n get isLoaded() {\n return !_.isEmpty(this.attributes);\n }\n\n // page == room, page has views, one of which is the home-page collections collection\n // ref: /v2/libraries/qa/pages\n fetchRoomById(roomId = 'home') {\n this.url = window.url(window.routes.rest.rooms.get, { roomId });\n\n return new Promise((resolve, reject) => {\n this.fetch({\n timeout: 10000,\n success: (model, response, options) => resolve(response),\n error: (model, response, options) => reject(response)\n });\n });\n }\n\n fetchCampaignById(campaignId) {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.campaigns.get, { campaignId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((jqHXR) => reject(jqHXR));\n });\n }\n\n fetchFirstDisplayableCampaign(roomId = 'home') {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.campaigns.getFirstDisplayable, { roomId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((jqHXR) => reject(jqHXR));\n });\n }\n\n fetchCollectionById(collectionId) {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.collections.getById, { id: collectionId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(new CollectionDefinition(response)))\n .fail((jqHXR, textStatus, errorThrown) => reject(jqHXR));\n });\n }\n\n getView(viewName) {\n if (!this.isLoaded) { return null; }\n\n return (viewName || '').toLowerCase() === 'home'\n ? _(this.attributes.views).findWhere({ isDefault: true })\n : _(this.attributes.views).findWhere({ name: viewName });\n }\n\n getCampaigns() {\n return this.isLoaded && this.attributes.campaigns;\n }\n}\n","export default ({ name, room, seeAllUrl }) => `\n
\n
\n
\n
\n \n

\n \n ${name}\n \n \n

\n \n ${html('seeAll')}\n \n \n
\n
    \n
    \n
    \n
    \n
    `;\n","import TitleCollectionView from '../../media/TitleCollectionView';\nimport CollectionHighlightTemplate from '../templates/collection_highlight.html';\n\nexport default class CollectionHighlight extends Backbone.View {\n template = CollectionHighlightTemplate;\n\n viewAttributes(collection) {\n let classes = [];\n\n if (this.isHero) {\n classes.push(`large-block-grid-${collection.length}`);\n } else {\n classes.push(`large-block-grid-6`);\n }\n\n if (collection.length <= 2) {\n classes.push(`small-block-grid-${collection.length}`);\n }\n\n if (collection.length >= 3) {\n classes.push(`small-block-grid-2 medium-block-grid-3`);\n }\n\n return {\n class: `titleContainer ${classes.join(' ')}`,\n };\n }\n\n constructor({ bus, room, isHero = false }) {\n super(...arguments);\n\n this.bus = bus;\n this.room = room;\n this.collection = this.model.titleCollection;\n this.isHero = isHero;\n\n this.render();\n }\n\n get seeAllUrl() {\n const collectionId = this.model.get('id');\n return window.url(window.routes.collectionById, { collectionId });\n }\n\n get desiredTitleCount() {\n return 6;\n }\n\n render() {\n let $view = $(\n this.template(\n _.extend({}, this.model.attributes, {\n room: this.room,\n seeAllUrl: this.seeAllUrl,\n })\n )\n );\n\n this.titleCollectionView && this.titleCollectionView.remove();\n\n this.titleCollectionView = new TitleCollectionView({\n el: $view.find('.titleContainer'),\n bus: this.bus,\n attributes: this.viewAttributes(this.collection),\n collection: this.collection,\n coverWidths: { mobile: 145, tablet: 160, desktop: 190 },\n isInHero: this.isHero,\n context: {\n collectionDefinition: this.model,\n room: this.room,\n },\n });\n\n // ref: LHTNG-1970 - hiding the last two elements so we can remove the overflow hidden on the parent container\n $view.find('.Item').each((i, el) => {\n if (i > 3) {\n $(el).addClass(`titles-item-overflow`);\n }\n });\n\n this.$el.empty().append($view);\n if (this.isHero) {\n this.makeHero();\n }\n\n return this;\n }\n\n makeHero() {\n if (!window.featureManager.isEnabled('geo-idc')) {\n this.isHero = true;\n this.$el.find('.collection-container').addClass('Hero');\n this.$el.find('.icon-forward-arrow').remove();\n let description = this.model.attributes.description;\n if (description) {\n this.$el\n .find('.collectionTitle')\n .after(\n `

    ${description}

    `\n );\n }\n }\n }\n\n remove() {\n this.titleCollectionView && this.titleCollectionView.remove();\n super.remove();\n }\n\n toggleTitleVisibility(isVisible) {\n let title = this.$el.find('.collectionTitle');\n isVisible\n ? title.removeClass('invisible')\n : title.addClass('invisible');\n }\n}\n","export default ({coverGridSizeClass, collectionTitle, collectionDescription, collectionId, coversHtml, bannerBackgroundColor, bannerTextColor, isHero, useFallbackDisplay, fallBackGridWidth}) => `\n
    \n
    \n
    \n
    \n

    ${collectionTitle}

    \n
    ${collectionDescription}
    \n ${window.text('seeAll')}\n
    \n
    \n
    \n
    \n
    \n ${useFallbackDisplay ?\n `
      \n ${coversHtml.map((html) => `
    • ${html}
    • `).join('')}\n
    ` :\n `
    \n ${coversHtml.map((coverHtml, index) => `\n
    \n ${coverHtml}\n
    `).join('')}\n
    `}\n
    \n
    \n
    \n
    \n ${window.text('seeAll')}\n
    \n`;\n\n","import SlantedGridTemplate from './SlantedCollectionHightlight.html';\nimport Cover from '../media/Cover';\nimport TitleName from '../media/views/TitleInfo/TitleName';\nimport ColorUtility from '../../../../lib/colorUtility';\nconst {OverDrive} = window;\n\n\nexport default class SlantedCollectionHighlight extends Backbone.View {\n\n template = SlantedGridTemplate;\n constructor({ bus, room, isHero = false, titleCountOverride = null }) {\n super(...arguments);\n\n this._views = [];\n this.bus = bus;\n this.room = room;\n this.isHero = isHero;\n this.highContrastMode = window.OverDrive.highContrast;\n this.titleCountOverride = titleCountOverride;\n\n this._vertToHorizBreakpointPx = 720;\n this._coverBlockWidthPercentLarge = 0.58;\n this._coverBlockWidthPercentageSmall = 1;\n\n this._smallGridMaxWidthPx = 555;\n this._mediumGridMaxWidthPx = 667;\n this._largeGridMaxWidthPx = 1280;\n this._coverPlaceholderHtml = '
    ';\n }\n\n render() {\n this.$el.empty();\n let colors = this.getTitlePanelColors();\n\n let sizeInfo = this.getGridSize();\n this.$el.empty().append(\n $(this.template({\n coverGridSizeClass: sizeInfo.class,\n collectionTitle: this.model.get('name'),\n collectionDescription: this.model.get('description'),\n collectionId: this.model.get('id'),\n coversHtml: this.getCoversHtml(),\n bannerBackgroundColor: colors.background,\n bannerTextColor: colors.foreground,\n isHero: this.isHero,\n useFallbackDisplay: this.useFallbackDisplay,\n fallBackGridWidth: sizeInfo.gridWidthFallback\n })));\n\n this.$el.find('.textBlockInner a').on('mouseover', (evt) => {\n evt.currentTarget.style.color = colors.foregroundHover;\n }).on('mouseout', (evt) => {\n evt.currentTarget.style.color = colors.foreground;\n });\n\n return this;\n }\n\n get desiredTitleCount(){\n if (this.titleCountOverride){\n return this.titleCountOverride;\n }\n\n let sizeInfo = this.getGridSize();\n return this.useFallbackDisplay ? sizeInfo.numCoversFallback : sizeInfo.numCovers;\n }\n\n get useFallbackDisplay(){\n return window.Modernizr && !window.Modernizr.cssgrid;\n }\n\n getGridSize(){\n\n const xlarge = {\n class: 'extraLarge',\n numCovers: 39,\n numCoversFallback: 47,\n numTilesFallback: 117,\n gridWidthFallback: 13,\n placeholderIndexes: [4,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,33,34,35,36,37,38,39,40,48,49,50,51,52,53,54,55,62,63,64,65,66,67,68,69,70,77,78,79,80,81,82,83,84,91,92,93,94,95,96,97,98,99,104,105,106,107,108,109,110,111,112]\n };\n\n const large = {\n class: 'large',\n numCovers: 25,\n numCoversFallback: 25,\n numTilesFallback: 54,\n gridWidthFallback: 9,\n placeholderIndexes: [0,4,5,6,7,8,14,15,16,17,18,25,26,27,28,35,36,37,38,39,44,45,46,47,48,49,52,53]\n };\n\n const medium = {\n class: 'medium',\n numCovers: 17,\n numCoversFallback: 21,\n numTilesFallback: 35,\n gridWidthFallback: 7,\n placeholderIndexes: [0,4,5,6,12,13,14,21,22,28,29,30,31]\n };\n\n const small = {\n class: 'small',\n numCovers: 12,\n numCoversFallback: 20,\n numTilesFallback: 20,\n gridWidthFallback: 5,\n placeholderIndexes: [0,10,15,16]\n };\n\n // take the max of the available width and height so we don't need to rerender when the device rotates\n let largeDimension = Math.max(window.screen.availWidth, window.screen.availHeight);\n let smallDimension = Math.min(window.screen.availWidth, window.screen.availHeight);\n\n let landscapeMaxGridWidth = (largeDimension < this._vertToHorizBreakpointPx)\n ? largeDimension * this._coverBlockWidthPercentageSmall\n : largeDimension * this._coverBlockWidthPercentLarge;\n\n let portraitMaxGridWidth = (smallDimension < this._vertToHorizBreakpointPx)\n ? smallDimension * this._coverBlockWidthPercentageSmall\n : smallDimension * this._coverBlockWidthPercentLarge;\n\n let maxCoverGridWidth = Math.max(landscapeMaxGridWidth, portraitMaxGridWidth);\n\n if (maxCoverGridWidth <= this._smallGridMaxWidthPx){\n return small;\n } else if (maxCoverGridWidth <= this._mediumGridMaxWidthPx){\n return medium;\n } else if (maxCoverGridWidth <= this._largeGridMaxWidthPx){\n return large;\n } else {\n return xlarge;\n }\n }\n\n getTitlePanelColors(){\n\n let backgroundColor;\n\n if (this.highContrastMode){\n backgroundColor = ColorUtility.highContrastBlue;\n } else {\n // choose a different cover for the source color when the title block is rendered above the cover grid.\n // The effect is nicer if the source cover is abuts the colored area that matches it.\n let colorSourceTitle = this.model.titleCollection.first();\n if (window.innerWidth < this._vertToHorizBreakpointPx && this.model.titleCollection.length > 2){\n colorSourceTitle = this.model.titleCollection.at(2);\n }\n\n let cover = colorSourceTitle.getCover(300);\n backgroundColor = '#a79d99';\n if (this.isHero && OverDrive.colors.primary){\n backgroundColor = OverDrive.colors.primary;\n }\n else if (!colorSourceTitle.isPlaceholder && cover && cover.primaryColor){\n backgroundColor = cover.primaryColor.hex;\n } else {\n backgroundColor = '#a79d99';\n }\n }\n\n let foregroundColor = ColorUtility.getTextColorFromHex(backgroundColor);\n\n return {\n background: backgroundColor,\n foreground: foregroundColor,\n foregroundHover: ColorUtility.shadeColorHex(backgroundColor, 0.2)\n };\n }\n\n // Render one cover for each available title and then repeat them to reach the\n // desired cover count\n getCoversHtml(){\n this.renderBaseCovers();\n let sizeInfo = this.getGridSize();\n\n let numRequired = !this.useFallbackDisplay ? sizeInfo.numCovers : sizeInfo.numTilesFallback;\n\n let results = [];\n while (results.length < numRequired){\n for (let i = 0; i < this._coverMarkup.length && (results.length < numRequired);){\n if (!this.useFallbackDisplay || !sizeInfo.placeholderIndexes.includes(results.length)){\n results.push(this._coverMarkup[i]);\n ++i;\n } else {\n // The fallback display mode uses placeholder covers to fill out the parts of the grid\n // that will be clipped off by the parent container.\n results.push(this._coverPlaceholderHtml);\n }\n }\n }\n return results;\n }\n\n renderBaseCovers() {\n this._views.forEach((view) => view.remove());\n this._views = [];\n this._coverMarkup = [];\n this.model.titleCollection.each((title) => {\n\n if (title.isPlaceholder){\n this._coverMarkup.push(this._coverPlaceholderHtml);\n }\n else {\n let cover = new Cover({\n model: title,\n coverWidths: {mobile: 200, tablet: 300, desktop: 400},\n isInHero: this.isHero\n });\n cover.render();\n\n // we add a hidden title name for screen readers\n let titleName = new TitleName({model: title});\n\n this._coverMarkup.push(`${cover.el.innerHTML}

    ${titleName.el.innerHTML}

    `);\n\n this._views.push(cover);\n this._views.push(titleName);\n }\n });\n }\n\n remove() {\n this._views.forEach((v) => v.remove());\n super.remove();\n }\n\n makeHero() {\n this.isHero = true;\n this.$el.find('.mainBox').addClass('hero');\n let colors = this.getTitlePanelColors();\n this.$el.find('.textBlockOuter').attr('style', `background-color:${colors.background};color:${colors.foreground}`);\n }\n\n toggleTitleVisibility(isVisible) {\n let title = this.$el.find('.textBlockInner');\n isVisible ? title.removeClass('invisible') : title.addClass('invisible');\n }\n}\n","import QueryString from 'querystring';\n\nexport default class HashManager {\n\n static parse() {\n let hashObject = QueryString.parse(location.hash.substr(1));\n\n _.keys(hashObject).forEach((key) => {\n hashObject[key] = _.flatten([hashObject[key] || []]);\n });\n\n return hashObject;\n }\n\n static update(object) {\n let newHash = QueryString.stringify(object);\n if (newHash !== '&'){\n location.hash = newHash;\n }\n }\n\n static get(key) {\n let response = this.parse();\n\n if (_.isString(key)) {\n return response[key];\n }\n\n return response;\n }\n\n static set(key, value) {\n let hash = this.parse();\n\n hash[key] = _.flatten([value]);\n\n this.update(hash);\n }\n\n static push(key, value) {\n let hash = this.parse();\n\n hash[key] = hash[key] || [];\n hash[key].push(value);\n\n this.update(hash);\n }\n\n static remove(key) {\n let hash = this.parse();\n\n hash[key] && delete hash[key];\n\n this.update(hash);\n }\n}\n","export default () => `\n
    \n
    \n
    \n
    \n
    \n ${window.text('error.errorContactSupport', {link: `${window.html('pleaseContactSupport')}`})}\n
    \n
    \n
    \n
    \n
    \n`;\n","const { Logger, html } = window;\nconst { isAuthenticated, hasLinkedCards } = window.OverDrive;\n\nimport '../../util/Promise';\nimport ErrorTemplate from '../../components/common/templates/Error.html';\n\nimport ProcessForwardedAction from '../../util/title-actions/processForwardedAction';\nimport HashManager from '../../components/common/HashManager';\nimport TitleCollection from '../media/models/TitleCollection';\n\nimport PageManager from '../collection_campaign_page/PageManager';\nimport CollectionManager from '../collection_campaign_page/CollectionManager';\nimport CollectionHighlightView from '../collection_highlight/views/CollectionHighlight';\nimport CollectionHighlightFactory from '../collection_campaign_page/CollectionHighlightFactory';\n\nimport PatronTitleStatus from '../../models/PatronTitleStatus';\n\nexport default class FeaturedCollectionView extends Backbone.View {\n constructor({ viewName, room, bus, featureManager, patronSettings }) {\n super(...arguments);\n\n this._views = [];\n this.viewName = _.unescape(viewName.replace(/'/g, \"'\"));\n this.room = room;\n this.bus = bus;\n this.featureManager = featureManager;\n this.patronSettings = patronSettings;\n this.pageSize = 10;\n\n this.pageManager = new PageManager();\n this.collectionManager = new CollectionManager();\n\n this.collectionErrors = [];\n\n this.update();\n }\n\n update() {\n this.$el.empty();\n\n this._views.forEach((view) => view.remove());\n this._views = [];\n\n this.pageManager\n .fetchRoomById((this.room && this.room.id) || 'home')\n .then(() => {\n this._views = this.initViews();\n this.unrenderedViews = this._views.slice();\n this._renderPage();\n this._performForwardedAction();\n });\n }\n\n _renderPage() {\n this._fetchRows(this.pageSize).then((collections) => {\n this._updatePatronTitleStatus(collections);\n this._pageLoadComplete();\n });\n }\n\n _fetchRows(rowCount, collectionsDone = []) {\n let views = this.unrenderedViews.splice(0, rowCount);\n this._paintCollections(views);\n\n return new Promise((resolve) => {\n this._syncRows(views, collectionsDone).then((result) => {\n if (result.failed) {\n this._fetchRows(result.failed, collectionsDone).then(\n (collections) => {\n resolve(collections);\n }\n );\n } else {\n resolve(collectionsDone);\n }\n });\n });\n }\n\n _syncRows(views, collections) {\n let requestQueue = views.map((view) => view.sync());\n\n return Promise.settle(requestQueue).then((results) => {\n const succeeded = results.filter(\n (result) => result.fulfilled && result.value\n );\n const failed = results.filter(\n (result) => !result.fulfilled || !result.value\n );\n\n succeeded.map((request) => collections.push(request.value));\n\n return { failed: failed.length };\n });\n }\n\n _paintCollections(views) {\n let frag = document.createDocumentFragment();\n\n views.forEach((view) => {\n if (!view.isPainted) {\n frag.appendChild(view.el);\n view.isPainted = true;\n }\n });\n\n this.el.appendChild(frag);\n }\n\n _pageLoadComplete() {\n if (this.unrenderedViews.length > 0) {\n let $loadMore = $(\n ``\n ).on('click', () => {\n this._renderPage();\n $loadMore.remove();\n });\n\n this.$el.append($loadMore);\n }\n\n if (this.collectionErrors.length > 0) {\n let allCollectionsFailed = this._views.length === 0;\n this._logPageErrors(this.collectionErrors, allCollectionsFailed);\n if (allCollectionsFailed) {\n this.$el.empty().append(ErrorTemplate());\n }\n this.collectionErrors = [];\n }\n }\n\n _logPageErrors(failed, allFailed) {\n const howMany = allFailed ? 'Total' : 'Partial';\n let errors = [];\n for (let failure of failed) {\n errors.push({\n id: failure.id,\n type: failure.type,\n statusText: failure.statusText,\n status: failure.status,\n });\n }\n let counts = _.countBy(\n errors,\n (error) => error.type + ':' + error.statusText\n );\n Logger.log('error', `${howMany} Featured Page Ajax Error`, {\n message: 'HighlightErrorRollup',\n errors: errors,\n counts: counts,\n page: this.viewName,\n });\n }\n\n initViews() {\n let views = [];\n let mainView = this.pageManager.getView(this.viewName);\n\n if (this._shouldTruncateCollections) {\n mainView.collectionDefinitions =\n mainView.collectionDefinitions.slice(0, 10);\n }\n\n this.collectionManager.reset(mainView.collectionDefinitions);\n\n this.collectionManager.each((collectionDefinition) => {\n // TitleCard template will render in \"dummy\" state\n collectionDefinition.titleCollection.reset([\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n ]);\n\n let collectionHighlightView = CollectionHighlightFactory.Build(\n collectionDefinition,\n {\n model: collectionDefinition,\n bus: this.bus,\n featureManager: this.featureManager,\n room: this.room,\n }\n );\n\n views.push(collectionHighlightView.render());\n\n collectionHighlightView.sync = () =>\n collectionDefinition\n .fetchCollectionTitles({\n patronSettings: this.patronSettings,\n room: this.room,\n })\n .then(\n () => {\n if (collectionDefinition.titleCollection.length) {\n collectionHighlightView.render();\n collectionHighlightView.toggleTitleVisibility(\n true\n );\n\n return collectionDefinition;\n } else {\n // Clean up the failed row\n collectionHighlightView.remove();\n this._views = this._views.filter(\n (v) => v !== collectionHighlightView\n );\n throw new Error(\n 'No collection contents retrieved'\n );\n }\n },\n (error) => {\n collectionHighlightView.remove();\n this._views = this._views.filter(\n (v) => v !== collectionHighlightView\n );\n\n error.id = collectionDefinition.id;\n error.statusText = !!error.statusText\n ? error.statusText\n : 'UnknownStatus';\n error.type = 'Ajax Error: Collection';\n\n this.collectionErrors.push(error);\n\n throw error;\n }\n );\n });\n\n return views;\n }\n\n _updatePatronTitleStatus(views) {\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards &&\n views &&\n views.length > 0\n ) {\n let titles = [];\n\n views.forEach((view) => {\n titles.push(...view.titleCollection.models);\n });\n\n let patronTitleStatus = new PatronTitleStatus();\n\n patronTitleStatus.fetchTitleStatus(titles).then(() => {\n patronTitleStatus.updateTitleCollectionState(_(titles));\n });\n }\n }\n\n _performForwardedAction() {\n if (isAuthenticated && hasLinkedCards && HashManager.get('action')) {\n let titles = [];\n this.collectionManager.each((collectionDefinition) => {\n titles.push(...collectionDefinition.titleCollection.models);\n });\n const forwardedAction = new ProcessForwardedAction(\n new TitleCollection(titles),\n this.bus\n );\n forwardedAction.executeAction();\n window.forwardedAction = forwardedAction;\n }\n }\n\n get _shouldTruncateCollections() {\n // The OD app on iOS 8 and 9 crashes on the featured collection page if there are too many collections. LHTNG-2387\n let inApp = Cookies.get('omcbrowse') !== undefined;\n if (inApp && bowser.ios && bowser.osversion) {\n let versionParts = bowser.osversion.split('.');\n if (versionParts && versionParts.length > 0) {\n let majorVersion = parseInt(versionParts[0], 10);\n if (majorVersion && majorVersion < 10) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","import ContextMenuTemplate from './templates/ContextMenu.html';\nconst { featureManager, url, routes, OverDrive, text, html } = window;\n\nexport default class ContextMenu extends Backbone.View {\n template = ContextMenuTemplate;\n\n constructor() {\n super(...arguments);\n\n this.rid = Math.random().toString(36).substring(7);\n\n this.listenTo(this.model, 'change:isInHistory', () => this.render());\n\n this.render();\n }\n\n events() {\n let events = {\n 'click .js-historyAction': '_handleClick',\n 'keydown .js-historyAction': '_handleKeyHistory',\n 'keydown .js-context-button': 'toggle',\n };\n\n if (featureManager.isEnabled('cleanupContextMenuToggle')) {\n events['keyup .js-context-drop'] = '_handleKeyUpContainer';\n }\n return events;\n }\n\n _handleKeyUpContainer(e) {\n if (e.keyCode === 27 /*ESC*/) {\n this.close();\n }\n }\n\n _handleClick() {\n this.model.trigger('title:action', {\n action: 'history',\n model: this.model,\n });\n }\n\n _handleKeyHistory(e) {\n if (!window.featureManager.isEnabled('cleanupContextMenuToggle')) {\n e.stopImmediatePropagation();\n }\n\n if (e.keyCode === 13 || e.keyCode === 32) {\n if (window.featureManager.isEnabled('cleanupContextMenuToggle')) {\n e.stopImmediatePropagation();\n }\n this.model.trigger('title:action', {\n action: 'history',\n model: this.model,\n });\n }\n }\n\n get viewModel() {\n let seriesSearchUrl = '';\n if (\n !(\n this.model.isMagazine &&\n featureManager.isEnabled('magazine-rollup')\n )\n ) {\n if (\n featureManager.isEnabled('enhancedSeries') &&\n this.model.get('detailedSeries')\n ) {\n seriesSearchUrl = url(routes.searchByType, {\n type: 'seriesId',\n query: this.model.get('detailedSeries').seriesId,\n sortBy: 'readingOrder',\n });\n } else if (this.model.get('series')) {\n seriesSearchUrl = url(routes.searchByType, {\n type: 'series',\n query: this.model.get('series'),\n sortBy: 'newlyadded',\n });\n }\n }\n\n let hasMediaDoFormat = false;\n this.model.get('formats').forEach((format) => {\n if (format.id === 'ebook-media-do') {\n hasMediaDoFormat = true;\n }\n });\n\n let maturityLevel = this.model.attributes.ratings.maturityLevel.id;\n\n const relatedTitlesPageUrl = `${window.url(\n window.routes.mediaRelatedId,\n {\n id: this.model.get('id'),\n }\n )}${maturityLevel ? `?maturityLevel=${maturityLevel}` : ''}`;\n\n return {\n isOwned: this.model.get('isOwned'),\n relatedTitlesPageUrl,\n id: this.model.id,\n rid: this.rid,\n title: this.model.get('title'),\n typeId: this.model.get('type').id,\n sampleHref: this.model.get('sample').href || '',\n sampleText: this._getSampleText(),\n alignment: 'bottom',\n historyActionLabel: this._getHistoryActionLabel(),\n historyActionText: this._getHistoryActionText(),\n historyEnabled:\n OverDrive.showHistoryFeature &&\n !this.model.get('isPreReleaseTitle'),\n gaHistoryAction: this.model.get('isInHistory')\n ? 'history-remove'\n : 'history-add',\n seriesSearchUrl,\n hasMediaDoFormat,\n };\n }\n\n _getSampleText() {\n const type = this.model.get('type').id;\n\n if (type === 'audiobook' || type === 'music') {\n return text('sampleListen');\n } else if (type === 'video') {\n return text('sampleWatch');\n }\n\n return text('sampleRead');\n }\n\n _getHistoryActionLabel() {\n const title = this.model.get('title');\n if (this.model.get('isInHistory')) {\n return html('readingHistory.removeTitle', { title });\n } else {\n return html('readingHistory.addTitle', { title });\n }\n }\n\n _getHistoryActionText() {\n if (this.model.get('isInHistory')) {\n return html('readingHistory.remove');\n } else {\n return html('readingHistory.add');\n }\n }\n\n render() {\n this.$el.empty().append(this.template(this.viewModel));\n\n return this;\n }\n\n isKeyboardSelectEvent = (e) =>\n (e.which === 13 || e.which === 32) && (e.preventDefault() || true);\n\n close() {\n window.Foundation.libs.dropdown.close(\n this.$el.find('.js-context-drop')\n );\n }\n\n toggle(e) {\n if (this.isKeyboardSelectEvent(e)) {\n window.Foundation.libs.dropdown.toggle(\n this.$el.find('.js-context-button')\n );\n }\n }\n}\n","import CoverTemplate from './templates/Cover.html';\nimport NoCoverTemplate from './templates/NoCover.html';\nimport { toStaticUrl } from '../../../../lib/assetMapper';\n\nexport default class Cover extends Backbone.View {\n constructor({ coverWidths, isInHero, isTitleHistory = false }) {\n super(...arguments);\n\n this.coverWidths = _.extend(\n { mobile: 145, tablet: 160, desktop: 190 },\n coverWidths\n );\n this.isInHero = isInHero;\n this.isTitleHistory = isTitleHistory;\n\n this.listenTo(this.model, 'change', this._render);\n this._render();\n }\n\n remove() {\n $(window).off(`resize.${this.model.id}`);\n }\n\n _render() {\n const media = this.model.toJSON();\n const coverWidth = bowser.mobile\n ? this.coverWidths.mobile\n : bowser.tablet\n ? this.coverWidths.tablet\n : this.coverWidths.desktop;\n const cover = this.model.getCover(coverWidth);\n\n if (this.model.isPlaceholder) {\n let $cover = `
    `;\n this.$el.empty().append($cover);\n } else if (cover && cover.href) {\n let $cover = $(\n CoverTemplate({\n media,\n coverColor:\n (cover &&\n cover.primaryColor &&\n cover.primaryColor.hex) ||\n 'inherit',\n src: cover && cover.href,\n href: this.model.titleDetailsUrl,\n label: window.text('cover.coverImageLabel', {\n title: media.title,\n creator: media.firstCreatorName,\n }),\n noSampleClass:\n media.sample.href == null ? 'is-noSample' : '',\n srcset: cover && cover.srcset,\n })\n );\n\n // LHTNG-2105: In the event that an image fails to load, wipe out the href's and update the model to trigger a render()\n $cover.find('img').on('error', () => {\n let imagesRemoved = JSON.parse(\n JSON.stringify(this.model.attributes.covers)\n );\n\n _(imagesRemoved).each((image) => {\n delete image.href;\n });\n\n this.model.set({ covers: imagesRemoved });\n });\n\n this.$el.empty().append($cover);\n } else if (this.isTitleHistory) {\n this.$el.empty().append(\n `\n \"${window.html('coverImageForTitle',\n `\n );\n } else {\n let creatorText = this.model.isMagazine\n ? this.model.get('edition')\n : this.model.get('firstCreatorName');\n this.$el.empty().append(\n NoCoverTemplate({\n media,\n href: this.model.titleDetailsUrl,\n isInHero: this.isInHero,\n coverWidth: coverWidth,\n coverHeight: (coverWidth * 293) / 220,\n creatorText: creatorText,\n })\n );\n $(window).on(\n `resize.${this.model.id}`,\n _.bind(\n this._manageOverflow,\n this,\n '.CoverImageContainer .noCoverAvailable .title',\n this.model.get('title')\n )\n );\n $(window).on(\n `resize.${this.model.id}`,\n _.bind(\n this._manageOverflow,\n this,\n '.CoverImageContainer .noCoverAvailable .author',\n creatorText\n )\n );\n $(window).on(\n `resize.${this.model.id}`,\n _.bind(this._resizeClearImage, this)\n );\n\n // timeout gives browser chance to draw and set innerHTML values used\n setTimeout(() => {\n this._manageOverflow(\n '.CoverImageContainer .noCoverAvailable .title',\n this.model.get('title')\n );\n this._manageOverflow(\n '.CoverImageContainer .noCoverAvailable .author',\n creatorText\n );\n this._resizeClearImage();\n }, 1);\n }\n\n return this;\n }\n\n _resizeClearImage() {\n const image = this.el.querySelector('img');\n if (image) {\n $(image).height(($(image).parent().width() * 293) / 220);\n }\n }\n _manageOverflow(selector, resetText) {\n const element = this.el.querySelector(selector);\n if (element) {\n element.innerHTML = resetText;\n if (selector.indexOf('.title') !== -1) {\n if ($(element).width() < 100) {\n $(element).css('font-size', '14px');\n } else if (\n $(element).width() < 125 &&\n $(element).width() >= 100\n ) {\n $(element).css('font-size', '16px');\n } else if (\n $(element).width() < 150 &&\n $(element).width() >= 125\n ) {\n $(element).css('font-size', '18px');\n } else if ($(element).width() >= 150) {\n $(element).css('font-size', '20px');\n }\n } else if (selector.indexOf('.author') !== -1) {\n if ($(element).width() < 110) {\n $(element).css('font-size', '10px');\n } else if (\n $(element).width() < 135 &&\n $(element).width() >= 110\n ) {\n $(element).css('font-size', '12px');\n } else if (\n $(element).width() < 160 &&\n $(element).width() >= 135\n ) {\n $(element).css('font-size', '14px');\n } else if ($(element).width() >= 160) {\n $(element).css('font-size', '16px');\n }\n }\n if (\n element.scrollHeight > 0 &&\n element.scrollHeight > element.clientHeight\n ) {\n let text = element.innerHTML;\n text = `${text.replace(/\\W+$/g, '')}...`; // remove trailing special characters and add ellipsis\n while (\n text !== '...' &&\n element.scrollHeight > element.clientHeight\n ) {\n text = text.replace(/\\W*\\w\\W*(\\.{3})$/g, '$1'); // remove a non-ellipsis character and unwanted characters around itΩ\n element.innerHTML = text;\n }\n // todo: put a min width an height on this! We know what the heights are for particular screen widths\n }\n }\n }\n}\n","import MediaParameters from '../../../../models/dao/MediaParameters';\nimport TitleCollection from './models/TitleCollection';\n\nexport default class MediaInterface {\n\n constructor() {\n _.extend(this, Backbone.Events);\n\n this.items = new TitleCollection();\n this.facets = {};\n this.sortOptions = [];\n }\n\n quickSearch(term, options) {\n return this._fetch(_.extend({}, { query: term }, options));\n }\n\n search(parameters, options) {\n return this._fetch(_.extend({}, parameters, options));\n }\n\n fetchCollectionById(id, options) {\n return this._fetch(_.extend({}, { collectionId: id }, options));\n }\n\n fetchCollectionByParameters(collectionFilters, options) {\n return this._fetch(_.extend({}, collectionFilters, options));\n }\n\n /** Utility function to simulate a data call, but deliberatley return an empty result set */\n fetchEmptyResponse() {\n this.trigger('sync:start', this, { mediaParameters: null });\n\n let emptyResponse = {\n items : [],\n facets : {},\n sortOptions : []\n };\n\n this._fetchDone(emptyResponse, 'synthetic');\n\n this.trigger('sync:end', this);\n\n return Promise.resolve(emptyResponse);\n }\n\n /**\n * @param {MediaParameters} parameters\n * @memberof MediaInterface\n */\n _fetch(parameters) {\n\n if (!parameters){\n parameters = {};\n }\n\n // if a title id is specificed then no facets will be calculated regardless of the params sent.\n if (!parameters.includedFacets && !parameters.titleId){\n parameters.includedFacets = window.OverDrive.supportedFacets;\n }\n\n if (window.featureManager.isEnabled('LuckyDay') && parameters.shuffle){\n const sorts = ['mostpopular', 'releasedate', 'title', 'author', 'newlyadded', 'lowcirculating', 'mostpopular-site'];\n parameters.sortBy = sorts[Math.floor(Math.random() * sorts.length)];\n }\n\n let mediaParameters = new MediaParameters(parameters);\n\n if (!!window.OverDrive.showOnlyAvailable) {\n mediaParameters.showOnlyAvailable = true;\n }\n\n this.trigger('sync:start', this, { mediaParameters });\n\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.media.index),\n method : 'POST',\n dataType: 'json',\n contentType: 'application/json; charset=utf-8',\n data : JSON.stringify(mediaParameters.serialize()),\n timeout: 10000\n })\n .done((data, textStatus, jqXHR) => {\n if (window.featureManager.isEnabled('LuckyDay') && parameters.shuffle){\n data.items = data.items && _.shuffle(data.items);\n }\n if (window.featureManager.isEnabled('only-show-owned-content') && data.items) {\n data.items = data.items.filter((x) => x.isOwned === true);\n }\n this._fetchDone(data, textStatus, jqXHR);\n this.trigger('sync:end', this);\n resolve(data);\n })\n .fail((jqXHR, textStatus, errorThrown) => {\n this._fetchFail(jqXHR, textStatus, errorThrown);\n this.trigger('sync:end', this);\n reject(jqXHR);\n });\n });\n }\n\n _fetchDone(data, textStatus, jqXHR) {\n this.items.reset(data.items);\n this.trigger('sync:success', this, { data, textStatus, jqXHR });\n }\n\n _fetchFail(jqXHR, textStatus, errorThrown) {\n this.trigger('sync:fail', this, { jqXHR, textStatus, errorThrown });\n }\n}\n","export default class TitleActionButton extends Backbone.View {\n constructor({ type = 'link', action, style }) {\n super(...arguments);\n\n this.type = type;\n\n this.hasCustomAction = false;\n if (!!action) {\n this.action = action;\n this.hasCustomAction = true;\n }\n\n this.style = style;\n\n this.$button = $('');\n\n this.listenTo(this.model, 'change:titleState', this.render);\n\n this.$el.empty().append(this.$button);\n this.render();\n }\n\n get isButton() {\n return this.type === 'button';\n }\n\n get isLink() {\n return this.type === 'link';\n }\n\n get state() {\n return this.model.get('titleState');\n }\n\n render() {\n this.$button.off();\n this.$el.off();\n\n const buttonProps = this.getButtonProps();\n const attributes = buttonProps.attributes;\n if (_(attributes.href).isEmpty()) {\n attributes.role = 'button';\n } else {\n attributes.role = 'link';\n }\n\n this.$button.attr(attributes);\n this.$button.html(buttonProps.html);\n\n // Attach event handlers if either is true\n // - Button is not a link\n // - Custom action has been provided\n if (attributes.role !== 'link' || this.hasCustomAction) {\n this._attachEventHandlers(this.$button);\n }\n\n return this;\n }\n\n waiting(isWaiting = true) {\n if (isWaiting) {\n this.$button\n .off('.titleActionButton')\n .addClass('waiting')\n .attr('disabled', isWaiting)\n .append('
    ');\n } else {\n this.$button\n .removeClass('waiting')\n .attr('disabled', isWaiting)\n .find('.spinner')\n .remove();\n\n this._attachEventHandlers(this.$button);\n }\n\n return this;\n }\n\n isSelectEvent = (e) =>\n (e.type === 'click' || e.which === 13 || e.which === 32) &&\n (e.preventDefault() || true);\n\n _attachEventHandlers($el) {\n $el.off('.titleActionButton');\n\n $el.on('click.titleActionButton', (e) => {\n this.isSelectEvent(e) && this.action(e);\n });\n $el.on('keydown.titleActionButton', (e) => {\n this.isSelectEvent(e) && this.action(e);\n });\n }\n\n action(event) {\n this.isSelectEvent(event) && this._triggerTitleAction();\n }\n\n _triggerTitleAction() {\n this.model.trigger('title:action', {\n action: this.state,\n model: this.model,\n });\n }\n\n _getBorrowButtonText() {\n if (window.featureManager.isEnabled('geo-idc')) {\n return this.model.attributes.type.id === 'audiobook'\n ? window.html('listen')\n : window.html('read');\n }\n return window.html('borrow');\n }\n\n _getBorrowButtonAriaLabel(title) {\n if (window.featureManager.isEnabled('geo-idc')) {\n return this.model.attributes.type.id === 'audiobook'\n ? window.html('listenToTitle', { title })\n : window.html('readTitle', { title });\n }\n return window.html('borrowTitle', { title });\n }\n\n getButtonProps() {\n let buttonAttrs = {\n 'data-media-id': this.model.id,\n 'data-type': this.model.attributes.type.id,\n 'data-type-name':\n (this.model.attributes.type.id &&\n window.html(this.model.attributes.type.id)) ||\n '',\n tabindex: 0,\n disabled: false,\n };\n let html = (this.$button.html && this.$button.html()) || '';\n\n let title = this.model.attributes.title;\n\n let classes = ['TitleActionButton', 'u-allCaps'];\n\n if (this.isButton) {\n classes.push(...['button', 'radius', 'is-button', 'secondary']);\n }\n\n if (this.style === 'fill') {\n classes.push('fill');\n }\n\n switch (this.state) {\n case 'unavailable':\n classes.push('is-unavailable js-unavailable disabled');\n if (window.featureManager.isEnabled('geo-idc')) {\n classes.push('visible-unavailable');\n }\n html = `${window.html('availabilityUnavailable')}`;\n break;\n case 'nook':\n classes.push('is-nook js-nook');\n html = `${window.html('sendToNook')}`;\n break;\n case 'preview':\n if (this.isLink) {\n classes.push('secondary-color');\n }\n\n classes.push('is-preview js-preview secondary');\n html = `${window.html('demoMode.preview')}`;\n buttonAttrs['aria-label'] = window.html(\n 'demoMode.previewTitle',\n { title }\n );\n break;\n case 'borrow':\n if (this.isLink) {\n classes.push('secondary-color');\n }\n\n classes.push('is-borrow js-borrow secondary');\n html = `${this._getBorrowButtonText()}`;\n buttonAttrs['aria-label'] =\n this._getBorrowButtonAriaLabel(title);\n break;\n case 'borrowed':\n if (window.featureManager.isEnabled('geo-idc')) {\n classes.push('is-openBook big');\n html = `${window.html('openBook')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: this.model.attributes.formats[0].id,\n mediaId: this.model.id,\n });\n buttonAttrs['aria-label'] = window.html('openBookLabel', {\n titleName: title,\n });\n buttonAttrs.target = '_blank';\n buttonAttrs.rel = 'noreferrer';\n } else {\n classes.push('is-borrowed js-borrowed');\n html = `${window.html('goToLoans')}`;\n buttonAttrs.href = window.url(window.routes.accountLoans);\n }\n break;\n case 'hold':\n if (this.isLink) {\n classes.push('secondary-color-hover');\n }\n\n classes.push('is-hold js-hold');\n html = `${window.html('placeAHold')}`;\n buttonAttrs['aria-label'] = window.html('placeAHoldOnTitle', {\n title,\n });\n break;\n case 'onHold':\n if (this.isButton) {\n classes.push('primary');\n }\n\n classes.push('is-onHold js-onHold');\n html = `${window.html('goToHolds')}`;\n buttonAttrs.href = window.url(window.routes.accountHolds);\n break;\n case 'renew':\n classes.push('is-renew renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'renewal.renewTitle',\n { title: '' }\n )}`;\n break;\n case 'requestAgain':\n classes.push('is-requestAgain renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'accountLoans.requestAgain'\n )}`;\n break;\n case 'requested':\n classes.push('is-requested renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'accountLoans.requested'\n )}`;\n break;\n case 'renewed':\n classes.push('is-renewed renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'accountLoans.renewed'\n )}`;\n break;\n case 'listenNow':\n classes.push('is-listenNow');\n html = `${window.html('listenNow')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: 'audiobook-overdrive',\n mediaId: this.model.id,\n });\n buttonAttrs.target = '_blank';\n buttonAttrs.rel = 'noreferrer';\n break;\n case 'readNow':\n classes.push('is-readNow');\n html = `${window.html('readNow')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: 'ebook-overdrive',\n mediaId: this.model.id,\n });\n buttonAttrs.target = '_blank';\n buttonAttrs.rel = 'noreferrer';\n break;\n case 'addToApp':\n if (this.isLink) {\n classes.push('secondary-color-hover');\n }\n\n classes.push('is-addToApp');\n html = `${window.html('addToApp')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: this.model.get('addToAppFormat'),\n mediaId: this.model.id,\n });\n break;\n case 'waiting':\n if (this.isLink) {\n let dotSpinner = $(window.primaryActionLoadingGif);\n dotSpinner.css('width', 'inherit');\n html = dotSpinner;\n break;\n }\n\n classes.push('waiting secondary');\n buttonAttrs.disabled = true;\n html = 'working
    ';\n break;\n }\n\n buttonAttrs.class = classes.join(' ');\n\n return { attributes: buttonAttrs, html };\n }\n}\n","import TitleCardTemplate from './templates/TitleCard.html';\n\nimport TitleInfo from './views/TitleInfo';\nimport TitleActionButton from './TitleActionButton';\nimport WishListButton from './WishListButton';\nimport TitleHeaderBar from './TitleHeaderBar';\nimport Cover from './Cover';\n\nexport default class TitleCard extends Backbone.View {\n get className() {\n return 'title-container title';\n }\n\n template = TitleCardTemplate;\n\n constructor({ coverWidths, isInHero = false }) {\n super(...arguments);\n this._views = [];\n\n this.coverWidths = coverWidths;\n this.isInHero = isInHero;\n\n this.render();\n }\n\n render() {\n const { model, coverWidths, isInHero } = this;\n\n this.$el.empty();\n\n this._views.forEach((view) => view.remove());\n this._views = [];\n\n const $tmp = $(\n this.template({\n geoIdcClass: window.featureManager.isEnabled('geo-idc')\n ? 'geoIdc'\n : '',\n })\n );\n\n // TODO: This will not work with CSS transition animations\n if (this.model.isPlaceholder) {\n this.$el.addClass('placeholder');\n }\n\n if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.titleHeaderBar = new TitleHeaderBar({\n model,\n el: $tmp.find('.TitleHeaderBar'),\n }))\n );\n }\n\n this._views.push(\n (this.cover = new Cover({\n model,\n el: $tmp.find('.CoverImage'),\n coverWidths,\n isInHero,\n }))\n );\n\n this._views.push(\n (this.titleInfo = new TitleInfo({\n model,\n el: $tmp.find('.TitleInfo'),\n }))\n );\n\n this._views.push(\n (this.titleActionButton = new TitleActionButton({\n model,\n el: $tmp.find('.TitleAction'),\n }))\n );\n\n if (\n !window.featureManager.isEnabled('sampleOnlyMode') &&\n !(\n window.featureManager.isEnabled('magazine-rollup') &&\n this.model.isMagazine\n ) &&\n !window.featureManager.isEnabled('disableWishlist')\n ) {\n this._views.push(\n (this.wishlistButton = new WishListButton({\n model,\n el: $tmp.find('.TitleWishlist'),\n type: 'icon-only',\n }).render())\n );\n }\n\n this.$el.append($tmp);\n\n return this;\n }\n\n remove() {\n this._views.forEach((view) => view.remove());\n super.remove();\n }\n}\n","import ProcessForwardedAction from '../../util/title-actions/processForwardedAction';\nimport HashManager from '../../components/common/HashManager';\n\nimport TitleCard from './TitleCard';\nimport TitleActions from '../../title-actions/TitleActions';\nconst he = require('he');\n// This assumes that the calling code passes a Backbone.Collection with a model type of Title\nexport default class TitleCollectionView extends Backbone.View {\n constructor({\n bus,\n patronMediaItemsModel,\n View,\n attributes,\n coverWidths,\n isInHero,\n context,\n }) {\n super(...arguments);\n\n this._views = [];\n\n this.bus = bus;\n this.View = View || TitleCard;\n this.attributes = _.extend({}, attributes);\n this.coverWidths = coverWidths;\n this.isInHero = isInHero;\n this.context = context;\n\n this.titleActions = new TitleActions({ bus: this.bus, context });\n\n this.listenTo(this.collection, 'title:action', this._handleTitleAction);\n\n // TODO: >>> Remove this call and _updateMediaStates() logic and update dependant consumers to use PatronTitleStatus\n // Fetch patron data and trigger state updates.\n // Only fetch patron data if authed and has linked cards.\n if (\n patronMediaItemsModel &&\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards\n ) {\n patronMediaItemsModel.initialFetch().then((patronData) => {\n this._updateMediaStates(patronData);\n });\n }\n\n this.render();\n }\n get tagName() {\n return 'ul';\n }\n\n _handleTitleAction({ action, model }) {\n this.titleActions.perform(action, model);\n }\n\n _updateMediaStates(patronData) {\n let ids = [];\n _(_.values(patronData)).each((item) => {\n if (_.isArray(item)) {\n ids.push(...item);\n } else if (_.isObject(item)) {\n ids.push(..._.keys(item).map(Number));\n } else {\n ids.push(item);\n }\n });\n ids = _.uniq(ids);\n\n ids.forEach((id) => {\n const model = this.collection.get(id);\n\n if (model) {\n model.updatePatronState(patronData);\n }\n });\n\n this._performForwardedAction();\n }\n\n render() {\n let frag = document.createDocumentFragment();\n\n this._views.forEach((view) => view.remove());\n this._views = [];\n\n this.collection.forEach((title) => {\n title.set('title', he.decode(title.get('title')));\n\n title.setContext(this.context);\n\n let view = new this.View({\n model: title,\n bus: this.bus,\n coverWidths: this.coverWidths,\n isInHero: this.isInHero,\n });\n\n frag.appendChild(\n $('
  • ', {\n class: 'js-titleCard Item',\n }).append(view.$el)[0]\n );\n\n this._views.push(view);\n });\n\n this.$el.attr(this.attributes);\n this.$el.empty().append(frag);\n }\n\n remove() {\n this._views.forEach((view) => view.remove());\n super.remove();\n }\n\n _performForwardedAction() {\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards &&\n HashManager.get('action')\n ) {\n const forwardedAction = new ProcessForwardedAction(\n this.collection,\n this.bus\n );\n forwardedAction.executeAction();\n window.forwardedAction = forwardedAction;\n }\n }\n}\n","const Backbone = window.Backbone;\n\nconst TitleHeaderBar = Backbone.View.extend({\n initialize() {\n this.listenTo(this.model, 'change', this.render);\n\n this.$titleHeaderBar = $('
    ');\n\n this.render();\n },\n\n render() {\n const a = this.returnState();\n\n this.$titleHeaderBar = $('
    ', a.container).append(\n $('', a.link)\n );\n this.$el.html(this.$titleHeaderBar);\n this.$el.attr('aria-hidden', 'true');\n\n return this;\n },\n\n returnState() {\n let banner = {\n container: {\n classes: ['title-header-bar', 'u-allCaps'],\n },\n link: {\n text: '',\n href: this.model.titleDetailsUrl,\n tabindex: -1,\n },\n };\n\n this.action = this.model.get('titleState');\n\n switch (this.action) {\n case 'unavailable':\n banner.container.classes.push(\n 'is-unavailable unavailable-title'\n );\n banner.link.text = window.html('availabilityUnavailable');\n break;\n case 'nook':\n banner.container.classes.push(\n 'is-nook available-title secondary-background'\n );\n banner.link.text = window.html('availabilityAvailable');\n break;\n case 'borrow':\n banner.container.classes.push(\n 'available-title secondary-background is-borrow'\n );\n banner.link.text = window.html('availabilityAvailable');\n break;\n case 'borrowed':\n case 'addToApp':\n case 'listenNow':\n case 'readNow':\n banner.container.classes.push(\n 'is-borrowed available-title secondary-background'\n );\n banner.link.text = window.html('borrowed');\n break;\n case 'hold':\n banner.container.classes.push('is-hold unavailable-title');\n banner.link.text = this.model.get('isPreReleaseTitle')\n ? window.html('availabilityComingSoon')\n : window.text('availabilityWaitList');\n break;\n case 'onHold':\n banner.container.classes.push('is-onHold unavailable-title');\n banner.link.text = window.html('onHold');\n break;\n case 'waiting':\n banner.container.classes = this.$titleHeaderBar\n .attr('class')\n .split(' ');\n banner.link.text = this.$titleHeaderBar.find('a:first').text();\n break;\n }\n\n banner.container.class = banner.container.classes.join(' ');\n\n return banner;\n },\n});\n\nexport default TitleHeaderBar;\n","import WishListButtonTemplate from './templates/WishListButton.html';\n\nexport default class WishListButton extends Backbone.View {\n get contrastClass() {\n return this.contrast === 'default' ? '' : 'contrast-alternate';\n }\n\n getAriaLabel(isRerender) {\n const title = this.model.attributes.title;\n if (isRerender) {\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? window.html('titleRemovedFromWishList', { title })\n : window.html('titleAddedToWishList', { title });\n } else {\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? window.html('addTitleToWishList', { title })\n : window.html('removeTitleFromWishList', { title });\n }\n }\n\n get iconClass() {\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? 'icon-wish-list'\n : 'icon-wish-list-added';\n }\n\n get text() {\n if (this.type === 'icon-only') {\n return '';\n }\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? window.html('addToWishList')\n : window.html('removeFromWishList');\n }\n\n get ga() {\n const isAdd = this.model.get('wishlistState') === 'wishlistAdd';\n if (isAdd) {\n return {\n mediaId: this.model.attributes.id,\n formatType: this.model.attributes.type.id,\n };\n }\n return null;\n }\n\n constructor({ type, contrast }) {\n super(...arguments);\n this.type = type || 'icon-only';\n this.contrast = contrast || 'default';\n\n this.listenTo(this.model, 'change:wishlistState', this.render);\n this.type = type || 'icon-only';\n }\n\n events() {\n return { click: '_handleClick' };\n }\n\n render() {\n if (!this.el || this.$el.length < 1) {\n return; // we have no target to render anything into\n }\n\n // retain focus on rerender\n const isRerender =\n this.el.querySelector('.WishListButton') === document.activeElement;\n\n this.$el.empty();\n\n const buttonHtml = WishListButtonTemplate({\n ga: this.ga,\n contrastClass: this.contrastClass,\n ariaLabel: this.getAriaLabel(isRerender),\n iconClass: this.iconClass,\n text: this.text,\n iconAnimationClasses: window.OverDrive.isTolinoDevice\n ? ''\n : 'animated bounceIn',\n });\n\n this.$el.append(buttonHtml);\n\n if (isRerender) {\n this.el.querySelector('.WishListButton').focus();\n }\n\n return this;\n }\n\n _handleClick() {\n this.model.trigger('title:action', {\n action: 'wish',\n model: this.model,\n });\n if (!window.OverDrive.isTolinoDevice) {\n this._animate();\n }\n }\n\n _animate() {\n this.$el\n .find('i')\n .removeClass('animated bounceIn bounceOut')\n .addClass('animated bounceOut');\n }\n}\n","import TitleState from '../../../title-actions/TitleState';\nimport MediaInterface from '../MediaInterface';\nimport { toStaticUrl } from '../../../../../lib/assetMapper';\nimport { getOptimizedCovers } from '../../../../../lib/getOptimizedCover-ts';\n\nexport default class Title extends Backbone.Model {\n get idAttribute() {\n return 'id';\n }\n\n defaults() {\n return {\n id: 0,\n firstCreatorName: null,\n title: 'Title',\n firstCreatorId: 0,\n formats: [],\n isOwned: false,\n isHoldable: false,\n isPreReleaseTitle: false,\n isAvailable: false,\n starRating: 0.0,\n userStarRating: 0,\n starRatingCount: 0,\n holdsRatio: 0,\n holdsCount: 0,\n ownedCopies: 0,\n availableCopies: 0,\n luckyDayOwnedCopies: 0,\n luckyDayAvailableCopies: 0,\n estimatedReleaseDate: '',\n availabilityType: '',\n description: '',\n sample: {}, // Sample\n publisher: {}, // Publisher\n type: { id: 'ebook' }, // Type\n covers: {}, // Covers\n parentMagazineTitleId: 0,\n ratings: {\n maturityLevel: {},\n },\n // Custom Lightning Properties\n titleState: 'waiting',\n wishlistState: 'wishlistAdd',\n isInHistory: false,\n addToAppFormat: null,\n isOnHold: false,\n isReleasedHold: false,\n isBorrowed: false,\n isMostRecentMagazine: false,\n };\n }\n\n get isPlaceholder() {\n return this.get('placeholder');\n }\n\n setContext(context) {\n this.context = context;\n }\n\n constructor(model, options, context) {\n let { patronItems } = options || {};\n\n super(model, options);\n\n this.setContext(context);\n\n this.set(\n _.extend({}, model, { titleState: this._getState(patronItems) })\n );\n if (!this.isPlaceholder) {\n this.link(window.globalEvents);\n }\n }\n\n link(bus) {\n // Unlink the old bus if there is one\n if (this.bus) {\n this.stopListening(this.bus, 'title:update');\n this.bus = null;\n }\n\n // Attach new bus if passed\n if (bus) {\n this.bus = bus;\n this.listenTo(this.bus, 'title:update', (titleModel) => {\n this._applyUpdates(titleModel);\n });\n }\n\n return this;\n }\n\n _applyUpdates(titleModel) {\n if (titleModel !== this && titleModel.id === this.id) {\n super.set(titleModel.changedAttributes());\n }\n }\n\n set() {\n super.set(...arguments);\n this.bus && this.bus.trigger('title:update', this);\n }\n\n // An example of this can be seen in CollectionHightlight.js:61 (where TitleCollectionView gets new'ed up)\n get contextCollectionId() {\n return this.context && this.context.collectionDefinition\n ? this.context.collectionDefinition.id\n : undefined;\n }\n\n get titleDetailsUrl() {\n // LHTNG-3018 Reference optional contextCollectionId value when creating a title details link\n let props = { id: this.id };\n\n if (this.contextCollectionId) {\n props.cid = this.contextCollectionId;\n }\n\n return window.url(window.routes.mediaId, props);\n }\n\n get hasLuckyDayCopies() {\n return (\n window.featureManager.isEnabled('LuckyDay') &&\n this.get('luckyDayOwnedCopies') > 0\n );\n }\n\n get allCopiesAreLuckyDay() {\n return this.hasLuckyDayCopies && this.get('ownedCopies') === 0;\n }\n\n get isLuckyDayCheckout() {\n return (\n this.hasAvailableLuckyDayCopies &&\n this.get('availableCopies') === 0 &&\n !this.get('isReleasedHold')\n );\n }\n\n get canPlaceHold() {\n return (\n this.get('isHoldable') &&\n !this.get('isOnHold') &&\n window.featureManager.isEnabled('content-holds')\n );\n }\n\n get isAvailable() {\n return this.get('isAvailable') || this.hasAvailableLuckyDayCopies;\n }\n\n get hasAvailableLuckyDayCopies() {\n return (\n this.hasLuckyDayCopies && this.get('luckyDayAvailableCopies') > 0\n );\n }\n\n get isExpired() {\n return (\n this.get('isOwned') &&\n (this.isExpiredSuTitle || this.isExpiredNonSuTitle)\n );\n }\n\n get isExpiredSuTitle() {\n return (\n this.get('availabilityType') === 'always' &&\n !this.get('isPreReleaseTitle') &&\n !this.get('isAvailable')\n );\n }\n\n get isExpiredNonSuTitle() {\n return (\n this.get('availabilityType') !== 'always' &&\n !this.get('ownedCopies')\n );\n }\n\n updatePatronState(patronItems, options = {}) {\n this.set(\n {\n titleState: this._getState(patronItems),\n wishlistState: TitleState.isOnWishlist(\n this.attributes,\n patronItems\n )\n ? 'wishlistRemove'\n : 'wishlistAdd',\n userStarRating: TitleState.starRating(\n this.attributes,\n patronItems\n ), // 0 if not rated\n },\n options\n );\n const readingHistoryState = TitleState.isOnReadingHistory(\n this.attributes,\n patronItems\n );\n this.set('isInHistory', readingHistoryState, options || {});\n\n const userStarRating = TitleState.starRating(\n this.attributes,\n patronItems\n );\n this.set('userStarRating', userStarRating, options || {}); // 0 if not rated\n }\n\n getCover(desiredSize) {\n const covers = _.map(this.get('covers'), (cover) => cover); // maps to collection of covers\n return getOptimizedCovers(covers, desiredSize);\n }\n\n getCoverSrc(desiredSize) {\n const cover = this.getCover(desiredSize);\n return (cover && cover.href) || toStaticUrl('img/no-cover_en_US.jpg');\n }\n\n getCurrentAvailability() {\n return $.ajax({\n url: window.url(window.routes.mediaAvailabilityId, { id: this.id }),\n type: 'GET',\n timeout: 0,\n });\n }\n\n getMissingAttribute(attribute) {\n if (!this._mediaInterface) {\n this._mediaInterface = new MediaInterface();\n }\n return this._mediaInterface\n .search({ titleId: this.get('id') })\n .then((response) => {\n this.set(attribute, response[attribute]);\n return Promise.resolve();\n });\n }\n\n availabilityText() {\n let action = this.get('titleState');\n let availabilityText = '';\n\n switch (action) {\n case 'unavailable':\n availabilityText = window.html('availabilityUnavailable');\n break;\n case 'nook':\n availabilityText = window.html('availabilityAvailable');\n break;\n case 'borrow' || 'preview':\n availabilityText = window.html('availabilityAvailable');\n break;\n case 'borrowed':\n case 'addToApp':\n case 'listenNow':\n case 'readNow':\n availabilityText = window.html('borrowed');\n break;\n case 'hold':\n if (this.get('isPreReleaseTitle')) {\n availabilityText = window.html('availabilityComingSoon');\n break;\n }\n\n availabilityText = this.get('isPreReleaseTitle')\n ? window.html('availabilityComingSoon')\n : window.html('availabilityWaitList');\n break;\n case 'onHold':\n availabilityText = window.html('onHold');\n break;\n case 'waiting':\n availabilityText = window.html('loading');\n break;\n }\n\n return availabilityText;\n }\n\n _getState(patronItems) {\n this.setPatronState(patronItems);\n return TitleState.getState(this.attributes, patronItems);\n }\n\n setPatronState(patronItems) {\n this.set({\n isOnHold: patronItems && patronItems.onHolds.indexOf(this.id) > -1,\n });\n this.set({\n isBorrowed:\n patronItems && patronItems.onCheckouts.indexOf(this.id) > -1,\n });\n }\n\n sanitizedDesc() {\n let desc = this.get('description').replace(\n /()|(\\r?\\n|\\r)/gim,\n ' '\n );\n return $(`
    ${desc}
    `).text();\n }\n\n getTitleAsync(mediaId, resolve, reject) {\n $.ajax({\n url: window.url(window.routes.mediaInfoId, { id: mediaId }),\n type: 'GET',\n timeout: 10000,\n success: (data) => {\n this.set(data);\n this.set('titleState', this._getState(null));\n resolve();\n },\n fail: (err) => {\n reject(err);\n },\n });\n }\n\n get isMagazine() {\n return this.get('type').id === 'magazine';\n }\n}\n","\nimport Title from './Title';\n\nexport default class TitleCollection extends Backbone.Collection {\n get model() { return Title; }\n}\n\n","const { featureManager, html, url, routes } = window;\n\nexport default ({\n isOwned,\n relatedTitlesPageUrl,\n id,\n rid,\n typeId,\n title,\n alignment,\n sampleHref,\n sampleText,\n historyActionLabel,\n historyActionText,\n historyEnabled,\n gaHistoryAction,\n seriesSearchUrl,\n hasMediaDoFormat,\n}) => `\n
    `;\n","export default ({ media, src, href, coverColor, noSampleClass, srcset }) => `\n
    \n \n \n \n
    `;\n","import { toStaticUrl } from '../../../../../lib/assetMapper';\n\nexport default ({ media, href, isInHero, coverWidth, coverHeight, creatorText }) => `\n\n\n`;\n","export default ({ text, href, label }) => `\n${text}\n`;\n","export default ({ geoIdcClass }) => `\n
    \n
    \n\n
    \n\n
    \n
    \n\n
    \n\n
    \n
    \n\n
    \n
    `;\n","export default ({typeId}) => `\n${typeId ? `\n ${window.html(typeId)}\n` : '' }\n`;\n","export default ({ titleId, title, href, ariaLabel }) => `

    \n \n ${ title }\n \n

    `;\n","export default ({ga, contrastClass, ariaLabel, iconClass, text, iconAnimationClasses}) => `\n`;\n","import ContextMenu from '../ContextMenu';\nimport TitleAuthor from './TitleInfo/TitleAuthor';\nimport TitleEdition from './TitleInfo/TitleEdition';\nimport TitleName from './TitleInfo/TitleName';\nimport TitleFormatBadge from './TitleInfo/TitleFormatBadge';\n\nexport default class TitleInfo extends Backbone.View {\n get className() {\n return 'title-info';\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n\n this.render();\n }\n\n _reset() {\n this._views.forEach((view) => view.remove());\n this._views = [];\n }\n\n remove() {\n this._reset();\n super.remove();\n }\n\n render() {\n this._reset();\n\n this._views.push(\n (this.titleName = new TitleName({ model: this.model }))\n );\n\n if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.contextMenu = new ContextMenu({ model: this.model }))\n );\n this.contextMenu.$el.addClass('text-right');\n }\n if (this.model.isMagazine) {\n this._views.push(\n (this.titleEdition = new TitleEdition({ model: this.model }))\n );\n } else if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.titleAuthor = new TitleAuthor({ model: this.model }))\n );\n }\n\n this._views.push(\n (this.titleFormatBadge = new TitleFormatBadge({\n typeId: this.model.get('type').id,\n }))\n );\n\n this.$el.empty();\n this.$el.append(...this._views.map((view) => view.$el));\n }\n}\n","const Backbone = window.Backbone;\nconst featureManager = window.featureManager;\n\nimport TitleAuthorTemplate from '../../templates/TitleAuthor.html';\n\nconst TitleAuthor = Backbone.View.extend({\n template: TitleAuthorTemplate,\n\n className: 'title-author',\n\n tagName: 'p',\n\n initialize() {\n if (this.model.get('type').id !== 'periodicals') {\n this.render();\n }\n },\n\n render() {\n let title = this.model.toJSON();\n\n if (\n title.firstCreatorName != null &&\n !_.isEmpty(title.firstCreatorName)\n ) {\n let creatorName = featureManager.isEnabled('fixHtmlTagsInCopy')\n ? title.firstCreatorName\n : _.escape(title.firstCreatorName);\n\n const viewData = {\n href: window.url(window.routes.searchByType, {\n type: 'creatorId',\n query: title.firstCreatorId,\n sortBy: 'newlyadded',\n }),\n label: window.text('cover.searchByAuthor', {\n author: creatorName,\n }),\n text: creatorName,\n };\n\n this.$el.html(\n window.text('byLine', { creator: this.template(viewData) })\n );\n } else {\n if (!featureManager.isEnabled('no-author-fix')) {\n this.$el.html(window.html('cover.noAuthorAvailable'));\n }\n }\n },\n});\n\nexport default TitleAuthor;\n","\nexport default class TitleEdition extends Backbone.View {\n constructor() {\n super(...arguments);\n this.render();\n }\n\n render() {\n let node = $(`
    ${this.model.get('edition')}
    `);\n this.setElement(node);\n }\n}\n","import TitleFormatBadgeTemplate from '../../templates/TitleFormatBadge.html';\n\nconst TitleFormatBadge = Backbone.View.extend({\n initialize({typeId}) {\n this.typeId = typeId;\n this.render();\n },\n\n render() {\n this.setElement($(TitleFormatBadgeTemplate({typeId: this.typeId})));\n }\n});\n\nexport default TitleFormatBadge;\n","import TitleNameTemplate from '../../templates/TitleName.html';\n\nexport default class TitleName extends Backbone.View {\n constructor() {\n super(...arguments);\n\n this.template = TitleNameTemplate;\n this.render();\n }\n\n _assembleLabel() {\n let labelParts = [];\n\n labelParts.push(this.model.get('title'));\n\n if (!!this.model.get('firstCreatorName')) {\n labelParts.push(window.html('byLine', {creator: this.model.isMagazine ? this.model.get('publisher').name : this.model.get('firstCreatorName')}));\n }\n\n labelParts.push(this.model.availabilityText());\n\n labelParts.push(this.model.get('type').name);\n\n return labelParts.join(' ');\n }\n\n render() {\n const viewData = {\n titleId : this.model.id,\n href : this.model.titleDetailsUrl,\n ariaLabel : _.escape(this._assembleLabel()),\n title : this.model.get('title')\n };\n \n this.setElement($(this.template(viewData)));\n }\n}\n\n","import Title from '../components/media/models/Title';\nimport TitleCollection from '../components/media/models/TitleCollection';\n\n// This is a replacement for PatronMediaItemsModel (ecmascript\\models\\patron_media_items.js)\n// We should gradually transition to using this as time permits and we can take the time to validate funtionality\nexport default class PatronTitleStatus extends Backbone.Model {\n get url() {\n return window.url(window.routes.mediaInfo);\n }\n\n fetchTitleStatus(titleCollection, statusTypes = null) {\n let titleArray = titleCollection.models || titleCollection || [];\n\n if (titleArray.length === 0) {\n return Promise.resolve();\n }\n\n let titleIds = _.map(_(titleArray).pluck('id'), Number);\n\n this.request = this.fetch({\n data: JSON.stringify({ titleIds, statusTypes }),\n type: 'POST',\n contentType: 'application/json',\n });\n\n return this.request;\n }\n\n /** @param {Title} title */\n updateTitleState(title) {\n title.updatePatronState(this.attributes);\n }\n\n get titleIds() {\n return _.union(\n this.get('onReadingHistory'),\n _.keys(this.get('starRatings')),\n this.get('onCheckouts'),\n this.get('onHolds'),\n this.get('onWishlist')\n );\n }\n\n /** @param {TitleCollection} titleCollection */\n updateTitleCollectionState(titleCollection) {\n // we provide an empty array for any status attributes that were not fetched\n // in order to avoid breaking anything downstream\n this.stubAttributes();\n this.titleIds.forEach((titleId) => {\n const model = titleCollection.findWhere({ id: titleId });\n\n if (model) {\n this.updateTitleState(model);\n }\n });\n }\n\n stubAttributes() {\n if (!this.get('onReadingHistory')) {\n this.set('onReadingHistory', []);\n }\n if (!this.get('starRatings')) {\n this.set('starRatings', []);\n }\n if (!this.get('onCheckouts')) {\n this.set('onCheckouts', []);\n }\n if (!this.get('onHolds')) {\n this.set('onHolds', []);\n }\n if (!this.get('onWishlist')) {\n this.set('onWishlist', []);\n }\n }\n}\n","import FeaturedCollectionView from '../components/featured_collections/FeaturedCollectionView';\n\nwindow.featuredCollectionView = new FeaturedCollectionView ({\n el : '.Carousels',\n viewName : window.viewName,\n bus : window.globalEvents,\n room : window.OverDrive.currentRoom,\n patronSettings : window.patronSettings\n});\n","export default class TitleActions {\n constructor({ bus, context }) {\n this.bus = bus;\n\n this.context = {\n room: undefined,\n collectionDefinition: undefined,\n };\n\n _.extend(this.context, context);\n }\n\n perform(action, titleModel) {\n if (typeof this[`_${action}`] === 'function') {\n this[`_${action}`](titleModel);\n }\n }\n\n _borrow(titleModel) {\n this.bus.trigger('title:borrow', titleModel, this.context);\n }\n\n _hold(titleModel) {\n this.bus.trigger('title:hold', titleModel, this.context);\n }\n\n _wish(titleModel) {\n this.bus.trigger('title:wishlist', titleModel, this.context);\n }\n\n _nook(titleModel) {\n this.bus.trigger('title:nook', titleModel, this.context);\n }\n\n _rating(titleModel) {\n this.bus.trigger('title:rating', titleModel, this.context);\n }\n\n _history(titleModel) {\n this.bus.trigger('title:history', titleModel, this.context);\n }\n\n _download(titleModel) {\n this.bus.trigger('title:download', titleModel, this.context);\n }\n\n _preview(titleModel) {\n this.bus.trigger('title:preview', titleModel, this.context);\n }\n\n _renew(titleModel) {\n this.bus.trigger('title:renew', titleModel, this.context);\n }\n\n _requestAgain(titleModel) {\n this.bus.trigger('title:requestAgain', titleModel, this.context);\n }\n\n setContextRoom(room) {\n if (_(room).isEmpty()) {\n delete this.context.room;\n } else {\n this.context.room = room;\n }\n\n return this;\n }\n\n setContextCollection(titleCollection) {\n if (_(titleCollection).isEmpty()) {\n delete this.context.titleCollection;\n } else {\n this.context.titleCollection = titleCollection;\n }\n\n return this;\n }\n}\n","class TitleState {\n static getState(media, patronItems) {\n const featureManager = window.featureManager;\n\n if (featureManager.isEnabled('sampleOnlyMode')) {\n return 'preview';\n }\n\n let mediaId = media.id;\n\n let isOnHold = patronItems && patronItems.onHolds.indexOf(mediaId) > -1;\n let isOnCheckouts =\n patronItems && patronItems.onCheckouts.indexOf(mediaId) > -1;\n let isAvailable =\n media.isAvailable ||\n (featureManager.isEnabled('LuckyDay') &&\n media.luckyDayAvailableCopies > 0);\n\n if (\n /account\\/loans/.test(window.location.href) &&\n media.isRenewable &&\n featureManager.isEnabled('content-holds')\n ) {\n if (isOnHold) {\n return 'requested';\n } else if (\n media.holdsCount <= 0 &&\n media.ownedCopies >= 0 &&\n !(\n featureManager.isEnabled('LuckyDay') &&\n media.isLuckyDayCheckout\n )\n ) {\n return 'renew';\n }\n return 'requestAgain';\n }\n\n if (isOnCheckouts) {\n return 'borrowed';\n }\n\n if (isOnHold && !isAvailable) {\n return 'onHold';\n }\n\n if (isAvailable) {\n if (media.type.id === 'periodicals') {\n return 'nook';\n }\n\n return 'borrow';\n }\n\n if (media.isHoldable && featureManager.isEnabled('content-holds')) {\n return 'hold';\n }\n\n return 'unavailable';\n }\n\n static isOnWishlist(media, patronItems) {\n return patronItems && patronItems.onWishlist.indexOf(media.id) > -1;\n }\n\n static isOnReadingHistory(media, patronItems) {\n return (\n patronItems && patronItems.onReadingHistory.indexOf(media.id) > -1\n );\n }\n\n static starRating(media, patronItems) {\n // Returns 0 if not rated\n return (\n (patronItems &&\n patronItems.starRatings &&\n patronItems.starRatings[media.id]) ||\n 0\n );\n }\n}\n\nexport default TitleState;\n","// ES6 version of settle\nPromise.settle = function(promises) {\n class PromiseInspection {\n constructor(fulfilled, value) {\n this.fulfilled = fulfilled;\n this.value = value;\n }\n }\n\n return Promise.all(promises.map((p) =>\n // make sure any values are wrapped in a promise\n Promise.resolve(p).then((val) => new PromiseInspection(true, val)).catch((err) => new PromiseInspection(false, err))));\n};\n\n// wrapping Promise notation around an ajax call\nPromise.ajax = function(options) {\n return new Promise((resolve, reject) =>\n $.ajax(options)\n .done((response) => resolve(response))\n .fail((xhr, status, err) => reject(err))\n );\n};\n","import HashManager from '../../components/common/HashManager';\nimport Title from '../../components/media/models/Title';\nimport TitleActions from '../../title-actions/TitleActions';\n\nexport default class ProcessForwardedAction {\n constructor(collection, bus, model) {\n let hash = HashManager.get('action')[0];\n this.actionArr = hash ? hash.split('~') : [];\n this.action = this.actionArr[0] || null;\n this.mediaId = this.actionArr[1] || null;\n this.rating = this.actionArr[2] || 0;\n this.model = model || null;\n this.collection = collection.models;\n this.bus = bus;\n }\n\n // Execute user forwarded action\n executeAction() {\n if (!this.action || !this.mediaId) {\n return;\n }\n\n if (\n !this.model ||\n (this.model && this.model.get('id') !== this.mediaId)\n ) {\n this.model = _.find(\n this.collection,\n (model) => model.id === this.mediaId\n );\n }\n\n let titleActions = new TitleActions({ bus: this.bus });\n\n if (this.model) {\n // Title model is on page\n HashManager.remove('action');\n this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, this.model);\n } else {\n // Title model is not on page, fetch async\n let title = new Title();\n let promise = new Promise((resolve, reject) => {\n title.getTitleAsync(this.mediaId, resolve, reject);\n });\n\n promise.then(() => {\n this.model && this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, title);\n HashManager.remove('action');\n });\n }\n }\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy55YXJuL2NhY2hlL2Jyb3dzZXItcGFjay1ucG0tNi4xLjAtNjc1NTdlMDExYi05ZTU5OTNkM2VlLnppcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvaGUtbnBtLTEuMi4wLTNiNzNhMmZmMDctM2Q0ZDZiYWJjYy56aXAvbm9kZV9tb2R1bGVzL2hlL2hlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCIuLi8uLi8ueWFybi9jYWNoZS91bmRlcnNjb3JlLW5wbS0xLjEzLjYtM2ViZTlkOTJmYi1kNWNlZGQxNGE5LnppcC9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLXVtZC5qcyIsImJ1c2luZXNzLW9iamVjdHMvR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMuanMiLCJsaWIvY29sb3JVdGlsaXR5LmpzIiwibGliL2dldE9wdGltaXplZENvdmVyLXRzLmpzIiwibW9kZWxzL2Rhby9NZWRpYVBhcmFtZXRlcnMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9Db2xsZWN0aW9uRGVmaW5pdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvY29sbGVjdGlvbl9jYW1wYWlnbl9wYWdlL0NvbGxlY3Rpb25IaWdobGlnaHRGYWN0b3J5LmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb2xsZWN0aW9uX2NhbXBhaWduX3BhZ2UvQ29sbGVjdGlvbk1hbmFnZXIuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9QYWdlTWFuYWdlci5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvY29sbGVjdGlvbl9oaWdobGlnaHQvdGVtcGxhdGVzL2NvbGxlY3Rpb25faGlnaGxpZ2h0Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25faGlnaGxpZ2h0L3ZpZXdzL0NvbGxlY3Rpb25IaWdobGlnaHQuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25faGlnaGxpZ2h0X3NsYW50ZWQvU2xhbnRlZENvbGxlY3Rpb25IaWdodGxpZ2h0Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25faGlnaGxpZ2h0X3NsYW50ZWQvU2xhbnRlZENvbGxlY3Rpb25IaWdodGxpZ2h0LmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb21tb24vSGFzaE1hbmFnZXIuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbW1vbi90ZW1wbGF0ZXMvRXJyb3IuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvZmVhdHVyZWRfY29sbGVjdGlvbnMvRmVhdHVyZWRDb2xsZWN0aW9uVmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvQ29udGV4dE1lbnUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL0NvdmVyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9NZWRpYUludGVyZmFjZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVBY3Rpb25CdXR0b24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQ2FyZC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVDb2xsZWN0aW9uVmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVIZWFkZXJCYXIuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1dpc2hMaXN0QnV0dG9uLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL21vZGVscy9UaXRsZUNvbGxlY3Rpb24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9Db250ZXh0TWVudS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL05vQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlQXV0aG9yLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZUNhcmQuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlRm9ybWF0QmFkZ2UuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlTmFtZS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvV2lzaExpc3RCdXR0b24uaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVBdXRob3IuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZUVkaXRpb24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZUZvcm1hdEJhZGdlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVOYW1lLmpzIiwicHVibGljL2VjbWFzY3JpcHQvbW9kZWxzL1BhdHJvblRpdGxlU3RhdHVzLmpzIiwicHVibGljL2VjbWFzY3JpcHQvcGFnZXMvZmVhdHVyZWRfY29sbGVjdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3RpdGxlLWFjdGlvbnMvVGl0bGVBY3Rpb25zLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdGl0bGUtYWN0aW9ucy9UaXRsZVN0YXRlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdXRpbC9Qcm9taXNlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdXRpbC90aXRsZS1hY3Rpb25zL3Byb2Nlc3NGb3J3YXJkZWRBY3Rpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN6VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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LEtBQUQ7QUFBQSwyQkFBVyxNQUFNLEVBQU4sS0FBYSxNQUFLLE9BQTdCO0FBQUEsaUJBRlMsQ0FBYjtBQUlIOztBQUVELGdCQUFJLGVBQWUsSUFBSSx5QkFBSixDQUFpQixFQUFFLEtBQUssS0FBSyxHQUFaLEVBQWpCLENBQW5COztBQUVBLGdCQUFJLEtBQUssS0FBVCxFQUFnQjtBQUNaO0FBQ0EseUNBQVksTUFBWixDQUFtQixRQUFuQjtBQUNBLHFCQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZ0JBQWYsRUFBaUMsS0FBSyxNQUF0QztBQUNBLDZCQUFhLE9BQWIsQ0FBcUIsS0FBSyxNQUExQixFQUFrQyxLQUFLLEtBQXZDO0FBQ0gsYUFMRCxNQUtPO0FBQ0g7QUFDQSxvQkFBSSxRQUFRLElBQUksa0JBQUosRUFBWjtBQUNBLG9CQUFJLFVBQVUsSUFBSSxPQUFKLENBQVksVUFBQyxPQUFELEVBQVUsTUFBVixFQUFxQjtBQUMzQywwQkFBTSxhQUFOLENBQW9CLE1BQUssT0FBekIsRUFBa0MsT0FBbEMsRUFBMkMsTUFBM0M7QUFDSCxpQkFGYSxDQUFkOztBQUlBLHdCQUFRLElBQVIsQ0FBYSxZQUFNO0FBQ2YsMEJBQUssS0FBTCxJQUFjLE1BQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxnQkFBZixFQUFpQyxNQUFLLE1BQXRDLENBQWQ7QUFDQSxpQ0FBYSxPQUFiLENBQXFCLE1BQUssTUFBMUIsRUFBa0MsS0FBbEM7QUFDQSw2Q0FBWSxNQUFaLENBQW1CLFFBQW5CO0FBQ0gsaUJBSkQ7QUFLSDtBQUNKOzs7Ozs7cUJBaERnQixzQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qISBodHRwczovL210aHMuYmUvaGUgdjEuMi4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAsIGZyb20gTm9kZS5qcyBvciBCcm93c2VyaWZpZWQgY29kZSxcblx0Ly8gYW5kIHVzZSBpdCBhcyBgcm9vdGAuXG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0Ly8gQWxsIGFzdHJhbCBzeW1ib2xzLlxuXHR2YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblx0Ly8gQWxsIEFTQ0lJIHN5bWJvbHMgKG5vdCBqdXN0IHByaW50YWJsZSBBU0NJSSkgZXhjZXB0IHRob3NlIGxpc3RlZCBpbiB0aGVcblx0Ly8gZmlyc3QgY29sdW1uIG9mIHRoZSBvdmVycmlkZXMgdGFibGUuXG5cdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3RhYmxlLWNoYXJyZWYtb3ZlcnJpZGVzXG5cdHZhciByZWdleEFzY2lpV2hpdGVsaXN0ID0gL1tcXHgwMS1cXHg3Rl0vZztcblx0Ly8gQWxsIEJNUCBzeW1ib2xzIHRoYXQgYXJlIG5vdCBBU0NJSSBuZXdsaW5lcywgcHJpbnRhYmxlIEFTQ0lJIHN5bWJvbHMsIG9yXG5cdC8vIGNvZGUgcG9pbnRzIGxpc3RlZCBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBvdmVycmlkZXMgdGFibGUgb25cblx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjdGFibGUtY2hhcnJlZi1vdmVycmlkZXMuXG5cdHZhciByZWdleEJtcFdoaXRlbGlzdCA9IC9bXFx4MDEtXFx0XFx4MEJcXGZcXHgwRS1cXHgxRlxceDdGXFx4ODFcXHg4RFxceDhGXFx4OTBcXHg5RFxceEEwLVxcdUZGRkZdL2c7XG5cblx0dmFyIHJlZ2V4RW5jb2RlTm9uQXNjaWkgPSAvPFxcdTIwRDJ8PVxcdTIwRTV8PlxcdTIwRDJ8XFx1MjA1RlxcdTIwMEF8XFx1MjE5RFxcdTAzMzh8XFx1MjIwMlxcdTAzMzh8XFx1MjIyMFxcdTIwRDJ8XFx1MjIyOVxcdUZFMDB8XFx1MjIyQVxcdUZFMDB8XFx1MjIzQ1xcdTIwRDJ8XFx1MjIzRFxcdTAzMzF8XFx1MjIzRVxcdTAzMzN8XFx1MjI0MlxcdTAzMzh8XFx1MjI0QlxcdTAzMzh8XFx1MjI0RFxcdTIwRDJ8XFx1MjI0RVxcdTAzMzh8XFx1MjI0RlxcdTAzMzh8XFx1MjI1MFxcdTAzMzh8XFx1MjI2MVxcdTIwRTV8XFx1MjI2NFxcdTIwRDJ8XFx1MjI2NVxcdTIwRDJ8XFx1MjI2NlxcdTAzMzh8XFx1MjI2N1xcdTAzMzh8XFx1MjI2OFxcdUZFMDB8XFx1MjI2OVxcdUZFMDB8XFx1MjI2QVxcdTAzMzh8XFx1MjI2QVxcdTIwRDJ8XFx1MjI2QlxcdTAzMzh8XFx1MjI2QlxcdTIwRDJ8XFx1MjI3RlxcdTAzMzh8XFx1MjI4MlxcdTIwRDJ8XFx1MjI4M1xcdTIwRDJ8XFx1MjI4QVxcdUZFMDB8XFx1MjI4QlxcdUZFMDB8XFx1MjI4RlxcdTAzMzh8XFx1MjI5MFxcdTAzMzh8XFx1MjI5M1xcdUZFMDB8XFx1MjI5NFxcdUZFMDB8XFx1MjJCNFxcdTIwRDJ8XFx1MjJCNVxcdTIwRDJ8XFx1MjJEOFxcdTAzMzh8XFx1MjJEOVxcdTAzMzh8XFx1MjJEQVxcdUZFMDB8XFx1MjJEQlxcdUZFMDB8XFx1MjJGNVxcdTAzMzh8XFx1MjJGOVxcdTAzMzh8XFx1MjkzM1xcdTAzMzh8XFx1MjlDRlxcdTAzMzh8XFx1MjlEMFxcdTAzMzh8XFx1MkE2RFxcdTAzMzh8XFx1MkE3MFxcdTAzMzh8XFx1MkE3RFxcdTAzMzh8XFx1MkE3RVxcdTAzMzh8XFx1MkFBMVxcdTAzMzh8XFx1MkFBMlxcdTAzMzh8XFx1MkFBQ1xcdUZFMDB8XFx1MkFBRFxcdUZFMDB8XFx1MkFBRlxcdTAzMzh8XFx1MkFCMFxcdTAzMzh8XFx1MkFDNVxcdTAzMzh8XFx1MkFDNlxcdTAzMzh8XFx1MkFDQlxcdUZFMDB8XFx1MkFDQ1xcdUZFMDB8XFx1MkFGRFxcdTIwRTV8W1xceEEwLVxcdTAxMTNcXHUwMTE2LVxcdTAxMjJcXHUwMTI0LVxcdTAxMkJcXHUwMTJFLVxcdTAxNERcXHUwMTUwLVxcdTAxN0VcXHUwMTkyXFx1MDFCNVxcdTAxRjVcXHUwMjM3XFx1MDJDNlxcdTAyQzdcXHUwMkQ4LVxcdTAyRERcXHUwMzExXFx1MDM5MS1cXHUwM0ExXFx1MDNBMy1cXHUwM0E5XFx1MDNCMS1cXHUwM0M5XFx1MDNEMVxcdTAzRDJcXHUwM0Q1XFx1MDNENlxcdTAzRENcXHUwM0REXFx1MDNGMFxcdTAzRjFcXHUwM0Y1XFx1MDNGNlxcdTA0MDEtXFx1MDQwQ1xcdTA0MEUtXFx1MDQ0RlxcdTA0NTEtXFx1MDQ1Q1xcdTA0NUVcXHUwNDVGXFx1MjAwMi1cXHUyMDA1XFx1MjAwNy1cXHUyMDEwXFx1MjAxMy1cXHUyMDE2XFx1MjAxOC1cXHUyMDFBXFx1MjAxQy1cXHUyMDFFXFx1MjAyMC1cXHUyMDIyXFx1MjAyNVxcdTIwMjZcXHUyMDMwLVxcdTIwMzVcXHUyMDM5XFx1MjAzQVxcdTIwM0VcXHUyMDQxXFx1MjA0M1xcdTIwNDRcXHUyMDRGXFx1MjA1N1xcdTIwNUYtXFx1MjA2M1xcdTIwQUNcXHUyMERCXFx1MjBEQ1xcdTIxMDJcXHUyMTA1XFx1MjEwQS1cXHUyMTEzXFx1MjExNS1cXHUyMTFFXFx1MjEyMlxcdTIxMjRcXHUyMTI3LVxcdTIxMjlcXHUyMTJDXFx1MjEyRFxcdTIxMkYtXFx1MjEzMVxcdTIxMzMtXFx1MjEzOFxcdTIxNDUtXFx1MjE0OFxcdTIxNTMtXFx1MjE1RVxcdTIxOTAtXFx1MjE5QlxcdTIxOUQtXFx1MjFBN1xcdTIxQTktXFx1MjFBRVxcdTIxQjAtXFx1MjFCM1xcdTIxQjUtXFx1MjFCN1xcdTIxQkEtXFx1MjFEQlxcdTIxRERcXHUyMUU0XFx1MjFFNVxcdTIxRjVcXHUyMUZELVxcdTIyMDVcXHUyMjA3LVxcdTIyMDlcXHUyMjBCXFx1MjIwQ1xcdTIyMEYtXFx1MjIxNFxcdTIyMTYtXFx1MjIxOFxcdTIyMUFcXHUyMjFELVxcdTIyMzhcXHUyMjNBLVxcdTIyNTdcXHUyMjU5XFx1MjI1QVxcdTIyNUNcXHUyMjVGLVxcdTIyNjJcXHUyMjY0LVxcdTIyOEJcXHUyMjhELVxcdTIyOUJcXHUyMjlELVxcdTIyQTVcXHUyMkE3LVxcdTIyQjBcXHUyMkIyLVxcdTIyQkJcXHUyMkJELVxcdTIyREJcXHUyMkRFLVxcdTIyRTNcXHUyMkU2LVxcdTIyRjdcXHUyMkY5LVxcdTIyRkVcXHUyMzA1XFx1MjMwNlxcdTIzMDgtXFx1MjMxMFxcdTIzMTJcXHUyMzEzXFx1MjMxNVxcdTIzMTZcXHUyMzFDLVxcdTIzMUZcXHUyMzIyXFx1MjMyM1xcdTIzMkRcXHUyMzJFXFx1MjMzNlxcdTIzM0RcXHUyMzNGXFx1MjM3Q1xcdTIzQjBcXHUyM0IxXFx1MjNCNC1cXHUyM0I2XFx1MjNEQy1cXHUyM0RGXFx1MjNFMlxcdTIzRTdcXHUyNDIzXFx1MjRDOFxcdTI1MDBcXHUyNTAyXFx1MjUwQ1xcdTI1MTBcXHUyNTE0XFx1MjUxOFxcdTI1MUNcXHUyNTI0XFx1MjUyQ1xcdTI1MzRcXHUyNTNDXFx1MjU1MC1cXHUyNTZDXFx1MjU4MFxcdTI1ODRcXHUyNTg4XFx1MjU5MS1cXHUyNTkzXFx1MjVBMVxcdTI1QUFcXHUyNUFCXFx1MjVBRFxcdTI1QUVcXHUyNUIxXFx1MjVCMy1cXHUyNUI1XFx1MjVCOFxcdTI1QjlcXHUyNUJELVxcdTI1QkZcXHUyNUMyXFx1MjVDM1xcdTI1Q0FcXHUyNUNCXFx1MjVFQ1xcdTI1RUZcXHUyNUY4LVxcdTI1RkNcXHUyNjA1XFx1MjYwNlxcdTI2MEVcXHUyNjQwXFx1MjY0MlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjZBXFx1MjY2RC1cXHUyNjZGXFx1MjcxM1xcdTI3MTdcXHUyNzIwXFx1MjczNlxcdTI3NThcXHUyNzcyXFx1Mjc3M1xcdTI3QzhcXHUyN0M5XFx1MjdFNi1cXHUyN0VEXFx1MjdGNS1cXHUyN0ZBXFx1MjdGQ1xcdTI3RkZcXHUyOTAyLVxcdTI5MDVcXHUyOTBDLVxcdTI5MTNcXHUyOTE2XFx1MjkxOS1cXHUyOTIwXFx1MjkyMy1cXHUyOTJBXFx1MjkzM1xcdTI5MzUtXFx1MjkzOVxcdTI5M0NcXHUyOTNEXFx1Mjk0NVxcdTI5NDgtXFx1Mjk0QlxcdTI5NEUtXFx1Mjk3NlxcdTI5NzhcXHUyOTc5XFx1Mjk3Qi1cXHUyOTdGXFx1Mjk4NVxcdTI5ODZcXHUyOThCLVxcdTI5OTZcXHUyOTlBXFx1Mjk5Q1xcdTI5OURcXHUyOUE0LVxcdTI5QjdcXHUyOUI5XFx1MjlCQlxcdTI5QkNcXHUyOUJFLVxcdTI5QzVcXHUyOUM5XFx1MjlDRC1cXHUyOUQwXFx1MjlEQy1cXHUyOURFXFx1MjlFMy1cXHUyOUU1XFx1MjlFQlxcdTI5RjRcXHUyOUY2XFx1MkEwMC1cXHUyQTAyXFx1MkEwNFxcdTJBMDZcXHUyQTBDXFx1MkEwRFxcdTJBMTAtXFx1MkExN1xcdTJBMjItXFx1MkEyN1xcdTJBMjlcXHUyQTJBXFx1MkEyRC1cXHUyQTMxXFx1MkEzMy1cXHUyQTNDXFx1MkEzRlxcdTJBNDBcXHUyQTQyLVxcdTJBNERcXHUyQTUwXFx1MkE1My1cXHUyQTU4XFx1MkE1QS1cXHUyQTVEXFx1MkE1RlxcdTJBNjZcXHUyQTZBXFx1MkE2RC1cXHUyQTc1XFx1MkE3Ny1cXHUyQTlBXFx1MkE5RC1cXHUyQUEyXFx1MkFBNC1cXHUyQUIwXFx1MkFCMy1cXHUyQUM4XFx1MkFDQlxcdTJBQ0NcXHUyQUNGLVxcdTJBREJcXHUyQUU0XFx1MkFFNi1cXHUyQUU5XFx1MkFFQi1cXHUyQUYzXFx1MkFGRFxcdUZCMDAtXFx1RkIwNF18XFx1RDgzNVtcXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1REQwNFxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERDZCXS9nO1xuXHR2YXIgZW5jb2RlTWFwID0geydcXHhBRCc6J3NoeScsJ1xcdTIwMEMnOid6d25qJywnXFx1MjAwRCc6J3p3aicsJ1xcdTIwMEUnOidscm0nLCdcXHUyMDYzJzonaWMnLCdcXHUyMDYyJzonaXQnLCdcXHUyMDYxJzonYWYnLCdcXHUyMDBGJzoncmxtJywnXFx1MjAwQic6J1plcm9XaWR0aFNwYWNlJywnXFx1MjA2MCc6J05vQnJlYWsnLCdcXHUwMzExJzonRG93bkJyZXZlJywnXFx1MjBEQic6J3Rkb3QnLCdcXHUyMERDJzonRG90RG90JywnXFx0JzonVGFiJywnXFxuJzonTmV3TGluZScsJ1xcdTIwMDgnOidwdW5jc3AnLCdcXHUyMDVGJzonTWVkaXVtU3BhY2UnLCdcXHUyMDA5JzondGhpbnNwJywnXFx1MjAwQSc6J2hhaXJzcCcsJ1xcdTIwMDQnOidlbXNwMTMnLCdcXHUyMDAyJzonZW5zcCcsJ1xcdTIwMDUnOidlbXNwMTQnLCdcXHUyMDAzJzonZW1zcCcsJ1xcdTIwMDcnOidudW1zcCcsJ1xceEEwJzonbmJzcCcsJ1xcdTIwNUZcXHUyMDBBJzonVGhpY2tTcGFjZScsJ1xcdTIwM0UnOidvbGluZScsJ18nOidsb3diYXInLCdcXHUyMDEwJzonZGFzaCcsJ1xcdTIwMTMnOiduZGFzaCcsJ1xcdTIwMTQnOidtZGFzaCcsJ1xcdTIwMTUnOidob3JiYXInLCcsJzonY29tbWEnLCc7Jzonc2VtaScsJ1xcdTIwNEYnOidic2VtaScsJzonOidjb2xvbicsJ1xcdTJBNzQnOidDb2xvbmUnLCchJzonZXhjbCcsJ1xceEExJzonaWV4Y2wnLCc/JzoncXVlc3QnLCdcXHhCRic6J2lxdWVzdCcsJy4nOidwZXJpb2QnLCdcXHUyMDI1JzonbmxkcicsJ1xcdTIwMjYnOidtbGRyJywnXFx4QjcnOidtaWRkb3QnLCdcXCcnOidhcG9zJywnXFx1MjAxOCc6J2xzcXVvJywnXFx1MjAxOSc6J3JzcXVvJywnXFx1MjAxQSc6J3NicXVvJywnXFx1MjAzOSc6J2xzYXF1bycsJ1xcdTIwM0EnOidyc2FxdW8nLCdcIic6J3F1b3QnLCdcXHUyMDFDJzonbGRxdW8nLCdcXHUyMDFEJzoncmRxdW8nLCdcXHUyMDFFJzonYmRxdW8nLCdcXHhBQic6J2xhcXVvJywnXFx4QkInOidyYXF1bycsJygnOidscGFyJywnKSc6J3JwYXInLCdbJzonbHNxYicsJ10nOidyc3FiJywneyc6J2xjdWInLCd9JzoncmN1YicsJ1xcdTIzMDgnOidsY2VpbCcsJ1xcdTIzMDknOidyY2VpbCcsJ1xcdTIzMEEnOidsZmxvb3InLCdcXHUyMzBCJzoncmZsb29yJywnXFx1Mjk4NSc6J2xvcGFyJywnXFx1Mjk4Nic6J3JvcGFyJywnXFx1Mjk4Qic6J2xicmtlJywnXFx1Mjk4Qyc6J3JicmtlJywnXFx1Mjk4RCc6J2xicmtzbHUnLCdcXHUyOThFJzoncmJya3NsZCcsJ1xcdTI5OEYnOidsYnJrc2xkJywnXFx1Mjk5MCc6J3JicmtzbHUnLCdcXHUyOTkxJzonbGFuZ2QnLCdcXHUyOTkyJzoncmFuZ2QnLCdcXHUyOTkzJzonbHBhcmx0JywnXFx1Mjk5NCc6J3JwYXJndCcsJ1xcdTI5OTUnOidndGxQYXInLCdcXHUyOTk2JzonbHRyUGFyJywnXFx1MjdFNic6J2xvYnJrJywnXFx1MjdFNyc6J3JvYnJrJywnXFx1MjdFOCc6J2xhbmcnLCdcXHUyN0U5JzoncmFuZycsJ1xcdTI3RUEnOidMYW5nJywnXFx1MjdFQic6J1JhbmcnLCdcXHUyN0VDJzonbG9hbmcnLCdcXHUyN0VEJzoncm9hbmcnLCdcXHUyNzcyJzonbGJicmsnLCdcXHUyNzczJzoncmJicmsnLCdcXHUyMDE2JzonVmVydCcsJ1xceEE3Jzonc2VjdCcsJ1xceEI2JzoncGFyYScsJ0AnOidjb21tYXQnLCcqJzonYXN0JywnLyc6J3NvbCcsJ3VuZGVmaW5lZCc6bnVsbCwnJic6J2FtcCcsJyMnOidudW0nLCclJzoncGVyY250JywnXFx1MjAzMCc6J3Blcm1pbCcsJ1xcdTIwMzEnOidwZXJ0ZW5rJywnXFx1MjAyMCc6J2RhZ2dlcicsJ1xcdTIwMjEnOidEYWdnZXInLCdcXHUyMDIyJzonYnVsbCcsJ1xcdTIwNDMnOidoeWJ1bGwnLCdcXHUyMDMyJzoncHJpbWUnLCdcXHUyMDMzJzonUHJpbWUnLCdcXHUyMDM0JzondHByaW1lJywnXFx1MjA1Nyc6J3FwcmltZScsJ1xcdTIwMzUnOidicHJpbWUnLCdcXHUyMDQxJzonY2FyZXQnLCdgJzonZ3JhdmUnLCdcXHhCNCc6J2FjdXRlJywnXFx1MDJEQyc6J3RpbGRlJywnXic6J0hhdCcsJ1xceEFGJzonbWFjcicsJ1xcdTAyRDgnOidicmV2ZScsJ1xcdTAyRDknOidkb3QnLCdcXHhBOCc6J2RpZScsJ1xcdTAyREEnOidyaW5nJywnXFx1MDJERCc6J2RibGFjJywnXFx4QjgnOidjZWRpbCcsJ1xcdTAyREInOidvZ29uJywnXFx1MDJDNic6J2NpcmMnLCdcXHUwMkM3JzonY2Fyb24nLCdcXHhCMCc6J2RlZycsJ1xceEE5JzonY29weScsJ1xceEFFJzoncmVnJywnXFx1MjExNyc6J2NvcHlzcicsJ1xcdTIxMTgnOid3cCcsJ1xcdTIxMUUnOidyeCcsJ1xcdTIxMjcnOidtaG8nLCdcXHUyMTI5JzonaWlvdGEnLCdcXHUyMTkwJzonbGFycicsJ1xcdTIxOUEnOidubGFycicsJ1xcdTIxOTInOidyYXJyJywnXFx1MjE5Qic6J25yYXJyJywnXFx1MjE5MSc6J3VhcnInLCdcXHUyMTkzJzonZGFycicsJ1xcdTIxOTQnOidoYXJyJywnXFx1MjFBRSc6J25oYXJyJywnXFx1MjE5NSc6J3ZhcnInLCdcXHUyMTk2JzonbndhcnInLCdcXHUyMTk3JzonbmVhcnInLCdcXHUyMTk4Jzonc2VhcnInLCdcXHUyMTk5Jzonc3dhcnInLCdcXHUyMTlEJzoncmFycncnLCdcXHUyMTlEXFx1MDMzOCc6J25yYXJydycsJ1xcdTIxOUUnOidMYXJyJywnXFx1MjE5Ric6J1VhcnInLCdcXHUyMUEwJzonUmFycicsJ1xcdTIxQTEnOidEYXJyJywnXFx1MjFBMic6J2xhcnJ0bCcsJ1xcdTIxQTMnOidyYXJydGwnLCdcXHUyMUE0JzonbWFwc3RvbGVmdCcsJ1xcdTIxQTUnOidtYXBzdG91cCcsJ1xcdTIxQTYnOidtYXAnLCdcXHUyMUE3JzonbWFwc3RvZG93bicsJ1xcdTIxQTknOidsYXJyaGsnLCdcXHUyMUFBJzoncmFycmhrJywnXFx1MjFBQic6J2xhcnJscCcsJ1xcdTIxQUMnOidyYXJybHAnLCdcXHUyMUFEJzonaGFycncnLCdcXHUyMUIwJzonbHNoJywnXFx1MjFCMSc6J3JzaCcsJ1xcdTIxQjInOidsZHNoJywnXFx1MjFCMyc6J3Jkc2gnLCdcXHUyMUI1JzonY3JhcnInLCdcXHUyMUI2JzonY3VsYXJyJywnXFx1MjFCNyc6J2N1cmFycicsJ1xcdTIxQkEnOidvbGFycicsJ1xcdTIxQkInOidvcmFycicsJ1xcdTIxQkMnOidsaGFydScsJ1xcdTIxQkQnOidsaGFyZCcsJ1xcdTIxQkUnOid1aGFycicsJ1xcdTIxQkYnOid1aGFybCcsJ1xcdTIxQzAnOidyaGFydScsJ1xcdTIxQzEnOidyaGFyZCcsJ1xcdTIxQzInOidkaGFycicsJ1xcdTIxQzMnOidkaGFybCcsJ1xcdTIxQzQnOidybGFycicsJ1xcdTIxQzUnOid1ZGFycicsJ1xcdTIxQzYnOidscmFycicsJ1xcdTIxQzcnOidsbGFycicsJ1xcdTIxQzgnOid1dWFycicsJ1xcdTIxQzknOidycmFycicsJ1xcdTIxQ0EnOidkZGFycicsJ1xcdTIxQ0InOidscmhhcicsJ1xcdTIxQ0MnOidybGhhcicsJ1xcdTIxRDAnOidsQXJyJywnXFx1MjFDRCc6J25sQXJyJywnXFx1MjFEMSc6J3VBcnInLCdcXHUyMUQyJzonckFycicsJ1xcdTIxQ0YnOiduckFycicsJ1xcdTIxRDMnOidkQXJyJywnXFx1MjFENCc6J2lmZicsJ1xcdTIxQ0UnOiduaEFycicsJ1xcdTIxRDUnOid2QXJyJywnXFx1MjFENic6J253QXJyJywnXFx1MjFENyc6J25lQXJyJywnXFx1MjFEOCc6J3NlQXJyJywnXFx1MjFEOSc6J3N3QXJyJywnXFx1MjFEQSc6J2xBYXJyJywnXFx1MjFEQic6J3JBYXJyJywnXFx1MjFERCc6J3ppZ3JhcnInLCdcXHUyMUU0JzonbGFycmInLCdcXHUyMUU1JzoncmFycmInLCdcXHUyMUY1JzonZHVhcnInLCdcXHUyMUZEJzonbG9hcnInLCdcXHUyMUZFJzoncm9hcnInLCdcXHUyMUZGJzonaG9hcnInLCdcXHUyMjAwJzonZm9yYWxsJywnXFx1MjIwMSc6J2NvbXAnLCdcXHUyMjAyJzoncGFydCcsJ1xcdTIyMDJcXHUwMzM4JzonbnBhcnQnLCdcXHUyMjAzJzonZXhpc3QnLCdcXHUyMjA0JzonbmV4aXN0JywnXFx1MjIwNSc6J2VtcHR5JywnXFx1MjIwNyc6J0RlbCcsJ1xcdTIyMDgnOidpbicsJ1xcdTIyMDknOidub3RpbicsJ1xcdTIyMEInOiduaScsJ1xcdTIyMEMnOidub3RuaScsJ1xcdTAzRjYnOidiZXBzaScsJ1xcdTIyMEYnOidwcm9kJywnXFx1MjIxMCc6J2NvcHJvZCcsJ1xcdTIyMTEnOidzdW0nLCcrJzoncGx1cycsJ1xceEIxJzoncG0nLCdcXHhGNyc6J2RpdicsJ1xceEQ3JzondGltZXMnLCc8JzonbHQnLCdcXHUyMjZFJzonbmx0JywnPFxcdTIwRDInOidudmx0JywnPSc6J2VxdWFscycsJ1xcdTIyNjAnOiduZScsJz1cXHUyMEU1JzonYm5lJywnXFx1MkE3NSc6J0VxdWFsJywnPic6J2d0JywnXFx1MjI2Ric6J25ndCcsJz5cXHUyMEQyJzonbnZndCcsJ1xceEFDJzonbm90JywnfCc6J3ZlcnQnLCdcXHhBNic6J2JydmJhcicsJ1xcdTIyMTInOidtaW51cycsJ1xcdTIyMTMnOidtcCcsJ1xcdTIyMTQnOidwbHVzZG8nLCdcXHUyMDQ0JzonZnJhc2wnLCdcXHUyMjE2Jzonc2V0bW4nLCdcXHUyMjE3JzonbG93YXN0JywnXFx1MjIxOCc6J2NvbXBmbicsJ1xcdTIyMUEnOidTcXJ0JywnXFx1MjIxRCc6J3Byb3AnLCdcXHUyMjFFJzonaW5maW4nLCdcXHUyMjFGJzonYW5ncnQnLCdcXHUyMjIwJzonYW5nJywnXFx1MjIyMFxcdTIwRDInOiduYW5nJywnXFx1MjIyMSc6J2FuZ21zZCcsJ1xcdTIyMjInOidhbmdzcGgnLCdcXHUyMjIzJzonbWlkJywnXFx1MjIyNCc6J25taWQnLCdcXHUyMjI1JzoncGFyJywnXFx1MjIyNic6J25wYXInLCdcXHUyMjI3JzonYW5kJywnXFx1MjIyOCc6J29yJywnXFx1MjIyOSc6J2NhcCcsJ1xcdTIyMjlcXHVGRTAwJzonY2FwcycsJ1xcdTIyMkEnOidjdXAnLCdcXHUyMjJBXFx1RkUwMCc6J2N1cHMnLCdcXHUyMjJCJzonaW50JywnXFx1MjIyQyc6J0ludCcsJ1xcdTIyMkQnOid0aW50JywnXFx1MkEwQyc6J3FpbnQnLCdcXHUyMjJFJzonb2ludCcsJ1xcdTIyMkYnOidDb25pbnQnLCdcXHUyMjMwJzonQ2NvbmludCcsJ1xcdTIyMzEnOidjd2ludCcsJ1xcdTIyMzInOidjd2NvbmludCcsJ1xcdTIyMzMnOidhd2NvbmludCcsJ1xcdTIyMzQnOid0aGVyZTQnLCdcXHUyMjM1JzonYmVjYXVzJywnXFx1MjIzNic6J3JhdGlvJywnXFx1MjIzNyc6J0NvbG9uJywnXFx1MjIzOCc6J21pbnVzZCcsJ1xcdTIyM0EnOidtRERvdCcsJ1xcdTIyM0InOidob210aHQnLCdcXHUyMjNDJzonc2ltJywnXFx1MjI0MSc6J25zaW0nLCdcXHUyMjNDXFx1MjBEMic6J252c2ltJywnXFx1MjIzRCc6J2JzaW0nLCdcXHUyMjNEXFx1MDMzMSc6J3JhY2UnLCdcXHUyMjNFJzonYWMnLCdcXHUyMjNFXFx1MDMzMyc6J2FjRScsJ1xcdTIyM0YnOidhY2QnLCdcXHUyMjQwJzond3InLCdcXHUyMjQyJzonZXNpbScsJ1xcdTIyNDJcXHUwMzM4JzonbmVzaW0nLCdcXHUyMjQzJzonc2ltZScsJ1xcdTIyNDQnOiduc2ltZScsJ1xcdTIyNDUnOidjb25nJywnXFx1MjI0Nyc6J25jb25nJywnXFx1MjI0Nic6J3NpbW5lJywnXFx1MjI0OCc6J2FwJywnXFx1MjI0OSc6J25hcCcsJ1xcdTIyNEEnOidhcGUnLCdcXHUyMjRCJzonYXBpZCcsJ1xcdTIyNEJcXHUwMzM4JzonbmFwaWQnLCdcXHUyMjRDJzonYmNvbmcnLCdcXHUyMjREJzonQ3VwQ2FwJywnXFx1MjI2RCc6J05vdEN1cENhcCcsJ1xcdTIyNERcXHUyMEQyJzonbnZhcCcsJ1xcdTIyNEUnOididW1wJywnXFx1MjI0RVxcdTAzMzgnOiduYnVtcCcsJ1xcdTIyNEYnOididW1wZScsJ1xcdTIyNEZcXHUwMzM4JzonbmJ1bXBlJywnXFx1MjI1MCc6J2RvdGVxJywnXFx1MjI1MFxcdTAzMzgnOiduZWRvdCcsJ1xcdTIyNTEnOidlRG90JywnXFx1MjI1Mic6J2VmRG90JywnXFx1MjI1Myc6J2VyRG90JywnXFx1MjI1NCc6J2NvbG9uZScsJ1xcdTIyNTUnOidlY29sb24nLCdcXHUyMjU2JzonZWNpcicsJ1xcdTIyNTcnOidjaXJlJywnXFx1MjI1OSc6J3dlZGdlcScsJ1xcdTIyNUEnOid2ZWVlcScsJ1xcdTIyNUMnOid0cmllJywnXFx1MjI1Ric6J2VxdWVzdCcsJ1xcdTIyNjEnOidlcXVpdicsJ1xcdTIyNjInOiduZXF1aXYnLCdcXHUyMjYxXFx1MjBFNSc6J2JuZXF1aXYnLCdcXHUyMjY0JzonbGUnLCdcXHUyMjcwJzonbmxlJywnXFx1MjI2NFxcdTIwRDInOidudmxlJywnXFx1MjI2NSc6J2dlJywnXFx1MjI3MSc6J25nZScsJ1xcdTIyNjVcXHUyMEQyJzonbnZnZScsJ1xcdTIyNjYnOidsRScsJ1xcdTIyNjZcXHUwMzM4JzonbmxFJywnXFx1MjI2Nyc6J2dFJywnXFx1MjI2N1xcdTAzMzgnOiduZ0UnLCdcXHUyMjY4XFx1RkUwMCc6J2x2bkUnLCdcXHUyMjY4JzonbG5FJywnXFx1MjI2OSc6J2duRScsJ1xcdTIyNjlcXHVGRTAwJzonZ3ZuRScsJ1xcdTIyNkEnOidsbCcsJ1xcdTIyNkFcXHUwMzM4Jzonbkx0dicsJ1xcdTIyNkFcXHUyMEQyJzonbkx0JywnXFx1MjI2Qic6J2dnJywnXFx1MjI2QlxcdTAzMzgnOiduR3R2JywnXFx1MjI2QlxcdTIwRDInOiduR3QnLCdcXHUyMjZDJzondHdpeHQnLCdcXHUyMjcyJzonbHNpbScsJ1xcdTIyNzQnOidubHNpbScsJ1xcdTIyNzMnOidnc2ltJywnXFx1MjI3NSc6J25nc2ltJywnXFx1MjI3Nic6J2xnJywnXFx1MjI3OCc6J250bGcnLCdcXHUyMjc3JzonZ2wnLCdcXHUyMjc5JzonbnRnbCcsJ1xcdTIyN0EnOidwcicsJ1xcdTIyODAnOiducHInLCdcXHUyMjdCJzonc2MnLCdcXHUyMjgxJzonbnNjJywnXFx1MjI3Qyc6J3ByY3VlJywnXFx1MjJFMCc6J25wcmN1ZScsJ1xcdTIyN0QnOidzY2N1ZScsJ1xcdTIyRTEnOiduc2NjdWUnLCdcXHUyMjdFJzoncHJzaW0nLCdcXHUyMjdGJzonc2NzaW0nLCdcXHUyMjdGXFx1MDMzOCc6J05vdFN1Y2NlZWRzVGlsZGUnLCdcXHUyMjgyJzonc3ViJywnXFx1MjI4NCc6J25zdWInLCdcXHUyMjgyXFx1MjBEMic6J3Zuc3ViJywnXFx1MjI4Myc6J3N1cCcsJ1xcdTIyODUnOiduc3VwJywnXFx1MjI4M1xcdTIwRDInOid2bnN1cCcsJ1xcdTIyODYnOidzdWJlJywnXFx1MjI4OCc6J25zdWJlJywnXFx1MjI4Nyc6J3N1cGUnLCdcXHUyMjg5JzonbnN1cGUnLCdcXHUyMjhBXFx1RkUwMCc6J3ZzdWJuZScsJ1xcdTIyOEEnOidzdWJuZScsJ1xcdTIyOEJcXHVGRTAwJzondnN1cG5lJywnXFx1MjI4Qic6J3N1cG5lJywnXFx1MjI4RCc6J2N1cGRvdCcsJ1xcdTIyOEUnOid1cGx1cycsJ1xcdTIyOEYnOidzcXN1YicsJ1xcdTIyOEZcXHUwMzM4JzonTm90U3F1YXJlU3Vic2V0JywnXFx1MjI5MCc6J3Nxc3VwJywnXFx1MjI5MFxcdTAzMzgnOidOb3RTcXVhcmVTdXBlcnNldCcsJ1xcdTIyOTEnOidzcXN1YmUnLCdcXHUyMkUyJzonbnNxc3ViZScsJ1xcdTIyOTInOidzcXN1cGUnLCdcXHUyMkUzJzonbnNxc3VwZScsJ1xcdTIyOTMnOidzcWNhcCcsJ1xcdTIyOTNcXHVGRTAwJzonc3FjYXBzJywnXFx1MjI5NCc6J3NxY3VwJywnXFx1MjI5NFxcdUZFMDAnOidzcWN1cHMnLCdcXHUyMjk1Jzonb3BsdXMnLCdcXHUyMjk2Jzonb21pbnVzJywnXFx1MjI5Nyc6J290aW1lcycsJ1xcdTIyOTgnOidvc29sJywnXFx1MjI5OSc6J29kb3QnLCdcXHUyMjlBJzonb2NpcicsJ1xcdTIyOUInOidvYXN0JywnXFx1MjI5RCc6J29kYXNoJywnXFx1MjI5RSc6J3BsdXNiJywnXFx1MjI5Ric6J21pbnVzYicsJ1xcdTIyQTAnOid0aW1lc2InLCdcXHUyMkExJzonc2RvdGInLCdcXHUyMkEyJzondmRhc2gnLCdcXHUyMkFDJzonbnZkYXNoJywnXFx1MjJBMyc6J2Rhc2h2JywnXFx1MjJBNCc6J3RvcCcsJ1xcdTIyQTUnOidib3QnLCdcXHUyMkE3JzonbW9kZWxzJywnXFx1MjJBOCc6J3ZEYXNoJywnXFx1MjJBRCc6J252RGFzaCcsJ1xcdTIyQTknOidWZGFzaCcsJ1xcdTIyQUUnOiduVmRhc2gnLCdcXHUyMkFBJzonVnZkYXNoJywnXFx1MjJBQic6J1ZEYXNoJywnXFx1MjJBRic6J25WRGFzaCcsJ1xcdTIyQjAnOidwcnVyZWwnLCdcXHUyMkIyJzondmx0cmknLCdcXHUyMkVBJzonbmx0cmknLCdcXHUyMkIzJzondnJ0cmknLCdcXHUyMkVCJzonbnJ0cmknLCdcXHUyMkI0JzonbHRyaWUnLCdcXHUyMkVDJzonbmx0cmllJywnXFx1MjJCNFxcdTIwRDInOidudmx0cmllJywnXFx1MjJCNSc6J3J0cmllJywnXFx1MjJFRCc6J25ydHJpZScsJ1xcdTIyQjVcXHUyMEQyJzonbnZydHJpZScsJ1xcdTIyQjYnOidvcmlnb2YnLCdcXHUyMkI3JzonaW1vZicsJ1xcdTIyQjgnOidtdW1hcCcsJ1xcdTIyQjknOidoZXJjb24nLCdcXHUyMkJBJzonaW50Y2FsJywnXFx1MjJCQic6J3ZlZWJhcicsJ1xcdTIyQkQnOidiYXJ2ZWUnLCdcXHUyMkJFJzonYW5ncnR2YicsJ1xcdTIyQkYnOidscnRyaScsJ1xcdTIyQzAnOidXZWRnZScsJ1xcdTIyQzEnOidWZWUnLCdcXHUyMkMyJzoneGNhcCcsJ1xcdTIyQzMnOid4Y3VwJywnXFx1MjJDNCc6J2RpYW0nLCdcXHUyMkM1Jzonc2RvdCcsJ1xcdTIyQzYnOidTdGFyJywnXFx1MjJDNyc6J2Rpdm9ueCcsJ1xcdTIyQzgnOidib3d0aWUnLCdcXHUyMkM5JzonbHRpbWVzJywnXFx1MjJDQSc6J3J0aW1lcycsJ1xcdTIyQ0InOidsdGhyZWUnLCdcXHUyMkNDJzoncnRocmVlJywnXFx1MjJDRCc6J2JzaW1lJywnXFx1MjJDRSc6J2N1dmVlJywnXFx1MjJDRic6J2N1d2VkJywnXFx1MjJEMCc6J1N1YicsJ1xcdTIyRDEnOidTdXAnLCdcXHUyMkQyJzonQ2FwJywnXFx1MjJEMyc6J0N1cCcsJ1xcdTIyRDQnOidmb3JrJywnXFx1MjJENSc6J2VwYXInLCdcXHUyMkQ2JzonbHRkb3QnLCdcXHUyMkQ3JzonZ3Rkb3QnLCdcXHUyMkQ4JzonTGwnLCdcXHUyMkQ4XFx1MDMzOCc6J25MbCcsJ1xcdTIyRDknOidHZycsJ1xcdTIyRDlcXHUwMzM4JzonbkdnJywnXFx1MjJEQVxcdUZFMDAnOidsZXNnJywnXFx1MjJEQSc6J2xlZycsJ1xcdTIyREInOidnZWwnLCdcXHUyMkRCXFx1RkUwMCc6J2dlc2wnLCdcXHUyMkRFJzonY3VlcHInLCdcXHUyMkRGJzonY3Vlc2MnLCdcXHUyMkU2JzonbG5zaW0nLCdcXHUyMkU3JzonZ25zaW0nLCdcXHUyMkU4JzoncHJuc2ltJywnXFx1MjJFOSc6J3NjbnNpbScsJ1xcdTIyRUUnOid2ZWxsaXAnLCdcXHUyMkVGJzonY3Rkb3QnLCdcXHUyMkYwJzondXRkb3QnLCdcXHUyMkYxJzonZHRkb3QnLCdcXHUyMkYyJzonZGlzaW4nLCdcXHUyMkYzJzonaXNpbnN2JywnXFx1MjJGNCc6J2lzaW5zJywnXFx1MjJGNSc6J2lzaW5kb3QnLCdcXHUyMkY1XFx1MDMzOCc6J25vdGluZG90JywnXFx1MjJGNic6J25vdGludmMnLCdcXHUyMkY3Jzonbm90aW52YicsJ1xcdTIyRjknOidpc2luRScsJ1xcdTIyRjlcXHUwMzM4Jzonbm90aW5FJywnXFx1MjJGQSc6J25pc2QnLCdcXHUyMkZCJzoneG5pcycsJ1xcdTIyRkMnOiduaXMnLCdcXHUyMkZEJzonbm90bml2YycsJ1xcdTIyRkUnOidub3RuaXZiJywnXFx1MjMwNSc6J2JhcndlZCcsJ1xcdTIzMDYnOidCYXJ3ZWQnLCdcXHUyMzBDJzonZHJjcm9wJywnXFx1MjMwRCc6J2RsY3JvcCcsJ1xcdTIzMEUnOid1cmNyb3AnLCdcXHUyMzBGJzondWxjcm9wJywnXFx1MjMxMCc6J2Jub3QnLCdcXHUyMzEyJzoncHJvZmxpbmUnLCdcXHUyMzEzJzoncHJvZnN1cmYnLCdcXHUyMzE1JzondGVscmVjJywnXFx1MjMxNic6J3RhcmdldCcsJ1xcdTIzMUMnOid1bGNvcm4nLCdcXHUyMzFEJzondXJjb3JuJywnXFx1MjMxRSc6J2RsY29ybicsJ1xcdTIzMUYnOidkcmNvcm4nLCdcXHUyMzIyJzonZnJvd24nLCdcXHUyMzIzJzonc21pbGUnLCdcXHUyMzJEJzonY3lsY3R5JywnXFx1MjMyRSc6J3Byb2ZhbGFyJywnXFx1MjMzNic6J3RvcGJvdCcsJ1xcdTIzM0QnOidvdmJhcicsJ1xcdTIzM0YnOidzb2xiYXInLCdcXHUyMzdDJzonYW5nemFycicsJ1xcdTIzQjAnOidsbW91c3QnLCdcXHUyM0IxJzoncm1vdXN0JywnXFx1MjNCNCc6J3RicmsnLCdcXHUyM0I1JzonYmJyaycsJ1xcdTIzQjYnOidiYnJrdGJyaycsJ1xcdTIzREMnOidPdmVyUGFyZW50aGVzaXMnLCdcXHUyM0REJzonVW5kZXJQYXJlbnRoZXNpcycsJ1xcdTIzREUnOidPdmVyQnJhY2UnLCdcXHUyM0RGJzonVW5kZXJCcmFjZScsJ1xcdTIzRTInOid0cnBleml1bScsJ1xcdTIzRTcnOidlbGludGVycycsJ1xcdTI0MjMnOidibGFuaycsJ1xcdTI1MDAnOidib3hoJywnXFx1MjUwMic6J2JveHYnLCdcXHUyNTBDJzonYm94ZHInLCdcXHUyNTEwJzonYm94ZGwnLCdcXHUyNTE0JzonYm94dXInLCdcXHUyNTE4JzonYm94dWwnLCdcXHUyNTFDJzonYm94dnInLCdcXHUyNTI0JzonYm94dmwnLCdcXHUyNTJDJzonYm94aGQnLCdcXHUyNTM0JzonYm94aHUnLCdcXHUyNTNDJzonYm94dmgnLCdcXHUyNTUwJzonYm94SCcsJ1xcdTI1NTEnOidib3hWJywnXFx1MjU1Mic6J2JveGRSJywnXFx1MjU1Myc6J2JveERyJywnXFx1MjU1NCc6J2JveERSJywnXFx1MjU1NSc6J2JveGRMJywnXFx1MjU1Nic6J2JveERsJywnXFx1MjU1Nyc6J2JveERMJywnXFx1MjU1OCc6J2JveHVSJywnXFx1MjU1OSc6J2JveFVyJywnXFx1MjU1QSc6J2JveFVSJywnXFx1MjU1Qic6J2JveHVMJywnXFx1MjU1Qyc6J2JveFVsJywnXFx1MjU1RCc6J2JveFVMJywnXFx1MjU1RSc6J2JveHZSJywnXFx1MjU1Ric6J2JveFZyJywnXFx1MjU2MCc6J2JveFZSJywnXFx1MjU2MSc6J2JveHZMJywnXFx1MjU2Mic6J2JveFZsJywnXFx1MjU2Myc6J2JveFZMJywnXFx1MjU2NCc6J2JveEhkJywnXFx1MjU2NSc6J2JveGhEJywnXFx1MjU2Nic6J2JveEhEJywnXFx1MjU2Nyc6J2JveEh1JywnXFx1MjU2OCc6J2JveGhVJywnXFx1MjU2OSc6J2JveEhVJywnXFx1MjU2QSc6J2JveHZIJywnXFx1MjU2Qic6J2JveFZoJywnXFx1MjU2Qyc6J2JveFZIJywnXFx1MjU4MCc6J3VoYmxrJywnXFx1MjU4NCc6J2xoYmxrJywnXFx1MjU4OCc6J2Jsb2NrJywnXFx1MjU5MSc6J2JsazE0JywnXFx1MjU5Mic6J2JsazEyJywnXFx1MjU5Myc6J2JsazM0JywnXFx1MjVBMSc6J3NxdScsJ1xcdTI1QUEnOidzcXVmJywnXFx1MjVBQic6J0VtcHR5VmVyeVNtYWxsU3F1YXJlJywnXFx1MjVBRCc6J3JlY3QnLCdcXHUyNUFFJzonbWFya2VyJywnXFx1MjVCMSc6J2ZsdG5zJywnXFx1MjVCMyc6J3h1dHJpJywnXFx1MjVCNCc6J3V0cmlmJywnXFx1MjVCNSc6J3V0cmknLCdcXHUyNUI4JzoncnRyaWYnLCdcXHUyNUI5JzoncnRyaScsJ1xcdTI1QkQnOid4ZHRyaScsJ1xcdTI1QkUnOidkdHJpZicsJ1xcdTI1QkYnOidkdHJpJywnXFx1MjVDMic6J2x0cmlmJywnXFx1MjVDMyc6J2x0cmknLCdcXHUyNUNBJzonbG96JywnXFx1MjVDQic6J2NpcicsJ1xcdTI1RUMnOid0cmlkb3QnLCdcXHUyNUVGJzoneGNpcmMnLCdcXHUyNUY4JzondWx0cmknLCdcXHUyNUY5JzondXJ0cmknLCdcXHUyNUZBJzonbGx0cmknLCdcXHUyNUZCJzonRW1wdHlTbWFsbFNxdWFyZScsJ1xcdTI1RkMnOidGaWxsZWRTbWFsbFNxdWFyZScsJ1xcdTI2MDUnOidzdGFyZicsJ1xcdTI2MDYnOidzdGFyJywnXFx1MjYwRSc6J3Bob25lJywnXFx1MjY0MCc6J2ZlbWFsZScsJ1xcdTI2NDInOidtYWxlJywnXFx1MjY2MCc6J3NwYWRlcycsJ1xcdTI2NjMnOidjbHVicycsJ1xcdTI2NjUnOidoZWFydHMnLCdcXHUyNjY2JzonZGlhbXMnLCdcXHUyNjZBJzonc3VuZycsJ1xcdTI3MTMnOidjaGVjaycsJ1xcdTI3MTcnOidjcm9zcycsJ1xcdTI3MjAnOidtYWx0JywnXFx1MjczNic6J3NleHQnLCdcXHUyNzU4JzonVmVydGljYWxTZXBhcmF0b3InLCdcXHUyN0M4JzonYnNvbGhzdWInLCdcXHUyN0M5Jzonc3VwaHNvbCcsJ1xcdTI3RjUnOid4bGFycicsJ1xcdTI3RjYnOid4cmFycicsJ1xcdTI3RjcnOid4aGFycicsJ1xcdTI3RjgnOid4bEFycicsJ1xcdTI3RjknOid4ckFycicsJ1xcdTI3RkEnOid4aEFycicsJ1xcdTI3RkMnOid4bWFwJywnXFx1MjdGRic6J2R6aWdyYXJyJywnXFx1MjkwMic6J252bEFycicsJ1xcdTI5MDMnOidudnJBcnInLCdcXHUyOTA0JzonbnZIYXJyJywnXFx1MjkwNSc6J01hcCcsJ1xcdTI5MEMnOidsYmFycicsJ1xcdTI5MEQnOidyYmFycicsJ1xcdTI5MEUnOidsQmFycicsJ1xcdTI5MEYnOidyQmFycicsJ1xcdTI5MTAnOidSQmFycicsJ1xcdTI5MTEnOidERG90cmFoZCcsJ1xcdTI5MTInOidVcEFycm93QmFyJywnXFx1MjkxMyc6J0Rvd25BcnJvd0JhcicsJ1xcdTI5MTYnOidSYXJydGwnLCdcXHUyOTE5JzonbGF0YWlsJywnXFx1MjkxQSc6J3JhdGFpbCcsJ1xcdTI5MUInOidsQXRhaWwnLCdcXHUyOTFDJzonckF0YWlsJywnXFx1MjkxRCc6J2xhcnJmcycsJ1xcdTI5MUUnOidyYXJyZnMnLCdcXHUyOTFGJzonbGFycmJmcycsJ1xcdTI5MjAnOidyYXJyYmZzJywnXFx1MjkyMyc6J253YXJoaycsJ1xcdTI5MjQnOiduZWFyaGsnLCdcXHUyOTI1Jzonc2VhcmhrJywnXFx1MjkyNic6J3N3YXJoaycsJ1xcdTI5MjcnOidud25lYXInLCdcXHUyOTI4JzondG9lYScsJ1xcdTI5MjknOid0b3NhJywnXFx1MjkyQSc6J3N3bndhcicsJ1xcdTI5MzMnOidyYXJyYycsJ1xcdTI5MzNcXHUwMzM4JzonbnJhcnJjJywnXFx1MjkzNSc6J2N1ZGFycnInLCdcXHUyOTM2JzonbGRjYScsJ1xcdTI5MzcnOidyZGNhJywnXFx1MjkzOCc6J2N1ZGFycmwnLCdcXHUyOTM5JzonbGFycnBsJywnXFx1MjkzQyc6J2N1cmFycm0nLCdcXHUyOTNEJzonY3VsYXJycCcsJ1xcdTI5NDUnOidyYXJycGwnLCdcXHUyOTQ4JzonaGFycmNpcicsJ1xcdTI5NDknOidVYXJyb2NpcicsJ1xcdTI5NEEnOidsdXJkc2hhcicsJ1xcdTI5NEInOidsZHJ1c2hhcicsJ1xcdTI5NEUnOidMZWZ0UmlnaHRWZWN0b3InLCdcXHUyOTRGJzonUmlnaHRVcERvd25WZWN0b3InLCdcXHUyOTUwJzonRG93bkxlZnRSaWdodFZlY3RvcicsJ1xcdTI5NTEnOidMZWZ0VXBEb3duVmVjdG9yJywnXFx1Mjk1Mic6J0xlZnRWZWN0b3JCYXInLCdcXHUyOTUzJzonUmlnaHRWZWN0b3JCYXInLCdcXHUyOTU0JzonUmlnaHRVcFZlY3RvckJhcicsJ1xcdTI5NTUnOidSaWdodERvd25WZWN0b3JCYXInLCdcXHUyOTU2JzonRG93bkxlZnRWZWN0b3JCYXInLCdcXHUyOTU3JzonRG93blJpZ2h0VmVjdG9yQmFyJywnXFx1Mjk1OCc6J0xlZnRVcFZlY3RvckJhcicsJ1xcdTI5NTknOidMZWZ0RG93blZlY3RvckJhcicsJ1xcdTI5NUEnOidMZWZ0VGVlVmVjdG9yJywnXFx1Mjk1Qic6J1JpZ2h0VGVlVmVjdG9yJywnXFx1Mjk1Qyc6J1JpZ2h0VXBUZWVWZWN0b3InLCdcXHUyOTVEJzonUmlnaHREb3duVGVlVmVjdG9yJywnXFx1Mjk1RSc6J0Rvd25MZWZ0VGVlVmVjdG9yJywnXFx1Mjk1Ric6J0Rvd25SaWdodFRlZVZlY3RvcicsJ1xcdTI5NjAnOidMZWZ0VXBUZWVWZWN0b3InLCdcXHUyOTYxJzonTGVmdERvd25UZWVWZWN0b3InLCdcXHUyOTYyJzonbEhhcicsJ1xcdTI5NjMnOid1SGFyJywnXFx1Mjk2NCc6J3JIYXInLCdcXHUyOTY1JzonZEhhcicsJ1xcdTI5NjYnOidsdXJ1aGFyJywnXFx1Mjk2Nyc6J2xkcmRoYXInLCdcXHUyOTY4JzoncnVsdWhhcicsJ1xcdTI5NjknOidyZGxkaGFyJywnXFx1Mjk2QSc6J2xoYXJ1bCcsJ1xcdTI5NkInOidsbGhhcmQnLCdcXHUyOTZDJzoncmhhcnVsJywnXFx1Mjk2RCc6J2xyaGFyZCcsJ1xcdTI5NkUnOid1ZGhhcicsJ1xcdTI5NkYnOidkdWhhcicsJ1xcdTI5NzAnOidSb3VuZEltcGxpZXMnLCdcXHUyOTcxJzonZXJhcnInLCdcXHUyOTcyJzonc2ltcmFycicsJ1xcdTI5NzMnOidsYXJyc2ltJywnXFx1Mjk3NCc6J3JhcnJzaW0nLCdcXHUyOTc1JzoncmFycmFwJywnXFx1Mjk3Nic6J2x0bGFycicsJ1xcdTI5NzgnOidndHJhcnInLCdcXHUyOTc5Jzonc3VicmFycicsJ1xcdTI5N0InOidzdXBsYXJyJywnXFx1Mjk3Qyc6J2xmaXNodCcsJ1xcdTI5N0QnOidyZmlzaHQnLCdcXHUyOTdFJzondWZpc2h0JywnXFx1Mjk3Ric6J2RmaXNodCcsJ1xcdTI5OUEnOid2emlnemFnJywnXFx1Mjk5Qyc6J3ZhbmdydCcsJ1xcdTI5OUQnOidhbmdydHZiZCcsJ1xcdTI5QTQnOidhbmdlJywnXFx1MjlBNSc6J3JhbmdlJywnXFx1MjlBNic6J2R3YW5nbGUnLCdcXHUyOUE3JzondXdhbmdsZScsJ1xcdTI5QTgnOidhbmdtc2RhYScsJ1xcdTI5QTknOidhbmdtc2RhYicsJ1xcdTI5QUEnOidhbmdtc2RhYycsJ1xcdTI5QUInOidhbmdtc2RhZCcsJ1xcdTI5QUMnOidhbmdtc2RhZScsJ1xcdTI5QUQnOidhbmdtc2RhZicsJ1xcdTI5QUUnOidhbmdtc2RhZycsJ1xcdTI5QUYnOidhbmdtc2RhaCcsJ1xcdTI5QjAnOidiZW1wdHl2JywnXFx1MjlCMSc6J2RlbXB0eXYnLCdcXHUyOUIyJzonY2VtcHR5dicsJ1xcdTI5QjMnOidyYWVtcHR5dicsJ1xcdTI5QjQnOidsYWVtcHR5dicsJ1xcdTI5QjUnOidvaGJhcicsJ1xcdTI5QjYnOidvbWlkJywnXFx1MjlCNyc6J29wYXInLCdcXHUyOUI5Jzonb3BlcnAnLCdcXHUyOUJCJzonb2xjcm9zcycsJ1xcdTI5QkMnOidvZHNvbGQnLCdcXHUyOUJFJzonb2xjaXInLCdcXHUyOUJGJzonb2ZjaXInLCdcXHUyOUMwJzonb2x0JywnXFx1MjlDMSc6J29ndCcsJ1xcdTI5QzInOidjaXJzY2lyJywnXFx1MjlDMyc6J2NpckUnLCdcXHUyOUM0Jzonc29sYicsJ1xcdTI5QzUnOidic29sYicsJ1xcdTI5QzknOidib3hib3gnLCdcXHUyOUNEJzondHJpc2InLCdcXHUyOUNFJzoncnRyaWx0cmknLCdcXHUyOUNGJzonTGVmdFRyaWFuZ2xlQmFyJywnXFx1MjlDRlxcdTAzMzgnOidOb3RMZWZ0VHJpYW5nbGVCYXInLCdcXHUyOUQwJzonUmlnaHRUcmlhbmdsZUJhcicsJ1xcdTI5RDBcXHUwMzM4JzonTm90UmlnaHRUcmlhbmdsZUJhcicsJ1xcdTI5REMnOidpaW5maW4nLCdcXHUyOUREJzonaW5maW50aWUnLCdcXHUyOURFJzonbnZpbmZpbicsJ1xcdTI5RTMnOidlcGFyc2wnLCdcXHUyOUU0Jzonc21lcGFyc2wnLCdcXHUyOUU1JzonZXF2cGFyc2wnLCdcXHUyOUVCJzonbG96ZicsJ1xcdTI5RjQnOidSdWxlRGVsYXllZCcsJ1xcdTI5RjYnOidkc29sJywnXFx1MkEwMCc6J3hvZG90JywnXFx1MkEwMSc6J3hvcGx1cycsJ1xcdTJBMDInOid4b3RpbWUnLCdcXHUyQTA0JzoneHVwbHVzJywnXFx1MkEwNic6J3hzcWN1cCcsJ1xcdTJBMEQnOidmcGFydGludCcsJ1xcdTJBMTAnOidjaXJmbmludCcsJ1xcdTJBMTEnOidhd2ludCcsJ1xcdTJBMTInOidycHBvbGludCcsJ1xcdTJBMTMnOidzY3BvbGludCcsJ1xcdTJBMTQnOiducG9saW50JywnXFx1MkExNSc6J3BvaW50aW50JywnXFx1MkExNic6J3F1YXRpbnQnLCdcXHUyQTE3JzonaW50bGFyaGsnLCdcXHUyQTIyJzoncGx1c2NpcicsJ1xcdTJBMjMnOidwbHVzYWNpcicsJ1xcdTJBMjQnOidzaW1wbHVzJywnXFx1MkEyNSc6J3BsdXNkdScsJ1xcdTJBMjYnOidwbHVzc2ltJywnXFx1MkEyNyc6J3BsdXN0d28nLCdcXHUyQTI5JzonbWNvbW1hJywnXFx1MkEyQSc6J21pbnVzZHUnLCdcXHUyQTJEJzonbG9wbHVzJywnXFx1MkEyRSc6J3JvcGx1cycsJ1xcdTJBMkYnOidDcm9zcycsJ1xcdTJBMzAnOid0aW1lc2QnLCdcXHUyQTMxJzondGltZXNiYXInLCdcXHUyQTMzJzonc21hc2hwJywnXFx1MkEzNCc6J2xvdGltZXMnLCdcXHUyQTM1Jzoncm90aW1lcycsJ1xcdTJBMzYnOidvdGltZXNhcycsJ1xcdTJBMzcnOidPdGltZXMnLCdcXHUyQTM4Jzonb2RpdicsJ1xcdTJBMzknOid0cmlwbHVzJywnXFx1MkEzQSc6J3RyaW1pbnVzJywnXFx1MkEzQic6J3RyaXRpbWUnLCdcXHUyQTNDJzonaXByb2QnLCdcXHUyQTNGJzonYW1hbGcnLCdcXHUyQTQwJzonY2FwZG90JywnXFx1MkE0Mic6J25jdXAnLCdcXHUyQTQzJzonbmNhcCcsJ1xcdTJBNDQnOidjYXBhbmQnLCdcXHUyQTQ1JzonY3Vwb3InLCdcXHUyQTQ2JzonY3VwY2FwJywnXFx1MkE0Nyc6J2NhcGN1cCcsJ1xcdTJBNDgnOidjdXBicmNhcCcsJ1xcdTJBNDknOidjYXBicmN1cCcsJ1xcdTJBNEEnOidjdXBjdXAnLCdcXHUyQTRCJzonY2FwY2FwJywnXFx1MkE0Qyc6J2NjdXBzJywnXFx1MkE0RCc6J2NjYXBzJywnXFx1MkE1MCc6J2NjdXBzc20nLCdcXHUyQTUzJzonQW5kJywnXFx1MkE1NCc6J09yJywnXFx1MkE1NSc6J2FuZGFuZCcsJ1xcdTJBNTYnOidvcm9yJywnXFx1MkE1Nyc6J29yc2xvcGUnLCdcXHUyQTU4JzonYW5kc2xvcGUnLCdcXHUyQTVBJzonYW5kdicsJ1xcdTJBNUInOidvcnYnLCdcXHUyQTVDJzonYW5kZCcsJ1xcdTJBNUQnOidvcmQnLCdcXHUyQTVGJzond2VkYmFyJywnXFx1MkE2Nic6J3Nkb3RlJywnXFx1MkE2QSc6J3NpbWRvdCcsJ1xcdTJBNkQnOidjb25nZG90JywnXFx1MkE2RFxcdTAzMzgnOiduY29uZ2RvdCcsJ1xcdTJBNkUnOidlYXN0ZXInLCdcXHUyQTZGJzonYXBhY2lyJywnXFx1MkE3MCc6J2FwRScsJ1xcdTJBNzBcXHUwMzM4JzonbmFwRScsJ1xcdTJBNzEnOidlcGx1cycsJ1xcdTJBNzInOidwbHVzZScsJ1xcdTJBNzMnOidFc2ltJywnXFx1MkE3Nyc6J2VERG90JywnXFx1MkE3OCc6J2VxdWl2REQnLCdcXHUyQTc5JzonbHRjaXInLCdcXHUyQTdBJzonZ3RjaXInLCdcXHUyQTdCJzonbHRxdWVzdCcsJ1xcdTJBN0MnOidndHF1ZXN0JywnXFx1MkE3RCc6J2xlcycsJ1xcdTJBN0RcXHUwMzM4JzonbmxlcycsJ1xcdTJBN0UnOidnZXMnLCdcXHUyQTdFXFx1MDMzOCc6J25nZXMnLCdcXHUyQTdGJzonbGVzZG90JywnXFx1MkE4MCc6J2dlc2RvdCcsJ1xcdTJBODEnOidsZXNkb3RvJywnXFx1MkE4Mic6J2dlc2RvdG8nLCdcXHUyQTgzJzonbGVzZG90b3InLCdcXHUyQTg0JzonZ2VzZG90b2wnLCdcXHUyQTg1JzonbGFwJywnXFx1MkE4Nic6J2dhcCcsJ1xcdTJBODcnOidsbmUnLCdcXHUyQTg4JzonZ25lJywnXFx1MkE4OSc6J2xuYXAnLCdcXHUyQThBJzonZ25hcCcsJ1xcdTJBOEInOidsRWcnLCdcXHUyQThDJzonZ0VsJywnXFx1MkE4RCc6J2xzaW1lJywnXFx1MkE4RSc6J2dzaW1lJywnXFx1MkE4Ric6J2xzaW1nJywnXFx1MkE5MCc6J2dzaW1sJywnXFx1MkE5MSc6J2xnRScsJ1xcdTJBOTInOidnbEUnLCdcXHUyQTkzJzonbGVzZ2VzJywnXFx1MkE5NCc6J2dlc2xlcycsJ1xcdTJBOTUnOidlbHMnLCdcXHUyQTk2JzonZWdzJywnXFx1MkE5Nyc6J2Vsc2RvdCcsJ1xcdTJBOTgnOidlZ3Nkb3QnLCdcXHUyQTk5JzonZWwnLCdcXHUyQTlBJzonZWcnLCdcXHUyQTlEJzonc2ltbCcsJ1xcdTJBOUUnOidzaW1nJywnXFx1MkE5Ric6J3NpbWxFJywnXFx1MkFBMCc6J3NpbWdFJywnXFx1MkFBMSc6J0xlc3NMZXNzJywnXFx1MkFBMVxcdTAzMzgnOidOb3ROZXN0ZWRMZXNzTGVzcycsJ1xcdTJBQTInOidHcmVhdGVyR3JlYXRlcicsJ1xcdTJBQTJcXHUwMzM4JzonTm90TmVzdGVkR3JlYXRlckdyZWF0ZXInLCdcXHUyQUE0JzonZ2xqJywnXFx1MkFBNSc6J2dsYScsJ1xcdTJBQTYnOidsdGNjJywnXFx1MkFBNyc6J2d0Y2MnLCdcXHUyQUE4JzonbGVzY2MnLCdcXHUyQUE5JzonZ2VzY2MnLCdcXHUyQUFBJzonc210JywnXFx1MkFBQic6J2xhdCcsJ1xcdTJBQUMnOidzbXRlJywnXFx1MkFBQ1xcdUZFMDAnOidzbXRlcycsJ1xcdTJBQUQnOidsYXRlJywnXFx1MkFBRFxcdUZFMDAnOidsYXRlcycsJ1xcdTJBQUUnOididW1wRScsJ1xcdTJBQUYnOidwcmUnLCdcXHUyQUFGXFx1MDMzOCc6J25wcmUnLCdcXHUyQUIwJzonc2NlJywnXFx1MkFCMFxcdTAzMzgnOiduc2NlJywnXFx1MkFCMyc6J3ByRScsJ1xcdTJBQjQnOidzY0UnLCdcXHUyQUI1JzoncHJuRScsJ1xcdTJBQjYnOidzY25FJywnXFx1MkFCNyc6J3ByYXAnLCdcXHUyQUI4Jzonc2NhcCcsJ1xcdTJBQjknOidwcm5hcCcsJ1xcdTJBQkEnOidzY25hcCcsJ1xcdTJBQkInOidQcicsJ1xcdTJBQkMnOidTYycsJ1xcdTJBQkQnOidzdWJkb3QnLCdcXHUyQUJFJzonc3VwZG90JywnXFx1MkFCRic6J3N1YnBsdXMnLCdcXHUyQUMwJzonc3VwcGx1cycsJ1xcdTJBQzEnOidzdWJtdWx0JywnXFx1MkFDMic6J3N1cG11bHQnLCdcXHUyQUMzJzonc3ViZWRvdCcsJ1xcdTJBQzQnOidzdXBlZG90JywnXFx1MkFDNSc6J3N1YkUnLCdcXHUyQUM1XFx1MDMzOCc6J25zdWJFJywnXFx1MkFDNic6J3N1cEUnLCdcXHUyQUM2XFx1MDMzOCc6J25zdXBFJywnXFx1MkFDNyc6J3N1YnNpbScsJ1xcdTJBQzgnOidzdXBzaW0nLCdcXHUyQUNCXFx1RkUwMCc6J3ZzdWJuRScsJ1xcdTJBQ0InOidzdWJuRScsJ1xcdTJBQ0NcXHVGRTAwJzondnN1cG5FJywnXFx1MkFDQyc6J3N1cG5FJywnXFx1MkFDRic6J2NzdWInLCdcXHUyQUQwJzonY3N1cCcsJ1xcdTJBRDEnOidjc3ViZScsJ1xcdTJBRDInOidjc3VwZScsJ1xcdTJBRDMnOidzdWJzdXAnLCdcXHUyQUQ0Jzonc3Vwc3ViJywnXFx1MkFENSc6J3N1YnN1YicsJ1xcdTJBRDYnOidzdXBzdXAnLCdcXHUyQUQ3Jzonc3VwaHN1YicsJ1xcdTJBRDgnOidzdXBkc3ViJywnXFx1MkFEOSc6J2Zvcmt2JywnXFx1MkFEQSc6J3RvcGZvcmsnLCdcXHUyQURCJzonbWxjcCcsJ1xcdTJBRTQnOidEYXNodicsJ1xcdTJBRTYnOidWZGFzaGwnLCdcXHUyQUU3JzonQmFydicsJ1xcdTJBRTgnOid2QmFyJywnXFx1MkFFOSc6J3ZCYXJ2JywnXFx1MkFFQic6J1ZiYXInLCdcXHUyQUVDJzonTm90JywnXFx1MkFFRCc6J2JOb3QnLCdcXHUyQUVFJzoncm5taWQnLCdcXHUyQUVGJzonY2lybWlkJywnXFx1MkFGMCc6J21pZGNpcicsJ1xcdTJBRjEnOid0b3BjaXInLCdcXHUyQUYyJzonbmhwYXInLCdcXHUyQUYzJzoncGFyc2ltJywnXFx1MkFGRCc6J3BhcnNsJywnXFx1MkFGRFxcdTIwRTUnOiducGFyc2wnLCdcXHUyNjZEJzonZmxhdCcsJ1xcdTI2NkUnOiduYXR1cicsJ1xcdTI2NkYnOidzaGFycCcsJ1xceEE0JzonY3VycmVuJywnXFx4QTInOidjZW50JywnJCc6J2RvbGxhcicsJ1xceEEzJzoncG91bmQnLCdcXHhBNSc6J3llbicsJ1xcdTIwQUMnOidldXJvJywnXFx4QjknOidzdXAxJywnXFx4QkQnOidoYWxmJywnXFx1MjE1Myc6J2ZyYWMxMycsJ1xceEJDJzonZnJhYzE0JywnXFx1MjE1NSc6J2ZyYWMxNScsJ1xcdTIxNTknOidmcmFjMTYnLCdcXHUyMTVCJzonZnJhYzE4JywnXFx4QjInOidzdXAyJywnXFx1MjE1NCc6J2ZyYWMyMycsJ1xcdTIxNTYnOidmcmFjMjUnLCdcXHhCMyc6J3N1cDMnLCdcXHhCRSc6J2ZyYWMzNCcsJ1xcdTIxNTcnOidmcmFjMzUnLCdcXHUyMTVDJzonZnJhYzM4JywnXFx1MjE1OCc6J2ZyYWM0NScsJ1xcdTIxNUEnOidmcmFjNTYnLCdcXHUyMTVEJzonZnJhYzU4JywnXFx1MjE1RSc6J2ZyYWM3OCcsJ1xcdUQ4MzVcXHVEQ0I2JzonYXNjcicsJ1xcdUQ4MzVcXHVERDUyJzonYW9wZicsJ1xcdUQ4MzVcXHVERDFFJzonYWZyJywnXFx1RDgzNVxcdUREMzgnOidBb3BmJywnXFx1RDgzNVxcdUREMDQnOidBZnInLCdcXHVEODM1XFx1REM5Qyc6J0FzY3InLCdcXHhBQSc6J29yZGYnLCdcXHhFMSc6J2FhY3V0ZScsJ1xceEMxJzonQWFjdXRlJywnXFx4RTAnOidhZ3JhdmUnLCdcXHhDMCc6J0FncmF2ZScsJ1xcdTAxMDMnOidhYnJldmUnLCdcXHUwMTAyJzonQWJyZXZlJywnXFx4RTInOidhY2lyYycsJ1xceEMyJzonQWNpcmMnLCdcXHhFNSc6J2FyaW5nJywnXFx4QzUnOidhbmdzdCcsJ1xceEU0JzonYXVtbCcsJ1xceEM0JzonQXVtbCcsJ1xceEUzJzonYXRpbGRlJywnXFx4QzMnOidBdGlsZGUnLCdcXHUwMTA1JzonYW9nb24nLCdcXHUwMTA0JzonQW9nb24nLCdcXHUwMTAxJzonYW1hY3InLCdcXHUwMTAwJzonQW1hY3InLCdcXHhFNic6J2FlbGlnJywnXFx4QzYnOidBRWxpZycsJ1xcdUQ4MzVcXHVEQ0I3JzonYnNjcicsJ1xcdUQ4MzVcXHVERDUzJzonYm9wZicsJ1xcdUQ4MzVcXHVERDFGJzonYmZyJywnXFx1RDgzNVxcdUREMzknOidCb3BmJywnXFx1MjEyQyc6J0JzY3InLCdcXHVEODM1XFx1REQwNSc6J0JmcicsJ1xcdUQ4MzVcXHVERDIwJzonY2ZyJywnXFx1RDgzNVxcdURDQjgnOidjc2NyJywnXFx1RDgzNVxcdURENTQnOidjb3BmJywnXFx1MjEyRCc6J0NmcicsJ1xcdUQ4MzVcXHVEQzlFJzonQ3NjcicsJ1xcdTIxMDInOidDb3BmJywnXFx1MDEwNyc6J2NhY3V0ZScsJ1xcdTAxMDYnOidDYWN1dGUnLCdcXHUwMTA5JzonY2NpcmMnLCdcXHUwMTA4JzonQ2NpcmMnLCdcXHUwMTBEJzonY2Nhcm9uJywnXFx1MDEwQyc6J0NjYXJvbicsJ1xcdTAxMEInOidjZG90JywnXFx1MDEwQSc6J0Nkb3QnLCdcXHhFNyc6J2NjZWRpbCcsJ1xceEM3JzonQ2NlZGlsJywnXFx1MjEwNSc6J2luY2FyZScsJ1xcdUQ4MzVcXHVERDIxJzonZGZyJywnXFx1MjE0Nic6J2RkJywnXFx1RDgzNVxcdURENTUnOidkb3BmJywnXFx1RDgzNVxcdURDQjknOidkc2NyJywnXFx1RDgzNVxcdURDOUYnOidEc2NyJywnXFx1RDgzNVxcdUREMDcnOidEZnInLCdcXHUyMTQ1JzonREQnLCdcXHVEODM1XFx1REQzQic6J0RvcGYnLCdcXHUwMTBGJzonZGNhcm9uJywnXFx1MDEwRSc6J0RjYXJvbicsJ1xcdTAxMTEnOidkc3Ryb2snLCdcXHUwMTEwJzonRHN0cm9rJywnXFx4RjAnOidldGgnLCdcXHhEMCc6J0VUSCcsJ1xcdTIxNDcnOidlZScsJ1xcdTIxMkYnOidlc2NyJywnXFx1RDgzNVxcdUREMjInOidlZnInLCdcXHVEODM1XFx1REQ1Nic6J2VvcGYnLCdcXHUyMTMwJzonRXNjcicsJ1xcdUQ4MzVcXHVERDA4JzonRWZyJywnXFx1RDgzNVxcdUREM0MnOidFb3BmJywnXFx4RTknOidlYWN1dGUnLCdcXHhDOSc6J0VhY3V0ZScsJ1xceEU4JzonZWdyYXZlJywnXFx4QzgnOidFZ3JhdmUnLCdcXHhFQSc6J2VjaXJjJywnXFx4Q0EnOidFY2lyYycsJ1xcdTAxMUInOidlY2Fyb24nLCdcXHUwMTFBJzonRWNhcm9uJywnXFx4RUInOidldW1sJywnXFx4Q0InOidFdW1sJywnXFx1MDExNyc6J2Vkb3QnLCdcXHUwMTE2JzonRWRvdCcsJ1xcdTAxMTknOidlb2dvbicsJ1xcdTAxMTgnOidFb2dvbicsJ1xcdTAxMTMnOidlbWFjcicsJ1xcdTAxMTInOidFbWFjcicsJ1xcdUQ4MzVcXHVERDIzJzonZmZyJywnXFx1RDgzNVxcdURENTcnOidmb3BmJywnXFx1RDgzNVxcdURDQkInOidmc2NyJywnXFx1RDgzNVxcdUREMDknOidGZnInLCdcXHVEODM1XFx1REQzRCc6J0ZvcGYnLCdcXHUyMTMxJzonRnNjcicsJ1xcdUZCMDAnOidmZmxpZycsJ1xcdUZCMDMnOidmZmlsaWcnLCdcXHVGQjA0JzonZmZsbGlnJywnXFx1RkIwMSc6J2ZpbGlnJywnZmonOidmamxpZycsJ1xcdUZCMDInOidmbGxpZycsJ1xcdTAxOTInOidmbm9mJywnXFx1MjEwQSc6J2dzY3InLCdcXHVEODM1XFx1REQ1OCc6J2dvcGYnLCdcXHVEODM1XFx1REQyNCc6J2dmcicsJ1xcdUQ4MzVcXHVEQ0EyJzonR3NjcicsJ1xcdUQ4MzVcXHVERDNFJzonR29wZicsJ1xcdUQ4MzVcXHVERDBBJzonR2ZyJywnXFx1MDFGNSc6J2dhY3V0ZScsJ1xcdTAxMUYnOidnYnJldmUnLCdcXHUwMTFFJzonR2JyZXZlJywnXFx1MDExRCc6J2djaXJjJywnXFx1MDExQyc6J0djaXJjJywnXFx1MDEyMSc6J2dkb3QnLCdcXHUwMTIwJzonR2RvdCcsJ1xcdTAxMjInOidHY2VkaWwnLCdcXHVEODM1XFx1REQyNSc6J2hmcicsJ1xcdTIxMEUnOidwbGFuY2toJywnXFx1RDgzNVxcdURDQkQnOidoc2NyJywnXFx1RDgzNVxcdURENTknOidob3BmJywnXFx1MjEwQic6J0hzY3InLCdcXHUyMTBDJzonSGZyJywnXFx1MjEwRCc6J0hvcGYnLCdcXHUwMTI1JzonaGNpcmMnLCdcXHUwMTI0JzonSGNpcmMnLCdcXHUyMTBGJzonaGJhcicsJ1xcdTAxMjcnOidoc3Ryb2snLCdcXHUwMTI2JzonSHN0cm9rJywnXFx1RDgzNVxcdURENUEnOidpb3BmJywnXFx1RDgzNVxcdUREMjYnOidpZnInLCdcXHVEODM1XFx1RENCRSc6J2lzY3InLCdcXHUyMTQ4JzonaWknLCdcXHVEODM1XFx1REQ0MCc6J0lvcGYnLCdcXHUyMTEwJzonSXNjcicsJ1xcdTIxMTEnOidJbScsJ1xceEVEJzonaWFjdXRlJywnXFx4Q0QnOidJYWN1dGUnLCdcXHhFQyc6J2lncmF2ZScsJ1xceENDJzonSWdyYXZlJywnXFx4RUUnOidpY2lyYycsJ1xceENFJzonSWNpcmMnLCdcXHhFRic6J2l1bWwnLCdcXHhDRic6J0l1bWwnLCdcXHUwMTI5JzonaXRpbGRlJywnXFx1MDEyOCc6J0l0aWxkZScsJ1xcdTAxMzAnOidJZG90JywnXFx1MDEyRic6J2lvZ29uJywnXFx1MDEyRSc6J0lvZ29uJywnXFx1MDEyQic6J2ltYWNyJywnXFx1MDEyQSc6J0ltYWNyJywnXFx1MDEzMyc6J2lqbGlnJywnXFx1MDEzMic6J0lKbGlnJywnXFx1MDEzMSc6J2ltYXRoJywnXFx1RDgzNVxcdURDQkYnOidqc2NyJywnXFx1RDgzNVxcdURENUInOidqb3BmJywnXFx1RDgzNVxcdUREMjcnOidqZnInLCdcXHVEODM1XFx1RENBNSc6J0pzY3InLCdcXHVEODM1XFx1REQwRCc6J0pmcicsJ1xcdUQ4MzVcXHVERDQxJzonSm9wZicsJ1xcdTAxMzUnOidqY2lyYycsJ1xcdTAxMzQnOidKY2lyYycsJ1xcdTAyMzcnOidqbWF0aCcsJ1xcdUQ4MzVcXHVERDVDJzona29wZicsJ1xcdUQ4MzVcXHVEQ0MwJzona3NjcicsJ1xcdUQ4MzVcXHVERDI4Jzona2ZyJywnXFx1RDgzNVxcdURDQTYnOidLc2NyJywnXFx1RDgzNVxcdURENDInOidLb3BmJywnXFx1RDgzNVxcdUREMEUnOidLZnInLCdcXHUwMTM3Jzona2NlZGlsJywnXFx1MDEzNic6J0tjZWRpbCcsJ1xcdUQ4MzVcXHVERDI5JzonbGZyJywnXFx1RDgzNVxcdURDQzEnOidsc2NyJywnXFx1MjExMyc6J2VsbCcsJ1xcdUQ4MzVcXHVERDVEJzonbG9wZicsJ1xcdTIxMTInOidMc2NyJywnXFx1RDgzNVxcdUREMEYnOidMZnInLCdcXHVEODM1XFx1REQ0Myc6J0xvcGYnLCdcXHUwMTNBJzonbGFjdXRlJywnXFx1MDEzOSc6J0xhY3V0ZScsJ1xcdTAxM0UnOidsY2Fyb24nLCdcXHUwMTNEJzonTGNhcm9uJywnXFx1MDEzQyc6J2xjZWRpbCcsJ1xcdTAxM0InOidMY2VkaWwnLCdcXHUwMTQyJzonbHN0cm9rJywnXFx1MDE0MSc6J0xzdHJvaycsJ1xcdTAxNDAnOidsbWlkb3QnLCdcXHUwMTNGJzonTG1pZG90JywnXFx1RDgzNVxcdUREMkEnOidtZnInLCdcXHVEODM1XFx1REQ1RSc6J21vcGYnLCdcXHVEODM1XFx1RENDMic6J21zY3InLCdcXHVEODM1XFx1REQxMCc6J01mcicsJ1xcdUQ4MzVcXHVERDQ0JzonTW9wZicsJ1xcdTIxMzMnOidNc2NyJywnXFx1RDgzNVxcdUREMkInOiduZnInLCdcXHVEODM1XFx1REQ1Ric6J25vcGYnLCdcXHVEODM1XFx1RENDMyc6J25zY3InLCdcXHUyMTE1JzonTm9wZicsJ1xcdUQ4MzVcXHVEQ0E5JzonTnNjcicsJ1xcdUQ4MzVcXHVERDExJzonTmZyJywnXFx1MDE0NCc6J25hY3V0ZScsJ1xcdTAxNDMnOidOYWN1dGUnLCdcXHUwMTQ4JzonbmNhcm9uJywnXFx1MDE0Nyc6J05jYXJvbicsJ1xceEYxJzonbnRpbGRlJywnXFx4RDEnOidOdGlsZGUnLCdcXHUwMTQ2JzonbmNlZGlsJywnXFx1MDE0NSc6J05jZWRpbCcsJ1xcdTIxMTYnOidudW1lcm8nLCdcXHUwMTRCJzonZW5nJywnXFx1MDE0QSc6J0VORycsJ1xcdUQ4MzVcXHVERDYwJzonb29wZicsJ1xcdUQ4MzVcXHVERDJDJzonb2ZyJywnXFx1MjEzNCc6J29zY3InLCdcXHVEODM1XFx1RENBQSc6J09zY3InLCdcXHVEODM1XFx1REQxMic6J09mcicsJ1xcdUQ4MzVcXHVERDQ2JzonT29wZicsJ1xceEJBJzonb3JkbScsJ1xceEYzJzonb2FjdXRlJywnXFx4RDMnOidPYWN1dGUnLCdcXHhGMic6J29ncmF2ZScsJ1xceEQyJzonT2dyYXZlJywnXFx4RjQnOidvY2lyYycsJ1xceEQ0JzonT2NpcmMnLCdcXHhGNic6J291bWwnLCdcXHhENic6J091bWwnLCdcXHUwMTUxJzonb2RibGFjJywnXFx1MDE1MCc6J09kYmxhYycsJ1xceEY1Jzonb3RpbGRlJywnXFx4RDUnOidPdGlsZGUnLCdcXHhGOCc6J29zbGFzaCcsJ1xceEQ4JzonT3NsYXNoJywnXFx1MDE0RCc6J29tYWNyJywnXFx1MDE0Qyc6J09tYWNyJywnXFx1MDE1Myc6J29lbGlnJywnXFx1MDE1Mic6J09FbGlnJywnXFx1RDgzNVxcdUREMkQnOidwZnInLCdcXHVEODM1XFx1RENDNSc6J3BzY3InLCdcXHVEODM1XFx1REQ2MSc6J3BvcGYnLCdcXHUyMTE5JzonUG9wZicsJ1xcdUQ4MzVcXHVERDEzJzonUGZyJywnXFx1RDgzNVxcdURDQUInOidQc2NyJywnXFx1RDgzNVxcdURENjInOidxb3BmJywnXFx1RDgzNVxcdUREMkUnOidxZnInLCdcXHVEODM1XFx1RENDNic6J3FzY3InLCdcXHVEODM1XFx1RENBQyc6J1FzY3InLCdcXHVEODM1XFx1REQxNCc6J1FmcicsJ1xcdTIxMUEnOidRb3BmJywnXFx1MDEzOCc6J2tncmVlbicsJ1xcdUQ4MzVcXHVERDJGJzoncmZyJywnXFx1RDgzNVxcdURENjMnOidyb3BmJywnXFx1RDgzNVxcdURDQzcnOidyc2NyJywnXFx1MjExQic6J1JzY3InLCdcXHUyMTFDJzonUmUnLCdcXHUyMTFEJzonUm9wZicsJ1xcdTAxNTUnOidyYWN1dGUnLCdcXHUwMTU0JzonUmFjdXRlJywnXFx1MDE1OSc6J3JjYXJvbicsJ1xcdTAxNTgnOidSY2Fyb24nLCdcXHUwMTU3JzoncmNlZGlsJywnXFx1MDE1Nic6J1JjZWRpbCcsJ1xcdUQ4MzVcXHVERDY0Jzonc29wZicsJ1xcdUQ4MzVcXHVEQ0M4Jzonc3NjcicsJ1xcdUQ4MzVcXHVERDMwJzonc2ZyJywnXFx1RDgzNVxcdURENEEnOidTb3BmJywnXFx1RDgzNVxcdUREMTYnOidTZnInLCdcXHVEODM1XFx1RENBRSc6J1NzY3InLCdcXHUyNEM4Jzonb1MnLCdcXHUwMTVCJzonc2FjdXRlJywnXFx1MDE1QSc6J1NhY3V0ZScsJ1xcdTAxNUQnOidzY2lyYycsJ1xcdTAxNUMnOidTY2lyYycsJ1xcdTAxNjEnOidzY2Fyb24nLCdcXHUwMTYwJzonU2Nhcm9uJywnXFx1MDE1Ric6J3NjZWRpbCcsJ1xcdTAxNUUnOidTY2VkaWwnLCdcXHhERic6J3N6bGlnJywnXFx1RDgzNVxcdUREMzEnOid0ZnInLCdcXHVEODM1XFx1RENDOSc6J3RzY3InLCdcXHVEODM1XFx1REQ2NSc6J3RvcGYnLCdcXHVEODM1XFx1RENBRic6J1RzY3InLCdcXHVEODM1XFx1REQxNyc6J1RmcicsJ1xcdUQ4MzVcXHVERDRCJzonVG9wZicsJ1xcdTAxNjUnOid0Y2Fyb24nLCdcXHUwMTY0JzonVGNhcm9uJywnXFx1MDE2Myc6J3RjZWRpbCcsJ1xcdTAxNjInOidUY2VkaWwnLCdcXHUyMTIyJzondHJhZGUnLCdcXHUwMTY3JzondHN0cm9rJywnXFx1MDE2Nic6J1RzdHJvaycsJ1xcdUQ4MzVcXHVEQ0NBJzondXNjcicsJ1xcdUQ4MzVcXHVERDY2JzondW9wZicsJ1xcdUQ4MzVcXHVERDMyJzondWZyJywnXFx1RDgzNVxcdURENEMnOidVb3BmJywnXFx1RDgzNVxcdUREMTgnOidVZnInLCdcXHVEODM1XFx1RENCMCc6J1VzY3InLCdcXHhGQSc6J3VhY3V0ZScsJ1xceERBJzonVWFjdXRlJywnXFx4RjknOid1Z3JhdmUnLCdcXHhEOSc6J1VncmF2ZScsJ1xcdTAxNkQnOid1YnJldmUnLCdcXHUwMTZDJzonVWJyZXZlJywnXFx4RkInOid1Y2lyYycsJ1xceERCJzonVWNpcmMnLCdcXHUwMTZGJzondXJpbmcnLCdcXHUwMTZFJzonVXJpbmcnLCdcXHhGQyc6J3V1bWwnLCdcXHhEQyc6J1V1bWwnLCdcXHUwMTcxJzondWRibGFjJywnXFx1MDE3MCc6J1VkYmxhYycsJ1xcdTAxNjknOid1dGlsZGUnLCdcXHUwMTY4JzonVXRpbGRlJywnXFx1MDE3Myc6J3VvZ29uJywnXFx1MDE3Mic6J1VvZ29uJywnXFx1MDE2Qic6J3VtYWNyJywnXFx1MDE2QSc6J1VtYWNyJywnXFx1RDgzNVxcdUREMzMnOid2ZnInLCdcXHVEODM1XFx1REQ2Nyc6J3ZvcGYnLCdcXHVEODM1XFx1RENDQic6J3ZzY3InLCdcXHVEODM1XFx1REQxOSc6J1ZmcicsJ1xcdUQ4MzVcXHVERDREJzonVm9wZicsJ1xcdUQ4MzVcXHVEQ0IxJzonVnNjcicsJ1xcdUQ4MzVcXHVERDY4Jzond29wZicsJ1xcdUQ4MzVcXHVEQ0NDJzond3NjcicsJ1xcdUQ4MzVcXHVERDM0Jzond2ZyJywnXFx1RDgzNVxcdURDQjInOidXc2NyJywnXFx1RDgzNVxcdURENEUnOidXb3BmJywnXFx1RDgzNVxcdUREMUEnOidXZnInLCdcXHUwMTc1Jzond2NpcmMnLCdcXHUwMTc0JzonV2NpcmMnLCdcXHVEODM1XFx1REQzNSc6J3hmcicsJ1xcdUQ4MzVcXHVEQ0NEJzoneHNjcicsJ1xcdUQ4MzVcXHVERDY5JzoneG9wZicsJ1xcdUQ4MzVcXHVERDRGJzonWG9wZicsJ1xcdUQ4MzVcXHVERDFCJzonWGZyJywnXFx1RDgzNVxcdURDQjMnOidYc2NyJywnXFx1RDgzNVxcdUREMzYnOid5ZnInLCdcXHVEODM1XFx1RENDRSc6J3lzY3InLCdcXHVEODM1XFx1REQ2QSc6J3lvcGYnLCdcXHVEODM1XFx1RENCNCc6J1lzY3InLCdcXHVEODM1XFx1REQxQyc6J1lmcicsJ1xcdUQ4MzVcXHVERDUwJzonWW9wZicsJ1xceEZEJzoneWFjdXRlJywnXFx4REQnOidZYWN1dGUnLCdcXHUwMTc3JzoneWNpcmMnLCdcXHUwMTc2JzonWWNpcmMnLCdcXHhGRic6J3l1bWwnLCdcXHUwMTc4JzonWXVtbCcsJ1xcdUQ4MzVcXHVEQ0NGJzonenNjcicsJ1xcdUQ4MzVcXHVERDM3JzonemZyJywnXFx1RDgzNVxcdURENkInOid6b3BmJywnXFx1MjEyOCc6J1pmcicsJ1xcdTIxMjQnOidab3BmJywnXFx1RDgzNVxcdURDQjUnOidac2NyJywnXFx1MDE3QSc6J3phY3V0ZScsJ1xcdTAxNzknOidaYWN1dGUnLCdcXHUwMTdFJzonemNhcm9uJywnXFx1MDE3RCc6J1pjYXJvbicsJ1xcdTAxN0MnOid6ZG90JywnXFx1MDE3Qic6J1pkb3QnLCdcXHUwMUI1JzonaW1wZWQnLCdcXHhGRSc6J3Rob3JuJywnXFx4REUnOidUSE9STicsJ1xcdTAxNDknOiduYXBvcycsJ1xcdTAzQjEnOidhbHBoYScsJ1xcdTAzOTEnOidBbHBoYScsJ1xcdTAzQjInOidiZXRhJywnXFx1MDM5Mic6J0JldGEnLCdcXHUwM0IzJzonZ2FtbWEnLCdcXHUwMzkzJzonR2FtbWEnLCdcXHUwM0I0JzonZGVsdGEnLCdcXHUwMzk0JzonRGVsdGEnLCdcXHUwM0I1JzonZXBzaScsJ1xcdTAzRjUnOidlcHNpdicsJ1xcdTAzOTUnOidFcHNpbG9uJywnXFx1MDNERCc6J2dhbW1hZCcsJ1xcdTAzREMnOidHYW1tYWQnLCdcXHUwM0I2JzonemV0YScsJ1xcdTAzOTYnOidaZXRhJywnXFx1MDNCNyc6J2V0YScsJ1xcdTAzOTcnOidFdGEnLCdcXHUwM0I4JzondGhldGEnLCdcXHUwM0QxJzondGhldGF2JywnXFx1MDM5OCc6J1RoZXRhJywnXFx1MDNCOSc6J2lvdGEnLCdcXHUwMzk5JzonSW90YScsJ1xcdTAzQkEnOidrYXBwYScsJ1xcdTAzRjAnOidrYXBwYXYnLCdcXHUwMzlBJzonS2FwcGEnLCdcXHUwM0JCJzonbGFtYmRhJywnXFx1MDM5Qic6J0xhbWJkYScsJ1xcdTAzQkMnOidtdScsJ1xceEI1JzonbWljcm8nLCdcXHUwMzlDJzonTXUnLCdcXHUwM0JEJzonbnUnLCdcXHUwMzlEJzonTnUnLCdcXHUwM0JFJzoneGknLCdcXHUwMzlFJzonWGknLCdcXHUwM0JGJzonb21pY3JvbicsJ1xcdTAzOUYnOidPbWljcm9uJywnXFx1MDNDMCc6J3BpJywnXFx1MDNENic6J3BpdicsJ1xcdTAzQTAnOidQaScsJ1xcdTAzQzEnOidyaG8nLCdcXHUwM0YxJzoncmhvdicsJ1xcdTAzQTEnOidSaG8nLCdcXHUwM0MzJzonc2lnbWEnLCdcXHUwM0EzJzonU2lnbWEnLCdcXHUwM0MyJzonc2lnbWFmJywnXFx1MDNDNCc6J3RhdScsJ1xcdTAzQTQnOidUYXUnLCdcXHUwM0M1JzondXBzaScsJ1xcdTAzQTUnOidVcHNpbG9uJywnXFx1MDNEMic6J1Vwc2knLCdcXHUwM0M2JzoncGhpJywnXFx1MDNENSc6J3BoaXYnLCdcXHUwM0E2JzonUGhpJywnXFx1MDNDNyc6J2NoaScsJ1xcdTAzQTcnOidDaGknLCdcXHUwM0M4JzoncHNpJywnXFx1MDNBOCc6J1BzaScsJ1xcdTAzQzknOidvbWVnYScsJ1xcdTAzQTknOidvaG0nLCdcXHUwNDMwJzonYWN5JywnXFx1MDQxMCc6J0FjeScsJ1xcdTA0MzEnOidiY3knLCdcXHUwNDExJzonQmN5JywnXFx1MDQzMic6J3ZjeScsJ1xcdTA0MTInOidWY3knLCdcXHUwNDMzJzonZ2N5JywnXFx1MDQxMyc6J0djeScsJ1xcdTA0NTMnOidnamN5JywnXFx1MDQwMyc6J0dKY3knLCdcXHUwNDM0JzonZGN5JywnXFx1MDQxNCc6J0RjeScsJ1xcdTA0NTInOidkamN5JywnXFx1MDQwMic6J0RKY3knLCdcXHUwNDM1JzonaWVjeScsJ1xcdTA0MTUnOidJRWN5JywnXFx1MDQ1MSc6J2lvY3knLCdcXHUwNDAxJzonSU9jeScsJ1xcdTA0NTQnOidqdWtjeScsJ1xcdTA0MDQnOidKdWtjeScsJ1xcdTA0MzYnOid6aGN5JywnXFx1MDQxNic6J1pIY3knLCdcXHUwNDM3JzonemN5JywnXFx1MDQxNyc6J1pjeScsJ1xcdTA0NTUnOidkc2N5JywnXFx1MDQwNSc6J0RTY3knLCdcXHUwNDM4JzonaWN5JywnXFx1MDQxOCc6J0ljeScsJ1xcdTA0NTYnOidpdWtjeScsJ1xcdTA0MDYnOidJdWtjeScsJ1xcdTA0NTcnOid5aWN5JywnXFx1MDQwNyc6J1lJY3knLCdcXHUwNDM5JzonamN5JywnXFx1MDQxOSc6J0pjeScsJ1xcdTA0NTgnOidqc2VyY3knLCdcXHUwNDA4JzonSnNlcmN5JywnXFx1MDQzQSc6J2tjeScsJ1xcdTA0MUEnOidLY3knLCdcXHUwNDVDJzona2pjeScsJ1xcdTA0MEMnOidLSmN5JywnXFx1MDQzQic6J2xjeScsJ1xcdTA0MUInOidMY3knLCdcXHUwNDU5JzonbGpjeScsJ1xcdTA0MDknOidMSmN5JywnXFx1MDQzQyc6J21jeScsJ1xcdTA0MUMnOidNY3knLCdcXHUwNDNEJzonbmN5JywnXFx1MDQxRCc6J05jeScsJ1xcdTA0NUEnOiduamN5JywnXFx1MDQwQSc6J05KY3knLCdcXHUwNDNFJzonb2N5JywnXFx1MDQxRSc6J09jeScsJ1xcdTA0M0YnOidwY3knLCdcXHUwNDFGJzonUGN5JywnXFx1MDQ0MCc6J3JjeScsJ1xcdTA0MjAnOidSY3knLCdcXHUwNDQxJzonc2N5JywnXFx1MDQyMSc6J1NjeScsJ1xcdTA0NDInOid0Y3knLCdcXHUwNDIyJzonVGN5JywnXFx1MDQ1Qic6J3RzaGN5JywnXFx1MDQwQic6J1RTSGN5JywnXFx1MDQ0Myc6J3VjeScsJ1xcdTA0MjMnOidVY3knLCdcXHUwNDVFJzondWJyY3knLCdcXHUwNDBFJzonVWJyY3knLCdcXHUwNDQ0JzonZmN5JywnXFx1MDQyNCc6J0ZjeScsJ1xcdTA0NDUnOidraGN5JywnXFx1MDQyNSc6J0tIY3knLCdcXHUwNDQ2JzondHNjeScsJ1xcdTA0MjYnOidUU2N5JywnXFx1MDQ0Nyc6J2NoY3knLCdcXHUwNDI3JzonQ0hjeScsJ1xcdTA0NUYnOidkemN5JywnXFx1MDQwRic6J0RaY3knLCdcXHUwNDQ4Jzonc2hjeScsJ1xcdTA0MjgnOidTSGN5JywnXFx1MDQ0OSc6J3NoY2hjeScsJ1xcdTA0MjknOidTSENIY3knLCdcXHUwNDRBJzonaGFyZGN5JywnXFx1MDQyQSc6J0hBUkRjeScsJ1xcdTA0NEInOid5Y3knLCdcXHUwNDJCJzonWWN5JywnXFx1MDQ0Qyc6J3NvZnRjeScsJ1xcdTA0MkMnOidTT0ZUY3knLCdcXHUwNDREJzonZWN5JywnXFx1MDQyRCc6J0VjeScsJ1xcdTA0NEUnOid5dWN5JywnXFx1MDQyRSc6J1lVY3knLCdcXHUwNDRGJzoneWFjeScsJ1xcdTA0MkYnOidZQWN5JywnXFx1MjEzNSc6J2FsZXBoJywnXFx1MjEzNic6J2JldGgnLCdcXHUyMTM3JzonZ2ltZWwnLCdcXHUyMTM4JzonZGFsZXRoJ307XG5cblx0dmFyIHJlZ2V4RXNjYXBlID0gL1tcIiYnPD5gXS9nO1xuXHR2YXIgZXNjYXBlTWFwID0ge1xuXHRcdCdcIic6ICcmcXVvdDsnLFxuXHRcdCcmJzogJyZhbXA7Jyxcblx0XHQnXFwnJzogJyYjeDI3OycsXG5cdFx0JzwnOiAnJmx0OycsXG5cdFx0Ly8gU2VlIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kczogaW4gSFRNTCwgdGhlXG5cdFx0Ly8gZm9sbG93aW5nIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdW5sZXNzIGl04oCZcyBwYXJ0IG9mIGEgdGFnIG9yIGFuXG5cdFx0Ly8gdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBXZeKAmXJlIG9ubHkgZXNjYXBpbmcgaXQgdG8gc3VwcG9ydCB0aG9zZVxuXHRcdC8vIHNpdHVhdGlvbnMsIGFuZCBmb3IgWE1MIHN1cHBvcnQuXG5cdFx0Jz4nOiAnJmd0OycsXG5cdFx0Ly8gSW4gSW50ZXJuZXQgRXhwbG9yZXIg4omkIDgsIHRoZSBiYWNrdGljayBjaGFyYWN0ZXIgY2FuIGJlIHVzZWRcblx0XHQvLyB0byBicmVhayBvdXQgb2YgKHVuKXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzIG9yIEhUTUwgY29tbWVudHMuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9odG1sNXNlYy5vcmcvIzEwMiwgaHR0cDovL2h0bWw1c2VjLm9yZy8jMTA4LCBhbmRcblx0XHQvLyBodHRwOi8vaHRtbDVzZWMub3JnLyMxMzMuXG5cdFx0J2AnOiAnJiN4NjA7J1xuXHR9O1xuXG5cdHZhciByZWdleEludmFsaWRFbnRpdHkgPSAvJiMoPzpbeFhdW15hLWZBLUYwLTldfFteMC05eFhdKS87XG5cdHZhciByZWdleEludmFsaWRSYXdDb2RlUG9pbnQgPSAvW1xcMC1cXHgwOFxceDBCXFx4MEUtXFx4MUZcXHg3Ri1cXHg5RlxcdUZERDAtXFx1RkRFRlxcdUZGRkVcXHVGRkZGXXxbXFx1RDgzRlxcdUQ4N0ZcXHVEOEJGXFx1RDhGRlxcdUQ5M0ZcXHVEOTdGXFx1RDlCRlxcdUQ5RkZcXHVEQTNGXFx1REE3RlxcdURBQkZcXHVEQUZGXFx1REIzRlxcdURCN0ZcXHVEQkJGXFx1REJGRl1bXFx1REZGRVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcblx0dmFyIHJlZ2V4RGVjb2RlID0gLyYoQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbHxEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3d8Q2xvY2t3aXNlQ29udG91ckludGVncmFsfE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyfE5vdFNxdWFyZVN1cGVyc2V0RXF1YWx8RGlhY3JpdGljYWxEb3VibGVBY3V0ZXxOb3RSaWdodFRyaWFuZ2xlRXF1YWx8Tm90U3VjY2VlZHNTbGFudEVxdWFsfE5vdFByZWNlZGVzU2xhbnRFcXVhbHxDbG9zZUN1cmx5RG91YmxlUXVvdGV8TmVnYXRpdmVWZXJ5VGhpblNwYWNlfERvdWJsZUNvbnRvdXJJbnRlZ3JhbHxGaWxsZWRWZXJ5U21hbGxTcXVhcmV8Q2FwaXRhbERpZmZlcmVudGlhbER8T3BlbkN1cmx5RG91YmxlUXVvdGV8RW1wdHlWZXJ5U21hbGxTcXVhcmV8TmVzdGVkR3JlYXRlckdyZWF0ZXJ8RG91YmxlTG9uZ1JpZ2h0QXJyb3d8Tm90TGVmdFRyaWFuZ2xlRXF1YWx8Tm90R3JlYXRlclNsYW50RXF1YWx8UmV2ZXJzZVVwRXF1aWxpYnJpdW18RG91YmxlTGVmdFJpZ2h0QXJyb3d8Tm90U3F1YXJlU3Vic2V0RXF1YWx8Tm90RG91YmxlVmVydGljYWxCYXJ8UmlnaHRBcnJvd0xlZnRBcnJvd3xOb3RHcmVhdGVyRnVsbEVxdWFsfE5vdFJpZ2h0VHJpYW5nbGVCYXJ8U3F1YXJlU3VwZXJzZXRFcXVhbHxEb3duTGVmdFJpZ2h0VmVjdG9yfERvdWJsZUxvbmdMZWZ0QXJyb3d8bGVmdHJpZ2h0c3F1aWdhcnJvd3xMZWZ0QXJyb3dSaWdodEFycm93fE5lZ2F0aXZlTWVkaXVtU3BhY2V8YmxhY2t0cmlhbmdsZXJpZ2h0fFJpZ2h0RG93blZlY3RvckJhcnxQcmVjZWRlc1NsYW50RXF1YWx8UmlnaHREb3VibGVCcmFja2V0fFN1Y2NlZWRzU2xhbnRFcXVhbHxOb3RMZWZ0VHJpYW5nbGVCYXJ8UmlnaHRUcmlhbmdsZUVxdWFsfFNxdWFyZUludGVyc2VjdGlvbnxSaWdodERvd25UZWVWZWN0b3J8UmV2ZXJzZUVxdWlsaWJyaXVtfE5lZ2F0aXZlVGhpY2tTcGFjZXxsb25nbGVmdHJpZ2h0YXJyb3d8TG9uZ2xlZnRyaWdodGFycm93fExvbmdMZWZ0UmlnaHRBcnJvd3xEb3duUmlnaHRUZWVWZWN0b3J8RG93blJpZ2h0VmVjdG9yQmFyfEdyZWF0ZXJTbGFudEVxdWFsfFNxdWFyZVN1YnNldEVxdWFsfExlZnREb3duVmVjdG9yQmFyfExlZnREb3VibGVCcmFja2V0fFZlcnRpY2FsU2VwYXJhdG9yfHJpZ2h0bGVmdGhhcnBvb25zfE5vdEdyZWF0ZXJHcmVhdGVyfE5vdFNxdWFyZVN1cGVyc2V0fGJsYWNrdHJpYW5nbGVsZWZ0fGJsYWNrdHJpYW5nbGVkb3dufE5lZ2F0aXZlVGhpblNwYWNlfExlZnREb3duVGVlVmVjdG9yfE5vdExlc3NTbGFudEVxdWFsfGxlZnRyaWdodGhhcnBvb25zfERvdWJsZVVwRG93bkFycm93fERvdWJsZVZlcnRpY2FsQmFyfExlZnRUcmlhbmdsZUVxdWFsfEZpbGxlZFNtYWxsU3F1YXJlfHR3b2hlYWRyaWdodGFycm93fE5vdE5lc3RlZExlc3NMZXNzfERvd25MZWZ0VGVlVmVjdG9yfERvd25MZWZ0VmVjdG9yQmFyfFJpZ2h0QW5nbGVCcmFja2V0fE5vdFRpbGRlRnVsbEVxdWFsfE5vdFJldmVyc2VFbGVtZW50fFJpZ2h0VXBEb3duVmVjdG9yfERpYWNyaXRpY2FsVGlsZGV8Tm90U3VjY2VlZHNUaWxkZXxjaXJjbGVhcnJvd3JpZ2h0fE5vdFByZWNlZGVzRXF1YWx8cmlnaHRoYXJwb29uZG93bnxEb3VibGVSaWdodEFycm93fE5vdFN1Y2NlZWRzRXF1YWx8Tm9uQnJlYWtpbmdTcGFjZXxOb3RSaWdodFRyaWFuZ2xlfExlc3NFcXVhbEdyZWF0ZXJ8UmlnaHRVcFRlZVZlY3RvcnxMZWZ0QW5nbGVCcmFja2V0fEdyZWF0ZXJGdWxsRXF1YWx8RG93bkFycm93VXBBcnJvd3xSaWdodFVwVmVjdG9yQmFyfHR3b2hlYWRsZWZ0YXJyb3d8R3JlYXRlckVxdWFsTGVzc3xkb3duaGFycG9vbnJpZ2h0fFJpZ2h0VHJpYW5nbGVCYXJ8bnRyaWFuZ2xlcmlnaHRlcXxOb3RTdXBlcnNldEVxdWFsfExlZnRVcERvd25WZWN0b3J8RGlhY3JpdGljYWxBY3V0ZXxyaWdodHJpZ2h0YXJyb3dzfHZhcnRyaWFuZ2xlcmlnaHR8VXBBcnJvd0Rvd25BcnJvd3xEaWFjcml0aWNhbEdyYXZlfFVuZGVyUGFyZW50aGVzaXN8RW1wdHlTbWFsbFNxdWFyZXxMZWZ0VXBWZWN0b3JCYXJ8bGVmdHJpZ2h0YXJyb3dzfERvd25SaWdodFZlY3Rvcnxkb3duaGFycG9vbmxlZnR8dHJpYW5nbGVyaWdodGVxfFNob3J0UmlnaHRBcnJvd3xPdmVyUGFyZW50aGVzaXN8RG91YmxlTGVmdEFycm93fERvdWJsZURvd25BcnJvd3xOb3RTcXVhcmVTdWJzZXR8YmlndHJpYW5nbGVkb3dufG50cmlhbmdsZWxlZnRlcXxVcHBlclJpZ2h0QXJyb3d8Y3VydmVhcnJvd3JpZ2h0fHZhcnRyaWFuZ2xlbGVmdHxOb3RMZWZ0VHJpYW5nbGV8bmxlZnRyaWdodGFycm93fExvd2VyUmlnaHRBcnJvd3xOb3RIdW1wRG93bkh1bXB8Tm90R3JlYXRlclRpbGRlfHJpZ2h0dGhyZWV0aW1lc3xMZWZ0VXBUZWVWZWN0b3J8Tm90R3JlYXRlckVxdWFsfHN0cmFpZ2h0ZXBzaWxvbnxMZWZ0VHJpYW5nbGVCYXJ8cmlnaHRzcXVpZ2Fycm93fENvbnRvdXJJbnRlZ3JhbHxyaWdodGxlZnRhcnJvd3N8Q2xvc2VDdXJseVF1b3RlfFJpZ2h0RG93blZlY3RvcnxMZWZ0UmlnaHRWZWN0b3J8bkxlZnRyaWdodGFycm93fGxlZnRoYXJwb29uZG93bnxjaXJjbGVhcnJvd2xlZnR8U3F1YXJlU3VwZXJzZXR8T3BlbkN1cmx5UXVvdGV8aG9va3JpZ2h0YXJyb3d8SG9yaXpvbnRhbExpbmV8RGlhY3JpdGljYWxEb3R8Tm90TGVzc0dyZWF0ZXJ8bnRyaWFuZ2xlcmlnaHR8RG91YmxlUmlnaHRUZWV8SW52aXNpYmxlQ29tbWF8SW52aXNpYmxlVGltZXN8TG93ZXJMZWZ0QXJyb3d8RG93bkxlZnRWZWN0b3J8Tm90U3Vic2V0RXF1YWx8Y3VydmVhcnJvd2xlZnR8dHJpYW5nbGVsZWZ0ZXF8Tm90VmVydGljYWxCYXJ8VGlsZGVGdWxsRXF1YWx8ZG93bmRvd25hcnJvd3N8Tm90R3JlYXRlckxlc3N8UmlnaHRUZWVWZWN0b3J8WmVyb1dpZHRoU3BhY2V8bG9vcGFycm93cmlnaHR8TG9uZ1JpZ2h0QXJyb3d8ZG91YmxlYmFyd2VkZ2V8U2hvcnRMZWZ0QXJyb3d8U2hvcnREb3duQXJyb3d8UmlnaHRWZWN0b3JCYXJ8R3JlYXRlckdyZWF0ZXJ8UmV2ZXJzZUVsZW1lbnR8cmlnaHRoYXJwb29udXB8TGVzc1NsYW50RXF1YWx8bGVmdHRocmVldGltZXN8dXBoYXJwb29ucmlnaHR8cmlnaHRhcnJvd3RhaWx8TGVmdERvd25WZWN0b3J8TG9uZ3JpZ2h0YXJyb3d8TmVzdGVkTGVzc0xlc3N8VXBwZXJMZWZ0QXJyb3d8bnNob3J0cGFyYWxsZWx8bGVmdGxlZnRhcnJvd3N8bGVmdHJpZ2h0YXJyb3d8TGVmdHJpZ2h0YXJyb3d8TGVmdFJpZ2h0QXJyb3d8bG9uZ3JpZ2h0YXJyb3d8dXBoYXJwb29ubGVmdHxSaWdodEFycm93QmFyfEFwcGx5RnVuY3Rpb258TGVmdFRlZVZlY3RvcnxsZWZ0YXJyb3d0YWlsfE5vdEVxdWFsVGlsZGV8dmFyc3Vic2V0bmVxcXx2YXJzdXBzZXRuZXFxfFJpZ2h0VGVlQXJyb3d8U3VjY2VlZHNFcXVhbHxTdWNjZWVkc1RpbGRlfExlZnRWZWN0b3JCYXJ8U3VwZXJzZXRFcXVhbHxob29rbGVmdGFycm93fERpZmZlcmVudGlhbER8VmVydGljYWxUaWxkZXxWZXJ5VGhpblNwYWNlfGJsYWNrdHJpYW5nbGV8YmlndHJpYW5nbGV1cHxMZXNzRnVsbEVxdWFsfGRpdmlkZW9udGltZXN8bGVmdGhhcnBvb251cHxVcEVxdWlsaWJyaXVtfG50cmlhbmdsZWxlZnR8UmlnaHRUcmlhbmdsZXxtZWFzdXJlZGFuZ2xlfHNob3J0cGFyYWxsZWx8bG9uZ2xlZnRhcnJvd3xMb25nbGVmdGFycm93fExvbmdMZWZ0QXJyb3d8RG91YmxlTGVmdFRlZXxQb2luY2FyZXBsYW5lfFByZWNlZGVzRXF1YWx8dHJpYW5nbGVyaWdodHxEb3VibGVVcEFycm93fFJpZ2h0VXBWZWN0b3J8ZmFsbGluZ2RvdHNlcXxsb29wYXJyb3dsZWZ0fFByZWNlZGVzVGlsZGV8Tm90VGlsZGVFcXVhbHxOb3RUaWxkZVRpbGRlfHNtYWxsc2V0bWludXN8UHJvcG9ydGlvbmFsfHRyaWFuZ2xlbGVmdHx0cmlhbmdsZWRvd258VW5kZXJCcmFja2V0fE5vdEh1bXBFcXVhbHxleHBvbmVudGlhbGV8RXhwb25lbnRpYWxFfE5vdExlc3NUaWxkZXxIaWxiZXJ0U3BhY2V8UmlnaHRDZWlsaW5nfGJsYWNrbG96ZW5nZXx2YXJzdXBzZXRuZXF8SHVtcERvd25IdW1wfEdyZWF0ZXJFcXVhbHxWZXJ0aWNhbExpbmV8TGVmdFRlZUFycm93fE5vdExlc3NFcXVhbHxEb3duVGVlQXJyb3d8TGVmdFRyaWFuZ2xlfHZhcnN1YnNldG5lcXxJbnRlcnNlY3Rpb258Tm90Q29uZ3J1ZW50fERvd25BcnJvd0JhcnxMZWZ0VXBWZWN0b3J8TGVmdEFycm93QmFyfHJpc2luZ2RvdHNlcXxHcmVhdGVyVGlsZGV8Um91bmRJbXBsaWVzfFNxdWFyZVN1YnNldHxTaG9ydFVwQXJyb3d8Tm90U3VwZXJzZXR8cXVhdGVybmlvbnN8cHJlY25hcHByb3h8YmFja2Vwc2lsb258cHJlY2N1cmx5ZXF8T3ZlckJyYWNrZXR8YmxhY2tzcXVhcmV8TWVkaXVtU3BhY2V8VmVydGljYWxCYXJ8Y2lyY2xlZGNpcmN8Y2lyY2xlZGRhc2h8Q2lyY2xlTWludXN8Q2lyY2xlVGltZXN8TGVzc0dyZWF0ZXJ8Y3VybHllcXByZWN8Y3VybHllcXN1Y2N8ZGlhbW9uZHN1aXR8VXBEb3duQXJyb3d8VXBkb3duYXJyb3d8UnVsZURlbGF5ZWR8UnJpZ2h0YXJyb3d8dXBkb3duYXJyb3d8UmlnaHRWZWN0b3J8blJpZ2h0YXJyb3d8bnJpZ2h0YXJyb3d8ZXFzbGFudGxlc3N8TGVmdENlaWxpbmd8RXF1aWxpYnJpdW18U21hbGxDaXJjbGV8ZXhwZWN0YXRpb258Tm90U3VjY2VlZHN8dGhpY2thcHByb3h8R3JlYXRlckxlc3N8U3F1YXJlVW5pb258Tm90UHJlY2VkZXN8Tm90TGVzc0xlc3N8c3RyYWlnaHRwaGl8c3VjY25hcHByb3h8c3VjY2N1cmx5ZXF8U3Vic2V0RXF1YWx8c3FzdXBzZXRlcXxQcm9wb3J0aW9ufExhcGxhY2V0cmZ8SW1hZ2luYXJ5SXxzdXBzZXRuZXFxfE5vdEdyZWF0ZXJ8Z3RyZXFxbGVzc3xOb3RFbGVtZW50fFRoaWNrU3BhY2V8VGlsZGVFcXVhbHxUaWxkZVRpbGRlfEZvdXJpZXJ0cmZ8cm1vdXN0YWNoZXxFcXVhbFRpbGRlfGVxc2xhbnRndHJ8VW5kZXJCcmFjZXxMZWZ0VmVjdG9yfFVwQXJyb3dCYXJ8bkxlZnRhcnJvd3xuc3Vic2V0ZXFxfHN1YnNldG5lcXF8bnN1cHNldGVxcXxubGVmdGFycm93fHN1Y2NhcHByb3h8bGVzc2FwcHJveHxVcFRlZUFycm93fHVwdXBhcnJvd3N8Y3VybHl3ZWRnZXxsZXNzZXFxZ3RyfHZhcmVwc2lsb258dmFybm90aGluZ3xSaWdodEZsb29yfGNvbXBsZW1lbnR8Q2lyY2xlUGx1c3xzcXN1YnNldGVxfExsZWZ0YXJyb3d8Y2lyY2xlZGFzdHxSaWdodEFycm93fFJpZ2h0YXJyb3d8cmlnaHRhcnJvd3xsbW91c3RhY2hlfEJlcm5vdWxsaXN8cHJlY2FwcHJveHxtYXBzdG9sZWZ0fG1hcHN0b2Rvd258bG9uZ21hcHN0b3xkb3RzcXVhcmV8ZG93bmFycm93fERvdWJsZURvdHxuc3Vic2V0ZXF8c3Vwc2V0bmVxfGxlZnRhcnJvd3xuc3Vwc2V0ZXF8c3Vic2V0bmVxfFRoaW5TcGFjZXxuZ2Vxc2xhbnR8c3Vic2V0ZXFxfEh1bXBFcXVhbHxOb3RTdWJzZXR8dHJpYW5nbGVxfE5vdEN1cENhcHxsZXNzZXFndHJ8aGVhcnRzdWl0fFRyaXBsZURvdHxMZWZ0YXJyb3d8Q29wcm9kdWN0fENvbmdydWVudHx2YXJwcm9wdG98Y29tcGxleGVzfGd2ZXJ0bmVxcXxMZWZ0QXJyb3d8TGVzc1RpbGRlfHN1cHNldGVxcXxNaW51c1BsdXN8Q2lyY2xlRG90fG5sZXFzbGFudHxOb3RFeGlzdHN8Z3RyZXFsZXNzfG5wYXJhbGxlbHxVbmlvblBsdXN8TGVmdEZsb29yfGNoZWNrbWFya3xDZW50ZXJEb3R8Y2VudGVyZG90fE1lbGxpbnRyZnxndHJhcHByb3h8Ymlnb3RpbWVzfE92ZXJCcmFjZXxzcGFkZXN1aXR8dGhlcmVmb3JlfHBpdGNoZm9ya3xyYXRpb25hbHN8UGx1c01pbnVzfEJhY2tzbGFzaHxUaGVyZWZvcmV8RG93bkJyZXZlfGJhY2tzaW1lcXxiYWNrcHJpbWV8RG93bkFycm93fG5zaG9ydG1pZHxEb3duYXJyb3d8bHZlcnRuZXFxfGVxdnBhcnNsfGltYWdsaW5lfGltYWdwYXJ0fGluZmludGllfGludGVnZXJzfEludGVncmFsfGludGVyY2FsfExlc3NMZXNzfFVhcnJvY2lyfGludGxhcmhrfHNxc3Vwc2V0fGFuZ21zZGFmfHNxc3Vic2V0fGxsY29ybmVyfHZhcnRoZXRhfGN1cGJyY2FwfGxuYXBwcm94fFN1cGVyc2V0fFN1Y2hUaGF0fHN1Y2Nuc2ltfHN1Y2NuZXFxfGFuZ21zZGFnfGJpZ3VwbHVzfGN1cmx5dmVlfHRycGV6aXVtfFN1Y2NlZWRzfE5vdFRpbGRlfGJpZ3dlZGdlfGFuZ21zZGFofGFuZ3J0dmJkfHRyaW1pbnVzfGN3Y29uaW50fGZwYXJ0aW50fGxyY29ybmVyfHNtZXBhcnNsfHN1YnNldGVxfHVyY29ybmVyfGx1cmRzaGFyfGxhZW1wdHl2fEREb3RyYWhkfGFwcHJveGVxfGxkcnVzaGFyfGF3Y29uaW50fG1hcHN0b3VwfGJhY2tjb25nfHNob3J0bWlkfHRyaWFuZ2xlfGdlcXNsYW50fGdlc2RvdG9sfHRpbWVzYmFyfGNpcmNsZWRSfGNpcmNsZWRTfHNldG1pbnVzfG11bHRpbWFwfG5hdHVyYWxzfHNjcG9saW50fG5jb25nZG90fFJpZ2h0VGVlfGJveG1pbnVzfGduYXBwcm94fGJveHRpbWVzfGFuZHNsb3BlfHRoaWNrc2ltfGFuZ21zZGFhfHZhcnNpZ21hfGNpcmZuaW50fHJ0cmlsdHJpfGFuZ21zZGFifHJwcG9saW50fGFuZ21zZGFjfGJhcndlZGdlfGRyYmthcm93fGNsdWJzdWl0fHRoZXRhc3ltfGJzb2xoc3VifGNhcGJyY3VwfGR6aWdyYXJyfGRvdGVxZG90fERvdEVxdWFsfGRvdG1pbnVzfFVuZGVyQmFyfE5vdEVxdWFsfHJlYWxwYXJ0fG90aW1lc2FzfHVsY29ybmVyfGhrc2Vhcm93fGhrc3dhcm93fHBhcmFsbGVsfFBhcnRpYWxEfGVsaW50ZXJzfGVtcHR5c2V0fHBsdXNhY2lyfGJicmt0YnJrfGFuZ21zZGFkfHBvaW50aW50fGJpZ29wbHVzfGFuZ21zZGFlfFByZWNlZGVzfGJpZ3NxY3VwfHZhcmthcHBhfG5vdGluZG90fHN1cHNldGVxfHByZWNuZXFxfHByZWNuc2ltfHByb2ZhbGFyfHByb2ZsaW5lfHByb2ZzdXJmfGxlcXNsYW50fGxlc2RvdG9yfHJhZW1wdHl2fHN1YnBsdXN8bm90bml2Ynxub3RuaXZjfHN1YnJhcnJ8emlncmFycnx2emlnemFnfHN1Ym11bHR8c3ViZWRvdHxFbGVtZW50fGJldHdlZW58Y2lyc2NpcnxsYXJyYmZzfGxhcnJzaW18bG90aW1lc3xsYnJrc2xkfGxicmtzbHV8bG96ZW5nZXxsZHJkaGFyfGRia2Fyb3d8YmlnY2lyY3xlcHNpbG9ufHNpbXJhcnJ8c2ltcGx1c3xsdHF1ZXN0fEVwc2lsb258bHVydWhhcnxndHF1ZXN0fG1hbHRlc2V8bnBvbGludHxlcWNvbG9ufG5wcmVjZXF8Ymlnb2RvdHxkZGFnZ2VyfGd0cmxlc3N8Ym5lcXVpdnxoYXJyY2lyfGRkb3RzZXF8ZXF1aXZERHxiYWNrc2ltfGRlbXB0eXZ8bnNxc3ViZXxuc3FzdXBlfFVwc2lsb258bnN1YnNldHx1cHNpbG9ufG1pbnVzZHV8bnN1Y2NlcXxzd2Fycm93fG5zdXBzZXR8Y29sb25lcXxzZWFycm93fGJveHBsdXN8bmFwcHJveHxuYXR1cmFsfGFzeW1wZXF8YWxlZnN5bXxjb25nZG90fG5lYXJyb3d8Ymlnc3RhcnxkaWFtb25kfHN1cHBsdXN8dHJpdGltZXxMZWZ0VGVlfG52aW5maW58dHJpcGx1c3xOZXdMaW5lfG52bHRyaWV8bnZydHJpZXxud2Fycm93fG5leGlzdHN8RGlhbW9uZHxydWx1aGFyfEltcGxpZXN8c3VwbXVsdHxhbmd6YXJyfHN1cGxhcnJ8c3VwaHN1YnxxdWVzdGVxfGJlY2F1c2V8ZGlnYW1tYXxCZWNhdXNlfG9sY3Jvc3N8YmVtcHR5dnxvbWljcm9ufE9taWNyb258cm90aW1lc3xOb0JyZWFrfGludHByb2R8YW5ncnR2YnxvcmRlcm9mfHV3YW5nbGV8c3VwaHNvbHxsZXNkb3RvfG9yc2xvcGV8RG93blRlZXxyZWFsaW5lfGN1ZGFycmx8cmRsZGhhcnxPdmVyQmFyfHN1cGVkb3R8bGVzc2RvdHxzdXBkc3VifHRvcGZvcmt8c3VjY3NpbXxyYnJrc2x1fHJicmtzbGR8cGVydGVua3xjdWRhcnJyfGlzaW5kb3R8cGxhbmNraHxsZXNzZ3RyfHBsdXNjaXJ8Z2VzZG90b3xwbHVzc2ltfHBsdXN0d298bGVzc3NpbXxjdWxhcnJwfHJhcnJzaW18Q2F5bGV5c3xub3RpbnZhfG5vdGludmJ8bm90aW52Y3xVcEFycm93fFVwYXJyb3d8dXBhcnJvd3xOb3RMZXNzfGR3YW5nbGV8cHJlY3NpbXxQcm9kdWN0fGN1cmFycm18Q2NvbmludHxkb3RwbHVzfHJhcnJiZnN8Y2N1cHNzbXxDZWRpbGxhfGNlbXB0eXZ8bm90bml2YXxxdWF0aW50fGZyYWMzNXxmcmFjMzh8ZnJhYzQ1fGZyYWM1NnxmcmFjNTh8ZnJhYzc4fHRyaWRvdHx4b3BsdXN8Z2FjdXRlfGdhbW1hZHxHYW1tYWR8bGZpc2h0fGxmbG9vcnxiaWdjdXB8c3FzdXBlfGdicmV2ZXxHYnJldmV8bGhhcnVsfHNxc3ViZXxzcWN1cHN8R2NlZGlsfGFwYWNpcnxsbGhhcmR8bG1pZG90fExtaWRvdHxsbW91c3R8YW5kYW5kfHNxY2Fwc3xhcHByb3h8QWJyZXZlfHNwYWRlc3xjaXJjZXF8dHByaW1lfGRpdmlkZXx0b3BjaXJ8QXNzaWdufHRvcGJvdHxnZXNkb3R8ZGl2b254fHh1cGx1c3x0aW1lc2R8Z2VzbGVzfGF0aWxkZXxzb2xiYXJ8U09GVGN5fGxvcGx1c3x0aW1lc2J8bG93YXN0fGxvd2JhcnxkbGNvcm58ZGxjcm9wfHNvZnRjeXxkb2xsYXJ8bHBhcmx0fHRoa3NpbXxscmhhcmR8QXRpbGRlfGxzYXF1b3xzbWFzaHB8YmlndmVlfHRoaW5zcHx3cmVhdGh8Ymthcm93fGxzcXVvcnxsc3Ryb2t8THN0cm9rfGx0aHJlZXxsdGltZXN8bHRsYXJyfERvdERvdHxzaW1kb3R8bHRyUGFyfHdlaWVycHx4c3FjdXB8YW5nbXNkfHNpZ21hdnxzaWdtYWZ8emVldHJmfFpjYXJvbnx6Y2Fyb258bWFwc3RvfHZzdXBuZXx0aGV0YXZ8Y2lybWlkfG1hcmtlcnxtY29tbWF8WmFjdXRlfHZzdWJuRXx0aGVyZTR8Z3RsUGFyfHZzdWJuZXxib3R0b218Z3RyYXJyfFNIQ0hjeXxzaGNoY3l8bWlkYXN0fG1pZGNpcnxtaWRkb3R8bWludXNifG1pbnVzZHxndHJkb3R8Ym93dGllfHNmcm93bnxtbnBsdXN8bW9kZWxzfGNvbG9uZXxzZXN3YXJ8Q29sb25lfG1zdHBvc3xzZWFyaGt8Z3Ryc2ltfG5hY3V0ZXxOYWN1dGV8Ym94Ym94fHRlbHJlY3xoYWlyc3B8VGNlZGlsfG5idW1wZXxzY25zaW18bmNhcm9ufE5jYXJvbnxuY2VkaWx8TmNlZGlsfGhhbWlsdHxTY2VkaWx8bmVhcmhrfGhhcmRjeXxIQVJEY3l8dGNlZGlsfFRjYXJvbnxjb21tYXR8bmVxdWl2fG5lc2Vhcnx0Y2Fyb258dGFyZ2V0fGhlYXJ0c3xuZXhpc3R8dmFycmhvfHNjZWRpbHxTY2Fyb258c2Nhcm9ufGhlbGxpcHxTYWN1dGV8c2FjdXRlfGhlcmNvbnxzd253YXJ8Y29tcGZufHJ0aW1lc3xydGhyZWV8cnNxdW9yfHJzYXF1b3x6YWN1dGV8d2VkZ2VxfGhvbXRodHxiYXJ2ZWV8YmFyd2VkfEJhcndlZHxycGFyZ3R8aG9yYmFyfGNvbmludHxzd2FyaGt8cm9wbHVzfG5sdHJpZXxoc2xhc2h8aHN0cm9rfEhzdHJva3xybW91c3R8Q29uaW50fGJwcmltZXxoeWJ1bGx8aHlwaGVufGlhY3V0ZXxJYWN1dGV8c3Vwc3VwfHN1cHN1YnxzdXBzaW18dmFycGhpfGNvcHJvZHxicnZiYXJ8YWdyYXZlfFN1cHNldHxzdXBzZXR8aWdyYXZlfElncmF2ZXxub3RpbkV8QWdyYXZlfGlpaWludHxpaW5maW58Y29weXNyfHdlZGJhcnxWZXJiYXJ8dmFuZ3J0fGJlY2F1c3xpbmNhcmV8dmVyYmFyfGlub2RvdHxidWxsZXR8ZHJjb3JufGludGNhbHxkcmNyb3B8Y3VsYXJyfHZlbGxpcHxVdGlsZGV8YnVtcGVxfGN1cGNhcHxkc3Ryb2t8RHN0cm9rfEN1cENhcHxjdXBjdXB8Y3VwZG90fGVhY3V0ZXxFYWN1dGV8c3VwZG90fGlxdWVzdHxlYXN0ZXJ8ZWNhcm9ufEVjYXJvbnxlY29sb258aXNpbnN2fHV0aWxkZXxpdGlsZGV8SXRpbGRlfGN1cmFycnxzdWNjZXF8QnVtcGVxfGNhY3V0ZXx1bGNyb3B8bnBhcnNsfENhY3V0ZXxucHJjdWV8ZWdyYXZlfEVncmF2ZXxucmFycmN8bnJhcnJ3fHN1YnN1cHxzdWJzdWJ8bnJ0cmllfGpzZXJjeXxuc2NjdWV8SnNlcmN5fGthcHBhdnxrY2VkaWx8S2NlZGlsfHN1YnNpbXx1bGNvcm58bnNpbWVxfGVnc2RvdHx2ZWViYXJ8a2dyZWVufGNhcGFuZHxlbHNkb3R8U3Vic2V0fHN1YnNldHxjdXJyZW58YWFjdXRlfGxhY3V0ZXxMYWN1dGV8ZW1wdHl2fG50aWxkZXxOdGlsZGV8bGFncmFufGxhbWJkYXxMYW1iZGF8Y2FwY2FwfFVncmF2ZXxsYW5nbGV8c3ViZG90fGVtc3AxM3xudW1lcm98ZW1zcDE0fG52ZGFzaHxudkRhc2h8blZkYXNofG5WRGFzaHx1Z3JhdmV8dWZpc2h0fG52SGFycnxsYXJyZnN8bnZsQXJyfGxhcnJoa3xsYXJybHB8bGFycnBsfG52ckFycnxVZGJsYWN8bndhcmhrfGxhcnJ0bHxud25lYXJ8b2FjdXRlfE9hY3V0ZXxsYXRhaWx8bEF0YWlsfHNzdGFyZnxsYnJhY2V8b2RibGFjfE9kYmxhY3xsYnJhY2t8dWRibGFjfG9kc29sZHxlcGFyc2x8bGNhcm9ufExjYXJvbnxvZ3JhdmV8T2dyYXZlfGxjZWRpbHxMY2VkaWx8QWFjdXRlfHNzbWlsZXxzc2V0bW58c3F1YXJmfGxkcXVvcnxjYXBjdXB8b21pbnVzfGN5bGN0eXxyaGFydWx8ZXFjaXJjfGRhZ2dlcnxyZmxvb3J8cmZpc2h0fERhZ2dlcnxkYWxldGh8ZXF1YWxzfG9yaWdvZnxjYXBkb3R8ZXF1ZXN0fGRjYXJvbnxEY2Fyb258cmRxdW9yfG9zbGFzaHxPc2xhc2h8b3RpbGRlfE90aWxkZXxvdGltZXN8T3RpbWVzfHVyY3JvcHxVYnJldmV8dWJyZXZlfFlhY3V0ZXxVYWN1dGV8dWFjdXRlfFJjZWRpbHxyY2VkaWx8dXJjb3JufHBhcnNpbXxSY2Fyb258VmRhc2hsfHJjYXJvbnxUc3Ryb2t8cGVyY250fHBlcmlvZHxwZXJtaWx8RXhpc3RzfHlhY3V0ZXxyYnJhY2t8cmJyYWNlfHBobW1hdHxjY2Fyb258Q2Nhcm9ufHBsYW5ja3xjY2VkaWx8cGxhbmt2fHRzdHJva3xmZW1hbGV8cGx1c2RvfHBsdXNkdXxmZmlsaWd8cGx1c21ufGZmbGxpZ3xDY2VkaWx8ckF0YWlsfGRmaXNodHxiZXJub3V8cmF0YWlsfFJhcnJ0bHxyYXJydGx8YW5nc3BofHJhcnJwbHxyYXJybHB8cmFycmhrfHh3ZWRnZXx4b3RpbWV8Zm9yYWxsfEZvckFsbHxWdmRhc2h8dnN1cG5FfHByZWNlcXxiaWdjYXB8ZnJhYzEyfGZyYWMxM3xmcmFjMTR8cHJpbWVzfHJhcnJmc3xwcm5zaW18ZnJhYzE1fFNxdWFyZXxmcmFjMTZ8c3F1YXJlfGxlc2RvdHxmcmFjMTh8ZnJhYzIzfHByb3B0b3xwcnVyZWx8cmFycmFwfHJhbmdsZXxwdW5jc3B8ZnJhYzI1fFJhY3V0ZXxxcHJpbWV8cmFjdXRlfGxlc2dlc3xmcmFjMzR8YWJyZXZlfEFFbGlnfGVxc2ltfHV0ZG90fHNldG1ufHVydHJpfEVxdWFsfFVyaW5nfHNlQXJyfHVyaW5nfHNlYXJyfGRhc2h2fERhc2h2fG11bWFwfG5hYmxhfGlvZ29ufElvZ29ufHNkb3RlfHNkb3RifHNjc2ltfG5hcGlkfG5hcG9zfGVxdWl2fG5hdHVyfEFjaXJjfGRibGFjfGVyYXJyfG5idW1wfGlwcm9kfGVyRG90fHVjaXJjfGF3aW50fGVzZG90fGFuZ3J0fG5jb25nfGlzaW5FfHNjbmFwfFNjaXJjfHNjaXJjfG5kYXNofGlzaW5zfFVicmN5fG5lYXJyfG5lQXJyfGlzaW52fG5lZG90fHVicmN5fGFjdXRlfFljaXJjfGl1a2N5fEl1a2N5fHh1dHJpfG5lc2ltfGNhcmV0fGpjaXJjfEpjaXJjfGNhcm9ufHR3aXh0fGRkYXJyfHNjY3VlfGV4aXN0fGptYXRofHNicXVvfG5nZXFxfGFuZ3N0fGNjYXBzfGxjZWlsfG5nc2ltfFVwVGVlfGRlbHRhfERlbHRhfHJ0cmlmfG5oYXJyfG5oQXJyfG5ocGFyfHJ0cmllfGp1a2N5fEp1a2N5fGthcHBhfHJzcXVvfEthcHBhfG5sYXJyfG5sQXJyfFRTSGN5fHJyYXJyfGFvZ29ufEFvZ29ufGZmbGlnfHhyYXJyfHRzaGN5fGNjaXJjfG5sZXFxfGZpbGlnfHVwc2lofG5sZXNzfGRoYXJsfG5sc2ltfGZqbGlnfHJvcGFyfG5sdHJpfGRoYXJyfHJvYnJrfHJvYXJyfGZsbGlnfGZsdG5zfHJvYW5nfHJubWlkfHN1Ym5FfHN1Ym5lfGxBYXJyfHRyaXNifENjaXJjfGFjaXJjfGNjdXBzfGJsYW5rfFZEYXNofGZvcmt2fFZkYXNofGxhbmdkfGNlZGlsfGJsazEyfGJsazE0fGxhcXVvfHN0cm5zfGRpYW1zfG5vdGlufHZEYXNofGxhcnJifGJsazM0fGJsb2NrfGRpc2lufHVwbHVzfHZkYXNofHZCYXJ2fGFlbGlnfHN0YXJmfFdlZGdlfGNoZWNrfHhyQXJyfGxhdGVzfGxiYXJyfGxCYXJyfG5vdG5pfGxiYnJrfGJjb25nfGZyYXNsfGxicmtlfGZyb3dufHZydHJpfHZwcm9wfHZuc3VwfGdhbW1hfEdhbW1hfHdlZGdlfHhvZG90fGJkcXVvfHNyYXJyfGRvdGVxfGxkcXVvfGJveGRsfGJveGRMfGdjaXJjfEdjaXJjfGJveERsfGJveERMfGJveGRyfGJveGRSfGJveERyfFRSQURFfHRyYWRlfHJsaGFyfGJveERSfHZuc3VifG5wYXJ0fHZsdHJpfHJsYXJyfGJveGhkfGJveGhEfG5wcmVjfGdlc2NjfG5yYXJyfG5yQXJyfGJveEhkfGJveEhEfGJveGh1fGJveGhVfG5ydHJpfGJveEh1fGNsdWJzfGJveEhVfHRpbWVzfGNvbG9ufENvbG9ufGdpbWVsfHhsQXJyfFRpbGRlfG5zaW1lfHRpbGRlfG5zbWlkfG5zcGFyfFRIT1JOfHRob3JufHhsYXJyfG5zdWJlfG5zdWJFfHRoa2FwfHhoQXJyfGNvbW1hfG5zdWNjfGJveHVsfGJveHVMfG5zdXBlfG5zdXBFfGduZXFxfGduc2ltfGJveFVsfGJveFVMfGdyYXZlfGJveHVyfGJveHVSfGJveFVyfGJveFVSfGxlc2NjfGFuZ2xlfGJlcHNpfGJveHZofHZhcnBpfGJveHZIfG51bXNwfFRoZXRhfGdzaW1lfGdzaW1sfHRoZXRhfGJveFZofGJveFZIfGJveHZsfGd0Y2lyfGd0ZG90fGJveHZMfGJveFZsfGJveFZMfGNyYXJyfGNyb3NzfENyb3NzfG52c2ltfGJveHZyfG53YXJyfG53QXJyfHNxc3VwfGR0ZG90fFVvZ29ufGxoYXJkfGxoYXJ1fGR0cmlmfG9jaXJjfE9jaXJjfGxoYmxrfGR1YXJyfG9kYXNofHNxc3VifEhhY2VrfHNxY3VwfGxsYXJyfGR1aGFyfG9lbGlnfE9FbGlnfG9mY2lyfGJveHZSfHVvZ29ufGxsdHJpfGJveFZyfGNzdWJlfHV1YXJyfG9oYmFyfGNzdXBlfGN0ZG90fG9sYXJyfG9sY2lyfGhhcnJ3fG9saW5lfHNxY2FwfG9tYWNyfE9tYWNyfG9tZWdhfE9tZWdhfGJveFZSfGFsZXBofGxuZXFxfGxuc2ltfGxvYW5nfGxvYXJyfHJoYXJ1fGxvYnJrfGhjaXJjfG9wZXJwfG9wbHVzfHJoYXJkfEhjaXJjfG9yYXJyfFVuaW9ufG9yZGVyfGVjaXJjfEVjaXJjfGN1ZXByfHN6bGlnfGN1ZXNjfGJyZXZlfHJlYWxzfGVERG90fEJyZXZlfGhvYXJyfGxvcGFyfHV0cmlmfHJkcXVvfFVtYWNyfHVtYWNyfGVmRG90fHN3QXJyfHVsdHJpfGFscGhhfHJjZWlsfG92YmFyfHN3YXJyfFdjaXJjfHdjaXJjfHNtdGVzfHNtaWxlfGJzZW1pfGxyYXJyfGFyaW5nfHBhcnNsfGxyaGFyfGJzaW1lfHVoYmxrfGxydHJpfGN1cG9yfEFyaW5nfHVoYXJyfHVoYXJsfHNsYXJyfHJicmtlfGJzb2xifGxzaW1lfHJiYnJrfFJCYXJyfGxzaW1nfHBob25lfHJCYXJyfHJiYXJyfGljaXJjfGxzcXVvfEljaXJjfGVtYWNyfEVtYWNyfHJhdGlvfHNpbW5lfHBsdXNifHNpbWxFfHNpbWdFfHNpbWVxfHBsdXNlfGx0Y2lyfGx0ZG90fGVtcHR5fHhoYXJyfHhkdHJpfGlleGNsfEFscGhhfGx0cmllfHJhcnJ3fHBvdW5kfGx0cmlmfHhjaXJjfGJ1bXBlfHByY3VlfGJ1bXBFfGFzeW1wfGFtYWNyfGN1dmVlfFNpZ21hfHNpZ21hfGlpaW50fHVkaGFyfGlpb3RhfGlqbGlnfElKbGlnfHN1cG5FfGltYWNyfEltYWNyfHByaW1lfFByaW1lfGltYWdlfHBybmFwfGVvZ29ufEVvZ29ufHJhcnJjfG1kYXNofG1ERG90fGN1d2VkfGltYXRofHN1cG5lfGltcGVkfEFtYWNyfHVkYXJyfHByc2ltfG1pY3JvfHJhcnJifGN3aW50fHJhcXVvfGluZmlufGVwbHVzfHJhbmdlfHJhbmdkfFVjaXJjfHJhZGljfG1pbnVzfGFtYWxnfHZlZWVxfHJBYXJyfGVwc2l2fHljaXJjfHF1ZXN0fHNoYXJwfHF1b3R8enduanxRc2NyfHJhY2V8cXNjcnxRb3BmfHFvcGZ8cWludHxyYW5nfFJhbmd8WnNjcnx6c2NyfFpvcGZ8em9wZnxyYXJyfHJBcnJ8UmFycnxQc2NyfHBzY3J8cHJvcHxwcm9kfHBybkV8cHJlY3xaSGN5fHpoY3l8cHJhcHxaZXRhfHpldGF8UG9wZnxwb3BmfFpkb3R8cGx1c3x6ZG90fFl1bWx8eXVtbHxwaGl2fFlVY3l8eXVjeXxZc2NyfHlzY3J8cGVycHxZb3BmfHlvcGZ8cGFydHxwYXJhfFlJY3l8T3VtbHxyY3VifHlpY3l8WUFjeXxyZGNhfG91bWx8b3NvbHxPc2NyfHJkc2h8eWFjeXxyZWFsfG9zY3J8eHZlZXxhbmRkfHJlY3R8YW5kdnxYc2NyfG9yb3J8b3JkbXxvcmRmfHhzY3J8YW5nZXxhb3BmfEFvcGZ8ckhhcnxYb3BmfG9wYXJ8T29wZnx4b3BmfHhuaXN8cmhvdnxvb3BmfG9taWR8eG1hcHxvaW50fGFwaWR8YXBvc3xvZ29ufGFzY3J8QXNjcnxvZG90fG9kaXZ8eGN1cHx4Y2FwfG9jaXJ8b2FzdHxudmx0fG52bGV8bnZndHxudmdlfG52YXB8V3Njcnx3c2NyfGF1bWx8bnRsZ3xudGdsfG5zdXB8bnN1Ynxuc2ltfE5zY3J8bnNjcnxuc2NlfFdvcGZ8cmluZ3xucHJlfHdvcGZ8bnBhcnxBdW1sfEJhcnZ8YmJya3xOb3BmfG5vcGZ8bm1pZHxuTHR2fGJldGF8cm9wZnxSb3BmfEJldGF8YmV0aHxubGVzfHJwYXJ8bmxlcXxibm90fGJOb3R8bmxkcnxOSmN5fHJzY3J8UnNjcnxWc2NyfHZzY3J8cnNxYnxuamN5fGJvcGZ8bmlzZHxCb3BmfHJ0cml8Vm9wZnxuR3R2fG5ndHJ8dm9wZnxib3hofGJveEh8Ym94dnxuZ2VzfG5nZXF8Ym94Vnxic2NyfHNjYXB8QnNjcnxic2ltfFZlcnR8dmVydHxic29sfGJ1bGx8YnVtcHxjYXBzfGNkb3R8bmN1cHxzY25FfG5jYXB8bmJzcHxuYXBFfENkb3R8Y2VudHxzZG90fFZiYXJ8bmFuZ3x2QmFyfGNoY3l8TXNjcnxtc2NyfHNlY3R8c2VtaXxDSGN5fE1vcGZ8bW9wZnxzZXh0fGNpcmN8Y2lyZXxtbGRyfG1sY3B8Y2lyRXxjb21wfHNoY3l8U0hjeXx2QXJyfHZhcnJ8Y29uZ3xjb3BmfENvcGZ8Y29weXxDT1BZfG1hbHR8bWFsZXxtYWNyfGx2bkV8Y3NjcnxsdHJpfHNpbWV8bHRjY3xzaW1nfENzY3J8c2ltbHxjc3VifFV1bWx8bHNxYnxsc2ltfHV1bWx8Y3N1cHxMc2NyfGxzY3J8dXRyaXxzbWlkfGxwYXJ8Y3Vwc3xzbXRlfGxvemZ8ZGFycnxMb3BmfFVzY3J8c29sYnxsb3BmfHNvcGZ8U29wZnxsbmVxfHVzY3J8c3BhcnxkQXJyfGxuYXB8RGFycnxkYXNofFNxcnR8TEpjeXxsamN5fGxIYXJ8ZEhhcnxVcHNpfHVwc2l8ZGlhbXxsZXNnfGRqY3l8REpjeXxsZXFxfGRvcGZ8RG9wZnxkc2NyfERzY3J8ZHNjeXxsZHNofGxkY2F8c3F1ZnxEU2N5fHNzY3J8U3Njcnxkc29sfGxjdWJ8bGF0ZXxzdGFyfFN0YXJ8VW9wZnxMYXJyfGxBcnJ8bGFycnx1b3BmfGR0cml8ZHpjeXxzdWJlfHN1YkV8TGFuZ3xsYW5nfEtzY3J8a3NjcnxLb3BmfGtvcGZ8S0pjeXxramN5fEtIY3l8a2hjeXxEWmN5fGVjaXJ8ZWRvdHxlRG90fEpzY3J8anNjcnxzdWNjfEpvcGZ8am9wZnxFZG90fHVIYXJ8ZW1zcHxlbnNwfEl1bWx8aXVtbHxlb3BmfGlzaW58SXNjcnxpc2NyfEVvcGZ8ZXBhcnxzdW5nfGVwc2l8ZXNjcnxzdXAxfHN1cDJ8c3VwM3xJb3RhfGlvdGF8c3VwZXxzdXBFfElvcGZ8aW9wZnxJT2N5fGlvY3l8RXNjcnxlc2ltfEVzaW18aW1vZnxVYXJyfFFVT1R8dUFycnx1YXJyfGV1bWx8SUVjeXxpZWN5fElkb3R8RXVtbHxldXJvfGV4Y2x8SHNjcnxoc2NyfEhvcGZ8aG9wZnxUU2N5fHRzY3l8VHNjcnxoYmFyfHRzY3J8ZmxhdHx0YnJrfGZub2Z8aEFycnxoYXJyfGhhbGZ8Zm9wZnxGb3BmfHRkb3R8Z3ZuRXxmb3JrfHRyaWV8Z3RjY3xmc2NyfEZzY3J8Z2RvdHxnc2ltfEdzY3J8Z3NjcnxHb3BmfGdvcGZ8Z25lcXxHZG90fHRvc2F8Z25hcHxUb3BmfHRvcGZ8Z2VxcXx0b2VhfEdKY3l8Z2pjeXx0aW50fGdlc2x8bWlkfFNmcnxnZ2d8dG9wfGdlc3xnbGF8Z2xFfGdsanxnZXF8Z25lfGdFbHxnZWx8Z25FfEdjeXxnY3l8Z2FwfFRmcnx0ZnJ8VGN5fHRjeXxIYXR8VGF1fEZmcnx0YXV8VGFifGhmcnxIZnJ8ZmZyfEZjeXxmY3l8aWN5fEljeXxpZmZ8RVRIfGV0aHxpZnJ8SWZyfEV0YXxldGF8aW50fEludHxTdXB8c3VwfHVjeXxVY3l8U3VtfHN1bXxqY3l8RU5HfHVmcnxVZnJ8ZW5nfEpjeXxqZnJ8ZWxzfGVsbHxlZ3N8RWZyfGVmcnxKZnJ8dW1sfGtjeXxLY3l8RWN5fGVjeXxrZnJ8S2ZyfGxhcHxTdWJ8c3VifGxhdHxsY3l8TGN5fGxlZ3xEb3R8ZG90fGxFZ3xsZXF8bGVzfHNxdXxkaXZ8ZGllfGxmcnxMZnJ8bGdFfERmcnxkZnJ8RGVsfGRlZ3xEY3l8ZGN5fGxuZXxsbkV8c29sfGxvenxzbXR8Q3VwfGxybXxjdXB8bHNofExzaHxzaW18c2h5fG1hcHxNYXB8bWN5fE1jeXxtZnJ8TWZyfG1ob3xnZnJ8R2ZyfHNmcnxjaXJ8Q2hpfGNoaXxuYXB8Q2ZyfHZjeXxWY3l8Y2ZyfFNjeXxzY3l8bmN5fE5jeXx2ZWV8VmVlfENhcHxjYXB8bmZyfHNjRXxzY2V8TmZyfG5nZXxuZ0V8bkdnfHZmcnxWZnJ8bmd0fGJvdHxuR3R8bmlzfG5pdnxSc2h8cnNofG5sZXxubEV8Ym5lfEJmcnxiZnJ8bkxsfG5sdHxuTHR8QmN5fGJjeXxub3R8Tm90fHJsbXx3ZnJ8V2ZyfG5wcnxuc2N8bnVtfG9jeXxhc3R8T2N5fG9mcnx4ZnJ8WGZyfE9mcnxvZ3R8b2htfGFwRXxvbHR8UmhvfGFwZXxyaG98UmZyfHJmcnxvcmR8UkVHfGFuZ3xyZWd8b3J2fEFuZHxhbmR8QU1QfFJjeXxhbXB8QWZyfHljeXxZY3l8eWVufHlmcnxZZnJ8cmN5fHBhcnxwY3l8UGN5fHBmcnxQZnJ8cGhpfFBoaXxhZnJ8QWN5fGFjeXx6Y3l8WmN5fHBpdnxhY0V8YWNkfHpmcnxaZnJ8cHJlfHByRXxwc2l8UHNpfHFmcnxRZnJ8endqfE9yfGdlfEdnfGd0fGdnfGVsfG9TfGx0fEx0fExUfFJlfGxnfGdsfGVnfG5lfEltfGl0fGxlfEREfHdwfHdyfG51fE51fGRkfGxFfFNjfHNjfHBpfFBpfGVlfGFmfGxsfExsfHJ4fGdFfHhpfHBtfFhpfGljfHByfFByfGlufG5pfG1wfG11fGFjfE11fG9yfGFwfEd0fEdUfGlpKTt8JihBYWN1dGV8QWdyYXZlfEF0aWxkZXxDY2VkaWx8RWFjdXRlfEVncmF2ZXxJYWN1dGV8SWdyYXZlfE50aWxkZXxPYWN1dGV8T2dyYXZlfE9zbGFzaHxPdGlsZGV8VWFjdXRlfFVncmF2ZXxZYWN1dGV8YWFjdXRlfGFncmF2ZXxhdGlsZGV8YnJ2YmFyfGNjZWRpbHxjdXJyZW58ZGl2aWRlfGVhY3V0ZXxlZ3JhdmV8ZnJhYzEyfGZyYWMxNHxmcmFjMzR8aWFjdXRlfGlncmF2ZXxpcXVlc3R8bWlkZG90fG50aWxkZXxvYWN1dGV8b2dyYXZlfG9zbGFzaHxvdGlsZGV8cGx1c21ufHVhY3V0ZXx1Z3JhdmV8eWFjdXRlfEFFbGlnfEFjaXJjfEFyaW5nfEVjaXJjfEljaXJjfE9jaXJjfFRIT1JOfFVjaXJjfGFjaXJjfGFjdXRlfGFlbGlnfGFyaW5nfGNlZGlsfGVjaXJjfGljaXJjfGlleGNsfGxhcXVvfG1pY3JvfG9jaXJjfHBvdW5kfHJhcXVvfHN6bGlnfHRob3JufHRpbWVzfHVjaXJjfEF1bWx8Q09QWXxFdW1sfEl1bWx8T3VtbHxRVU9UfFV1bWx8YXVtbHxjZW50fGNvcHl8ZXVtbHxpdW1sfG1hY3J8bmJzcHxvcmRmfG9yZG18b3VtbHxwYXJhfHF1b3R8c2VjdHxzdXAxfHN1cDJ8c3VwM3x1dW1sfHl1bWx8QU1QfEVUSHxSRUd8YW1wfGRlZ3xldGh8bm90fHJlZ3xzaHl8dW1sfHllbnxHVHxMVHxndHxsdCkoPyE7KShbPWEtekEtWjAtOV0/KXwmIyhbMC05XSspKDs/KXwmI1t4WF0oW2EtZkEtRjAtOV0rKSg7Pyl8JihbMC05YS16QS1aXSspL2c7XG5cdHZhciBkZWNvZGVNYXAgPSB7J2FhY3V0ZSc6J1xceEUxJywnQWFjdXRlJzonXFx4QzEnLCdhYnJldmUnOidcXHUwMTAzJywnQWJyZXZlJzonXFx1MDEwMicsJ2FjJzonXFx1MjIzRScsJ2FjZCc6J1xcdTIyM0YnLCdhY0UnOidcXHUyMjNFXFx1MDMzMycsJ2FjaXJjJzonXFx4RTInLCdBY2lyYyc6J1xceEMyJywnYWN1dGUnOidcXHhCNCcsJ2FjeSc6J1xcdTA0MzAnLCdBY3knOidcXHUwNDEwJywnYWVsaWcnOidcXHhFNicsJ0FFbGlnJzonXFx4QzYnLCdhZic6J1xcdTIwNjEnLCdhZnInOidcXHVEODM1XFx1REQxRScsJ0Fmcic6J1xcdUQ4MzVcXHVERDA0JywnYWdyYXZlJzonXFx4RTAnLCdBZ3JhdmUnOidcXHhDMCcsJ2FsZWZzeW0nOidcXHUyMTM1JywnYWxlcGgnOidcXHUyMTM1JywnYWxwaGEnOidcXHUwM0IxJywnQWxwaGEnOidcXHUwMzkxJywnYW1hY3InOidcXHUwMTAxJywnQW1hY3InOidcXHUwMTAwJywnYW1hbGcnOidcXHUyQTNGJywnYW1wJzonJicsJ0FNUCc6JyYnLCdhbmQnOidcXHUyMjI3JywnQW5kJzonXFx1MkE1MycsJ2FuZGFuZCc6J1xcdTJBNTUnLCdhbmRkJzonXFx1MkE1QycsJ2FuZHNsb3BlJzonXFx1MkE1OCcsJ2FuZHYnOidcXHUyQTVBJywnYW5nJzonXFx1MjIyMCcsJ2FuZ2UnOidcXHUyOUE0JywnYW5nbGUnOidcXHUyMjIwJywnYW5nbXNkJzonXFx1MjIyMScsJ2FuZ21zZGFhJzonXFx1MjlBOCcsJ2FuZ21zZGFiJzonXFx1MjlBOScsJ2FuZ21zZGFjJzonXFx1MjlBQScsJ2FuZ21zZGFkJzonXFx1MjlBQicsJ2FuZ21zZGFlJzonXFx1MjlBQycsJ2FuZ21zZGFmJzonXFx1MjlBRCcsJ2FuZ21zZGFnJzonXFx1MjlBRScsJ2FuZ21zZGFoJzonXFx1MjlBRicsJ2FuZ3J0JzonXFx1MjIxRicsJ2FuZ3J0dmInOidcXHUyMkJFJywnYW5ncnR2YmQnOidcXHUyOTlEJywnYW5nc3BoJzonXFx1MjIyMicsJ2FuZ3N0JzonXFx4QzUnLCdhbmd6YXJyJzonXFx1MjM3QycsJ2FvZ29uJzonXFx1MDEwNScsJ0FvZ29uJzonXFx1MDEwNCcsJ2FvcGYnOidcXHVEODM1XFx1REQ1MicsJ0FvcGYnOidcXHVEODM1XFx1REQzOCcsJ2FwJzonXFx1MjI0OCcsJ2FwYWNpcic6J1xcdTJBNkYnLCdhcGUnOidcXHUyMjRBJywnYXBFJzonXFx1MkE3MCcsJ2FwaWQnOidcXHUyMjRCJywnYXBvcyc6J1xcJycsJ0FwcGx5RnVuY3Rpb24nOidcXHUyMDYxJywnYXBwcm94JzonXFx1MjI0OCcsJ2FwcHJveGVxJzonXFx1MjI0QScsJ2FyaW5nJzonXFx4RTUnLCdBcmluZyc6J1xceEM1JywnYXNjcic6J1xcdUQ4MzVcXHVEQ0I2JywnQXNjcic6J1xcdUQ4MzVcXHVEQzlDJywnQXNzaWduJzonXFx1MjI1NCcsJ2FzdCc6JyonLCdhc3ltcCc6J1xcdTIyNDgnLCdhc3ltcGVxJzonXFx1MjI0RCcsJ2F0aWxkZSc6J1xceEUzJywnQXRpbGRlJzonXFx4QzMnLCdhdW1sJzonXFx4RTQnLCdBdW1sJzonXFx4QzQnLCdhd2NvbmludCc6J1xcdTIyMzMnLCdhd2ludCc6J1xcdTJBMTEnLCdiYWNrY29uZyc6J1xcdTIyNEMnLCdiYWNrZXBzaWxvbic6J1xcdTAzRjYnLCdiYWNrcHJpbWUnOidcXHUyMDM1JywnYmFja3NpbSc6J1xcdTIyM0QnLCdiYWNrc2ltZXEnOidcXHUyMkNEJywnQmFja3NsYXNoJzonXFx1MjIxNicsJ0JhcnYnOidcXHUyQUU3JywnYmFydmVlJzonXFx1MjJCRCcsJ2JhcndlZCc6J1xcdTIzMDUnLCdCYXJ3ZWQnOidcXHUyMzA2JywnYmFyd2VkZ2UnOidcXHUyMzA1JywnYmJyayc6J1xcdTIzQjUnLCdiYnJrdGJyayc6J1xcdTIzQjYnLCdiY29uZyc6J1xcdTIyNEMnLCdiY3knOidcXHUwNDMxJywnQmN5JzonXFx1MDQxMScsJ2JkcXVvJzonXFx1MjAxRScsJ2JlY2F1cyc6J1xcdTIyMzUnLCdiZWNhdXNlJzonXFx1MjIzNScsJ0JlY2F1c2UnOidcXHUyMjM1JywnYmVtcHR5dic6J1xcdTI5QjAnLCdiZXBzaSc6J1xcdTAzRjYnLCdiZXJub3UnOidcXHUyMTJDJywnQmVybm91bGxpcyc6J1xcdTIxMkMnLCdiZXRhJzonXFx1MDNCMicsJ0JldGEnOidcXHUwMzkyJywnYmV0aCc6J1xcdTIxMzYnLCdiZXR3ZWVuJzonXFx1MjI2QycsJ2Jmcic6J1xcdUQ4MzVcXHVERDFGJywnQmZyJzonXFx1RDgzNVxcdUREMDUnLCdiaWdjYXAnOidcXHUyMkMyJywnYmlnY2lyYyc6J1xcdTI1RUYnLCdiaWdjdXAnOidcXHUyMkMzJywnYmlnb2RvdCc6J1xcdTJBMDAnLCdiaWdvcGx1cyc6J1xcdTJBMDEnLCdiaWdvdGltZXMnOidcXHUyQTAyJywnYmlnc3FjdXAnOidcXHUyQTA2JywnYmlnc3Rhcic6J1xcdTI2MDUnLCdiaWd0cmlhbmdsZWRvd24nOidcXHUyNUJEJywnYmlndHJpYW5nbGV1cCc6J1xcdTI1QjMnLCdiaWd1cGx1cyc6J1xcdTJBMDQnLCdiaWd2ZWUnOidcXHUyMkMxJywnYmlnd2VkZ2UnOidcXHUyMkMwJywnYmthcm93JzonXFx1MjkwRCcsJ2JsYWNrbG96ZW5nZSc6J1xcdTI5RUInLCdibGFja3NxdWFyZSc6J1xcdTI1QUEnLCdibGFja3RyaWFuZ2xlJzonXFx1MjVCNCcsJ2JsYWNrdHJpYW5nbGVkb3duJzonXFx1MjVCRScsJ2JsYWNrdHJpYW5nbGVsZWZ0JzonXFx1MjVDMicsJ2JsYWNrdHJpYW5nbGVyaWdodCc6J1xcdTI1QjgnLCdibGFuayc6J1xcdTI0MjMnLCdibGsxMic6J1xcdTI1OTInLCdibGsxNCc6J1xcdTI1OTEnLCdibGszNCc6J1xcdTI1OTMnLCdibG9jayc6J1xcdTI1ODgnLCdibmUnOic9XFx1MjBFNScsJ2JuZXF1aXYnOidcXHUyMjYxXFx1MjBFNScsJ2Jub3QnOidcXHUyMzEwJywnYk5vdCc6J1xcdTJBRUQnLCdib3BmJzonXFx1RDgzNVxcdURENTMnLCdCb3BmJzonXFx1RDgzNVxcdUREMzknLCdib3QnOidcXHUyMkE1JywnYm90dG9tJzonXFx1MjJBNScsJ2Jvd3RpZSc6J1xcdTIyQzgnLCdib3hib3gnOidcXHUyOUM5JywnYm94ZGwnOidcXHUyNTEwJywnYm94ZEwnOidcXHUyNTU1JywnYm94RGwnOidcXHUyNTU2JywnYm94REwnOidcXHUyNTU3JywnYm94ZHInOidcXHUyNTBDJywnYm94ZFInOidcXHUyNTUyJywnYm94RHInOidcXHUyNTUzJywnYm94RFInOidcXHUyNTU0JywnYm94aCc6J1xcdTI1MDAnLCdib3hIJzonXFx1MjU1MCcsJ2JveGhkJzonXFx1MjUyQycsJ2JveGhEJzonXFx1MjU2NScsJ2JveEhkJzonXFx1MjU2NCcsJ2JveEhEJzonXFx1MjU2NicsJ2JveGh1JzonXFx1MjUzNCcsJ2JveGhVJzonXFx1MjU2OCcsJ2JveEh1JzonXFx1MjU2NycsJ2JveEhVJzonXFx1MjU2OScsJ2JveG1pbnVzJzonXFx1MjI5RicsJ2JveHBsdXMnOidcXHUyMjlFJywnYm94dGltZXMnOidcXHUyMkEwJywnYm94dWwnOidcXHUyNTE4JywnYm94dUwnOidcXHUyNTVCJywnYm94VWwnOidcXHUyNTVDJywnYm94VUwnOidcXHUyNTVEJywnYm94dXInOidcXHUyNTE0JywnYm94dVInOidcXHUyNTU4JywnYm94VXInOidcXHUyNTU5JywnYm94VVInOidcXHUyNTVBJywnYm94dic6J1xcdTI1MDInLCdib3hWJzonXFx1MjU1MScsJ2JveHZoJzonXFx1MjUzQycsJ2JveHZIJzonXFx1MjU2QScsJ2JveFZoJzonXFx1MjU2QicsJ2JveFZIJzonXFx1MjU2QycsJ2JveHZsJzonXFx1MjUyNCcsJ2JveHZMJzonXFx1MjU2MScsJ2JveFZsJzonXFx1MjU2MicsJ2JveFZMJzonXFx1MjU2MycsJ2JveHZyJzonXFx1MjUxQycsJ2JveHZSJzonXFx1MjU1RScsJ2JveFZyJzonXFx1MjU1RicsJ2JveFZSJzonXFx1MjU2MCcsJ2JwcmltZSc6J1xcdTIwMzUnLCdicmV2ZSc6J1xcdTAyRDgnLCdCcmV2ZSc6J1xcdTAyRDgnLCdicnZiYXInOidcXHhBNicsJ2JzY3InOidcXHVEODM1XFx1RENCNycsJ0JzY3InOidcXHUyMTJDJywnYnNlbWknOidcXHUyMDRGJywnYnNpbSc6J1xcdTIyM0QnLCdic2ltZSc6J1xcdTIyQ0QnLCdic29sJzonXFxcXCcsJ2Jzb2xiJzonXFx1MjlDNScsJ2Jzb2xoc3ViJzonXFx1MjdDOCcsJ2J1bGwnOidcXHUyMDIyJywnYnVsbGV0JzonXFx1MjAyMicsJ2J1bXAnOidcXHUyMjRFJywnYnVtcGUnOidcXHUyMjRGJywnYnVtcEUnOidcXHUyQUFFJywnYnVtcGVxJzonXFx1MjI0RicsJ0J1bXBlcSc6J1xcdTIyNEUnLCdjYWN1dGUnOidcXHUwMTA3JywnQ2FjdXRlJzonXFx1MDEwNicsJ2NhcCc6J1xcdTIyMjknLCdDYXAnOidcXHUyMkQyJywnY2FwYW5kJzonXFx1MkE0NCcsJ2NhcGJyY3VwJzonXFx1MkE0OScsJ2NhcGNhcCc6J1xcdTJBNEInLCdjYXBjdXAnOidcXHUyQTQ3JywnY2FwZG90JzonXFx1MkE0MCcsJ0NhcGl0YWxEaWZmZXJlbnRpYWxEJzonXFx1MjE0NScsJ2NhcHMnOidcXHUyMjI5XFx1RkUwMCcsJ2NhcmV0JzonXFx1MjA0MScsJ2Nhcm9uJzonXFx1MDJDNycsJ0NheWxleXMnOidcXHUyMTJEJywnY2NhcHMnOidcXHUyQTREJywnY2Nhcm9uJzonXFx1MDEwRCcsJ0NjYXJvbic6J1xcdTAxMEMnLCdjY2VkaWwnOidcXHhFNycsJ0NjZWRpbCc6J1xceEM3JywnY2NpcmMnOidcXHUwMTA5JywnQ2NpcmMnOidcXHUwMTA4JywnQ2NvbmludCc6J1xcdTIyMzAnLCdjY3Vwcyc6J1xcdTJBNEMnLCdjY3Vwc3NtJzonXFx1MkE1MCcsJ2Nkb3QnOidcXHUwMTBCJywnQ2RvdCc6J1xcdTAxMEEnLCdjZWRpbCc6J1xceEI4JywnQ2VkaWxsYSc6J1xceEI4JywnY2VtcHR5dic6J1xcdTI5QjInLCdjZW50JzonXFx4QTInLCdjZW50ZXJkb3QnOidcXHhCNycsJ0NlbnRlckRvdCc6J1xceEI3JywnY2ZyJzonXFx1RDgzNVxcdUREMjAnLCdDZnInOidcXHUyMTJEJywnY2hjeSc6J1xcdTA0NDcnLCdDSGN5JzonXFx1MDQyNycsJ2NoZWNrJzonXFx1MjcxMycsJ2NoZWNrbWFyayc6J1xcdTI3MTMnLCdjaGknOidcXHUwM0M3JywnQ2hpJzonXFx1MDNBNycsJ2Npcic6J1xcdTI1Q0InLCdjaXJjJzonXFx1MDJDNicsJ2NpcmNlcSc6J1xcdTIyNTcnLCdjaXJjbGVhcnJvd2xlZnQnOidcXHUyMUJBJywnY2lyY2xlYXJyb3dyaWdodCc6J1xcdTIxQkInLCdjaXJjbGVkYXN0JzonXFx1MjI5QicsJ2NpcmNsZWRjaXJjJzonXFx1MjI5QScsJ2NpcmNsZWRkYXNoJzonXFx1MjI5RCcsJ0NpcmNsZURvdCc6J1xcdTIyOTknLCdjaXJjbGVkUic6J1xceEFFJywnY2lyY2xlZFMnOidcXHUyNEM4JywnQ2lyY2xlTWludXMnOidcXHUyMjk2JywnQ2lyY2xlUGx1cyc6J1xcdTIyOTUnLCdDaXJjbGVUaW1lcyc6J1xcdTIyOTcnLCdjaXJlJzonXFx1MjI1NycsJ2NpckUnOidcXHUyOUMzJywnY2lyZm5pbnQnOidcXHUyQTEwJywnY2lybWlkJzonXFx1MkFFRicsJ2NpcnNjaXInOidcXHUyOUMyJywnQ2xvY2t3aXNlQ29udG91ckludGVncmFsJzonXFx1MjIzMicsJ0Nsb3NlQ3VybHlEb3VibGVRdW90ZSc6J1xcdTIwMUQnLCdDbG9zZUN1cmx5UXVvdGUnOidcXHUyMDE5JywnY2x1YnMnOidcXHUyNjYzJywnY2x1YnN1aXQnOidcXHUyNjYzJywnY29sb24nOic6JywnQ29sb24nOidcXHUyMjM3JywnY29sb25lJzonXFx1MjI1NCcsJ0NvbG9uZSc6J1xcdTJBNzQnLCdjb2xvbmVxJzonXFx1MjI1NCcsJ2NvbW1hJzonLCcsJ2NvbW1hdCc6J0AnLCdjb21wJzonXFx1MjIwMScsJ2NvbXBmbic6J1xcdTIyMTgnLCdjb21wbGVtZW50JzonXFx1MjIwMScsJ2NvbXBsZXhlcyc6J1xcdTIxMDInLCdjb25nJzonXFx1MjI0NScsJ2Nvbmdkb3QnOidcXHUyQTZEJywnQ29uZ3J1ZW50JzonXFx1MjI2MScsJ2NvbmludCc6J1xcdTIyMkUnLCdDb25pbnQnOidcXHUyMjJGJywnQ29udG91ckludGVncmFsJzonXFx1MjIyRScsJ2NvcGYnOidcXHVEODM1XFx1REQ1NCcsJ0NvcGYnOidcXHUyMTAyJywnY29wcm9kJzonXFx1MjIxMCcsJ0NvcHJvZHVjdCc6J1xcdTIyMTAnLCdjb3B5JzonXFx4QTknLCdDT1BZJzonXFx4QTknLCdjb3B5c3InOidcXHUyMTE3JywnQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMzMnLCdjcmFycic6J1xcdTIxQjUnLCdjcm9zcyc6J1xcdTI3MTcnLCdDcm9zcyc6J1xcdTJBMkYnLCdjc2NyJzonXFx1RDgzNVxcdURDQjgnLCdDc2NyJzonXFx1RDgzNVxcdURDOUUnLCdjc3ViJzonXFx1MkFDRicsJ2NzdWJlJzonXFx1MkFEMScsJ2NzdXAnOidcXHUyQUQwJywnY3N1cGUnOidcXHUyQUQyJywnY3Rkb3QnOidcXHUyMkVGJywnY3VkYXJybCc6J1xcdTI5MzgnLCdjdWRhcnJyJzonXFx1MjkzNScsJ2N1ZXByJzonXFx1MjJERScsJ2N1ZXNjJzonXFx1MjJERicsJ2N1bGFycic6J1xcdTIxQjYnLCdjdWxhcnJwJzonXFx1MjkzRCcsJ2N1cCc6J1xcdTIyMkEnLCdDdXAnOidcXHUyMkQzJywnY3VwYnJjYXAnOidcXHUyQTQ4JywnY3VwY2FwJzonXFx1MkE0NicsJ0N1cENhcCc6J1xcdTIyNEQnLCdjdXBjdXAnOidcXHUyQTRBJywnY3VwZG90JzonXFx1MjI4RCcsJ2N1cG9yJzonXFx1MkE0NScsJ2N1cHMnOidcXHUyMjJBXFx1RkUwMCcsJ2N1cmFycic6J1xcdTIxQjcnLCdjdXJhcnJtJzonXFx1MjkzQycsJ2N1cmx5ZXFwcmVjJzonXFx1MjJERScsJ2N1cmx5ZXFzdWNjJzonXFx1MjJERicsJ2N1cmx5dmVlJzonXFx1MjJDRScsJ2N1cmx5d2VkZ2UnOidcXHUyMkNGJywnY3VycmVuJzonXFx4QTQnLCdjdXJ2ZWFycm93bGVmdCc6J1xcdTIxQjYnLCdjdXJ2ZWFycm93cmlnaHQnOidcXHUyMUI3JywnY3V2ZWUnOidcXHUyMkNFJywnY3V3ZWQnOidcXHUyMkNGJywnY3djb25pbnQnOidcXHUyMjMyJywnY3dpbnQnOidcXHUyMjMxJywnY3lsY3R5JzonXFx1MjMyRCcsJ2RhZ2dlcic6J1xcdTIwMjAnLCdEYWdnZXInOidcXHUyMDIxJywnZGFsZXRoJzonXFx1MjEzOCcsJ2RhcnInOidcXHUyMTkzJywnZEFycic6J1xcdTIxRDMnLCdEYXJyJzonXFx1MjFBMScsJ2Rhc2gnOidcXHUyMDEwJywnZGFzaHYnOidcXHUyMkEzJywnRGFzaHYnOidcXHUyQUU0JywnZGJrYXJvdyc6J1xcdTI5MEYnLCdkYmxhYyc6J1xcdTAyREQnLCdkY2Fyb24nOidcXHUwMTBGJywnRGNhcm9uJzonXFx1MDEwRScsJ2RjeSc6J1xcdTA0MzQnLCdEY3knOidcXHUwNDE0JywnZGQnOidcXHUyMTQ2JywnREQnOidcXHUyMTQ1JywnZGRhZ2dlcic6J1xcdTIwMjEnLCdkZGFycic6J1xcdTIxQ0EnLCdERG90cmFoZCc6J1xcdTI5MTEnLCdkZG90c2VxJzonXFx1MkE3NycsJ2RlZyc6J1xceEIwJywnRGVsJzonXFx1MjIwNycsJ2RlbHRhJzonXFx1MDNCNCcsJ0RlbHRhJzonXFx1MDM5NCcsJ2RlbXB0eXYnOidcXHUyOUIxJywnZGZpc2h0JzonXFx1Mjk3RicsJ2Rmcic6J1xcdUQ4MzVcXHVERDIxJywnRGZyJzonXFx1RDgzNVxcdUREMDcnLCdkSGFyJzonXFx1Mjk2NScsJ2RoYXJsJzonXFx1MjFDMycsJ2RoYXJyJzonXFx1MjFDMicsJ0RpYWNyaXRpY2FsQWN1dGUnOidcXHhCNCcsJ0RpYWNyaXRpY2FsRG90JzonXFx1MDJEOScsJ0RpYWNyaXRpY2FsRG91YmxlQWN1dGUnOidcXHUwMkREJywnRGlhY3JpdGljYWxHcmF2ZSc6J2AnLCdEaWFjcml0aWNhbFRpbGRlJzonXFx1MDJEQycsJ2RpYW0nOidcXHUyMkM0JywnZGlhbW9uZCc6J1xcdTIyQzQnLCdEaWFtb25kJzonXFx1MjJDNCcsJ2RpYW1vbmRzdWl0JzonXFx1MjY2NicsJ2RpYW1zJzonXFx1MjY2NicsJ2RpZSc6J1xceEE4JywnRGlmZmVyZW50aWFsRCc6J1xcdTIxNDYnLCdkaWdhbW1hJzonXFx1MDNERCcsJ2Rpc2luJzonXFx1MjJGMicsJ2Rpdic6J1xceEY3JywnZGl2aWRlJzonXFx4RjcnLCdkaXZpZGVvbnRpbWVzJzonXFx1MjJDNycsJ2Rpdm9ueCc6J1xcdTIyQzcnLCdkamN5JzonXFx1MDQ1MicsJ0RKY3knOidcXHUwNDAyJywnZGxjb3JuJzonXFx1MjMxRScsJ2RsY3JvcCc6J1xcdTIzMEQnLCdkb2xsYXInOickJywnZG9wZic6J1xcdUQ4MzVcXHVERDU1JywnRG9wZic6J1xcdUQ4MzVcXHVERDNCJywnZG90JzonXFx1MDJEOScsJ0RvdCc6J1xceEE4JywnRG90RG90JzonXFx1MjBEQycsJ2RvdGVxJzonXFx1MjI1MCcsJ2RvdGVxZG90JzonXFx1MjI1MScsJ0RvdEVxdWFsJzonXFx1MjI1MCcsJ2RvdG1pbnVzJzonXFx1MjIzOCcsJ2RvdHBsdXMnOidcXHUyMjE0JywnZG90c3F1YXJlJzonXFx1MjJBMScsJ2RvdWJsZWJhcndlZGdlJzonXFx1MjMwNicsJ0RvdWJsZUNvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMkYnLCdEb3VibGVEb3QnOidcXHhBOCcsJ0RvdWJsZURvd25BcnJvdyc6J1xcdTIxRDMnLCdEb3VibGVMZWZ0QXJyb3cnOidcXHUyMUQwJywnRG91YmxlTGVmdFJpZ2h0QXJyb3cnOidcXHUyMUQ0JywnRG91YmxlTGVmdFRlZSc6J1xcdTJBRTQnLCdEb3VibGVMb25nTGVmdEFycm93JzonXFx1MjdGOCcsJ0RvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdyc6J1xcdTI3RkEnLCdEb3VibGVMb25nUmlnaHRBcnJvdyc6J1xcdTI3RjknLCdEb3VibGVSaWdodEFycm93JzonXFx1MjFEMicsJ0RvdWJsZVJpZ2h0VGVlJzonXFx1MjJBOCcsJ0RvdWJsZVVwQXJyb3cnOidcXHUyMUQxJywnRG91YmxlVXBEb3duQXJyb3cnOidcXHUyMUQ1JywnRG91YmxlVmVydGljYWxCYXInOidcXHUyMjI1JywnZG93bmFycm93JzonXFx1MjE5MycsJ0Rvd25hcnJvdyc6J1xcdTIxRDMnLCdEb3duQXJyb3cnOidcXHUyMTkzJywnRG93bkFycm93QmFyJzonXFx1MjkxMycsJ0Rvd25BcnJvd1VwQXJyb3cnOidcXHUyMUY1JywnRG93bkJyZXZlJzonXFx1MDMxMScsJ2Rvd25kb3duYXJyb3dzJzonXFx1MjFDQScsJ2Rvd25oYXJwb29ubGVmdCc6J1xcdTIxQzMnLCdkb3duaGFycG9vbnJpZ2h0JzonXFx1MjFDMicsJ0Rvd25MZWZ0UmlnaHRWZWN0b3InOidcXHUyOTUwJywnRG93bkxlZnRUZWVWZWN0b3InOidcXHUyOTVFJywnRG93bkxlZnRWZWN0b3InOidcXHUyMUJEJywnRG93bkxlZnRWZWN0b3JCYXInOidcXHUyOTU2JywnRG93blJpZ2h0VGVlVmVjdG9yJzonXFx1Mjk1RicsJ0Rvd25SaWdodFZlY3Rvcic6J1xcdTIxQzEnLCdEb3duUmlnaHRWZWN0b3JCYXInOidcXHUyOTU3JywnRG93blRlZSc6J1xcdTIyQTQnLCdEb3duVGVlQXJyb3cnOidcXHUyMUE3JywnZHJia2Fyb3cnOidcXHUyOTEwJywnZHJjb3JuJzonXFx1MjMxRicsJ2RyY3JvcCc6J1xcdTIzMEMnLCdkc2NyJzonXFx1RDgzNVxcdURDQjknLCdEc2NyJzonXFx1RDgzNVxcdURDOUYnLCdkc2N5JzonXFx1MDQ1NScsJ0RTY3knOidcXHUwNDA1JywnZHNvbCc6J1xcdTI5RjYnLCdkc3Ryb2snOidcXHUwMTExJywnRHN0cm9rJzonXFx1MDExMCcsJ2R0ZG90JzonXFx1MjJGMScsJ2R0cmknOidcXHUyNUJGJywnZHRyaWYnOidcXHUyNUJFJywnZHVhcnInOidcXHUyMUY1JywnZHVoYXInOidcXHUyOTZGJywnZHdhbmdsZSc6J1xcdTI5QTYnLCdkemN5JzonXFx1MDQ1RicsJ0RaY3knOidcXHUwNDBGJywnZHppZ3JhcnInOidcXHUyN0ZGJywnZWFjdXRlJzonXFx4RTknLCdFYWN1dGUnOidcXHhDOScsJ2Vhc3Rlcic6J1xcdTJBNkUnLCdlY2Fyb24nOidcXHUwMTFCJywnRWNhcm9uJzonXFx1MDExQScsJ2VjaXInOidcXHUyMjU2JywnZWNpcmMnOidcXHhFQScsJ0VjaXJjJzonXFx4Q0EnLCdlY29sb24nOidcXHUyMjU1JywnZWN5JzonXFx1MDQ0RCcsJ0VjeSc6J1xcdTA0MkQnLCdlRERvdCc6J1xcdTJBNzcnLCdlZG90JzonXFx1MDExNycsJ2VEb3QnOidcXHUyMjUxJywnRWRvdCc6J1xcdTAxMTYnLCdlZSc6J1xcdTIxNDcnLCdlZkRvdCc6J1xcdTIyNTInLCdlZnInOidcXHVEODM1XFx1REQyMicsJ0Vmcic6J1xcdUQ4MzVcXHVERDA4JywnZWcnOidcXHUyQTlBJywnZWdyYXZlJzonXFx4RTgnLCdFZ3JhdmUnOidcXHhDOCcsJ2Vncyc6J1xcdTJBOTYnLCdlZ3Nkb3QnOidcXHUyQTk4JywnZWwnOidcXHUyQTk5JywnRWxlbWVudCc6J1xcdTIyMDgnLCdlbGludGVycyc6J1xcdTIzRTcnLCdlbGwnOidcXHUyMTEzJywnZWxzJzonXFx1MkE5NScsJ2Vsc2RvdCc6J1xcdTJBOTcnLCdlbWFjcic6J1xcdTAxMTMnLCdFbWFjcic6J1xcdTAxMTInLCdlbXB0eSc6J1xcdTIyMDUnLCdlbXB0eXNldCc6J1xcdTIyMDUnLCdFbXB0eVNtYWxsU3F1YXJlJzonXFx1MjVGQicsJ2VtcHR5dic6J1xcdTIyMDUnLCdFbXB0eVZlcnlTbWFsbFNxdWFyZSc6J1xcdTI1QUInLCdlbXNwJzonXFx1MjAwMycsJ2Vtc3AxMyc6J1xcdTIwMDQnLCdlbXNwMTQnOidcXHUyMDA1JywnZW5nJzonXFx1MDE0QicsJ0VORyc6J1xcdTAxNEEnLCdlbnNwJzonXFx1MjAwMicsJ2VvZ29uJzonXFx1MDExOScsJ0VvZ29uJzonXFx1MDExOCcsJ2VvcGYnOidcXHVEODM1XFx1REQ1NicsJ0VvcGYnOidcXHVEODM1XFx1REQzQycsJ2VwYXInOidcXHUyMkQ1JywnZXBhcnNsJzonXFx1MjlFMycsJ2VwbHVzJzonXFx1MkE3MScsJ2Vwc2knOidcXHUwM0I1JywnZXBzaWxvbic6J1xcdTAzQjUnLCdFcHNpbG9uJzonXFx1MDM5NScsJ2Vwc2l2JzonXFx1MDNGNScsJ2VxY2lyYyc6J1xcdTIyNTYnLCdlcWNvbG9uJzonXFx1MjI1NScsJ2Vxc2ltJzonXFx1MjI0MicsJ2Vxc2xhbnRndHInOidcXHUyQTk2JywnZXFzbGFudGxlc3MnOidcXHUyQTk1JywnRXF1YWwnOidcXHUyQTc1JywnZXF1YWxzJzonPScsJ0VxdWFsVGlsZGUnOidcXHUyMjQyJywnZXF1ZXN0JzonXFx1MjI1RicsJ0VxdWlsaWJyaXVtJzonXFx1MjFDQycsJ2VxdWl2JzonXFx1MjI2MScsJ2VxdWl2REQnOidcXHUyQTc4JywnZXF2cGFyc2wnOidcXHUyOUU1JywnZXJhcnInOidcXHUyOTcxJywnZXJEb3QnOidcXHUyMjUzJywnZXNjcic6J1xcdTIxMkYnLCdFc2NyJzonXFx1MjEzMCcsJ2VzZG90JzonXFx1MjI1MCcsJ2VzaW0nOidcXHUyMjQyJywnRXNpbSc6J1xcdTJBNzMnLCdldGEnOidcXHUwM0I3JywnRXRhJzonXFx1MDM5NycsJ2V0aCc6J1xceEYwJywnRVRIJzonXFx4RDAnLCdldW1sJzonXFx4RUInLCdFdW1sJzonXFx4Q0InLCdldXJvJzonXFx1MjBBQycsJ2V4Y2wnOichJywnZXhpc3QnOidcXHUyMjAzJywnRXhpc3RzJzonXFx1MjIwMycsJ2V4cGVjdGF0aW9uJzonXFx1MjEzMCcsJ2V4cG9uZW50aWFsZSc6J1xcdTIxNDcnLCdFeHBvbmVudGlhbEUnOidcXHUyMTQ3JywnZmFsbGluZ2RvdHNlcSc6J1xcdTIyNTInLCdmY3knOidcXHUwNDQ0JywnRmN5JzonXFx1MDQyNCcsJ2ZlbWFsZSc6J1xcdTI2NDAnLCdmZmlsaWcnOidcXHVGQjAzJywnZmZsaWcnOidcXHVGQjAwJywnZmZsbGlnJzonXFx1RkIwNCcsJ2Zmcic6J1xcdUQ4MzVcXHVERDIzJywnRmZyJzonXFx1RDgzNVxcdUREMDknLCdmaWxpZyc6J1xcdUZCMDEnLCdGaWxsZWRTbWFsbFNxdWFyZSc6J1xcdTI1RkMnLCdGaWxsZWRWZXJ5U21hbGxTcXVhcmUnOidcXHUyNUFBJywnZmpsaWcnOidmaicsJ2ZsYXQnOidcXHUyNjZEJywnZmxsaWcnOidcXHVGQjAyJywnZmx0bnMnOidcXHUyNUIxJywnZm5vZic6J1xcdTAxOTInLCdmb3BmJzonXFx1RDgzNVxcdURENTcnLCdGb3BmJzonXFx1RDgzNVxcdUREM0QnLCdmb3JhbGwnOidcXHUyMjAwJywnRm9yQWxsJzonXFx1MjIwMCcsJ2ZvcmsnOidcXHUyMkQ0JywnZm9ya3YnOidcXHUyQUQ5JywnRm91cmllcnRyZic6J1xcdTIxMzEnLCdmcGFydGludCc6J1xcdTJBMEQnLCdmcmFjMTInOidcXHhCRCcsJ2ZyYWMxMyc6J1xcdTIxNTMnLCdmcmFjMTQnOidcXHhCQycsJ2ZyYWMxNSc6J1xcdTIxNTUnLCdmcmFjMTYnOidcXHUyMTU5JywnZnJhYzE4JzonXFx1MjE1QicsJ2ZyYWMyMyc6J1xcdTIxNTQnLCdmcmFjMjUnOidcXHUyMTU2JywnZnJhYzM0JzonXFx4QkUnLCdmcmFjMzUnOidcXHUyMTU3JywnZnJhYzM4JzonXFx1MjE1QycsJ2ZyYWM0NSc6J1xcdTIxNTgnLCdmcmFjNTYnOidcXHUyMTVBJywnZnJhYzU4JzonXFx1MjE1RCcsJ2ZyYWM3OCc6J1xcdTIxNUUnLCdmcmFzbCc6J1xcdTIwNDQnLCdmcm93bic6J1xcdTIzMjInLCdmc2NyJzonXFx1RDgzNVxcdURDQkInLCdGc2NyJzonXFx1MjEzMScsJ2dhY3V0ZSc6J1xcdTAxRjUnLCdnYW1tYSc6J1xcdTAzQjMnLCdHYW1tYSc6J1xcdTAzOTMnLCdnYW1tYWQnOidcXHUwM0REJywnR2FtbWFkJzonXFx1MDNEQycsJ2dhcCc6J1xcdTJBODYnLCdnYnJldmUnOidcXHUwMTFGJywnR2JyZXZlJzonXFx1MDExRScsJ0djZWRpbCc6J1xcdTAxMjInLCdnY2lyYyc6J1xcdTAxMUQnLCdHY2lyYyc6J1xcdTAxMUMnLCdnY3knOidcXHUwNDMzJywnR2N5JzonXFx1MDQxMycsJ2dkb3QnOidcXHUwMTIxJywnR2RvdCc6J1xcdTAxMjAnLCdnZSc6J1xcdTIyNjUnLCdnRSc6J1xcdTIyNjcnLCdnZWwnOidcXHUyMkRCJywnZ0VsJzonXFx1MkE4QycsJ2dlcSc6J1xcdTIyNjUnLCdnZXFxJzonXFx1MjI2NycsJ2dlcXNsYW50JzonXFx1MkE3RScsJ2dlcyc6J1xcdTJBN0UnLCdnZXNjYyc6J1xcdTJBQTknLCdnZXNkb3QnOidcXHUyQTgwJywnZ2VzZG90byc6J1xcdTJBODInLCdnZXNkb3RvbCc6J1xcdTJBODQnLCdnZXNsJzonXFx1MjJEQlxcdUZFMDAnLCdnZXNsZXMnOidcXHUyQTk0JywnZ2ZyJzonXFx1RDgzNVxcdUREMjQnLCdHZnInOidcXHVEODM1XFx1REQwQScsJ2dnJzonXFx1MjI2QicsJ0dnJzonXFx1MjJEOScsJ2dnZyc6J1xcdTIyRDknLCdnaW1lbCc6J1xcdTIxMzcnLCdnamN5JzonXFx1MDQ1MycsJ0dKY3knOidcXHUwNDAzJywnZ2wnOidcXHUyMjc3JywnZ2xhJzonXFx1MkFBNScsJ2dsRSc6J1xcdTJBOTInLCdnbGonOidcXHUyQUE0JywnZ25hcCc6J1xcdTJBOEEnLCdnbmFwcHJveCc6J1xcdTJBOEEnLCdnbmUnOidcXHUyQTg4JywnZ25FJzonXFx1MjI2OScsJ2duZXEnOidcXHUyQTg4JywnZ25lcXEnOidcXHUyMjY5JywnZ25zaW0nOidcXHUyMkU3JywnZ29wZic6J1xcdUQ4MzVcXHVERDU4JywnR29wZic6J1xcdUQ4MzVcXHVERDNFJywnZ3JhdmUnOidgJywnR3JlYXRlckVxdWFsJzonXFx1MjI2NScsJ0dyZWF0ZXJFcXVhbExlc3MnOidcXHUyMkRCJywnR3JlYXRlckZ1bGxFcXVhbCc6J1xcdTIyNjcnLCdHcmVhdGVyR3JlYXRlcic6J1xcdTJBQTInLCdHcmVhdGVyTGVzcyc6J1xcdTIyNzcnLCdHcmVhdGVyU2xhbnRFcXVhbCc6J1xcdTJBN0UnLCdHcmVhdGVyVGlsZGUnOidcXHUyMjczJywnZ3Njcic6J1xcdTIxMEEnLCdHc2NyJzonXFx1RDgzNVxcdURDQTInLCdnc2ltJzonXFx1MjI3MycsJ2dzaW1lJzonXFx1MkE4RScsJ2dzaW1sJzonXFx1MkE5MCcsJ2d0JzonPicsJ0d0JzonXFx1MjI2QicsJ0dUJzonPicsJ2d0Y2MnOidcXHUyQUE3JywnZ3RjaXInOidcXHUyQTdBJywnZ3Rkb3QnOidcXHUyMkQ3JywnZ3RsUGFyJzonXFx1Mjk5NScsJ2d0cXVlc3QnOidcXHUyQTdDJywnZ3RyYXBwcm94JzonXFx1MkE4NicsJ2d0cmFycic6J1xcdTI5NzgnLCdndHJkb3QnOidcXHUyMkQ3JywnZ3RyZXFsZXNzJzonXFx1MjJEQicsJ2d0cmVxcWxlc3MnOidcXHUyQThDJywnZ3RybGVzcyc6J1xcdTIyNzcnLCdndHJzaW0nOidcXHUyMjczJywnZ3ZlcnRuZXFxJzonXFx1MjI2OVxcdUZFMDAnLCdndm5FJzonXFx1MjI2OVxcdUZFMDAnLCdIYWNlayc6J1xcdTAyQzcnLCdoYWlyc3AnOidcXHUyMDBBJywnaGFsZic6J1xceEJEJywnaGFtaWx0JzonXFx1MjEwQicsJ2hhcmRjeSc6J1xcdTA0NEEnLCdIQVJEY3knOidcXHUwNDJBJywnaGFycic6J1xcdTIxOTQnLCdoQXJyJzonXFx1MjFENCcsJ2hhcnJjaXInOidcXHUyOTQ4JywnaGFycncnOidcXHUyMUFEJywnSGF0JzonXicsJ2hiYXInOidcXHUyMTBGJywnaGNpcmMnOidcXHUwMTI1JywnSGNpcmMnOidcXHUwMTI0JywnaGVhcnRzJzonXFx1MjY2NScsJ2hlYXJ0c3VpdCc6J1xcdTI2NjUnLCdoZWxsaXAnOidcXHUyMDI2JywnaGVyY29uJzonXFx1MjJCOScsJ2hmcic6J1xcdUQ4MzVcXHVERDI1JywnSGZyJzonXFx1MjEwQycsJ0hpbGJlcnRTcGFjZSc6J1xcdTIxMEInLCdoa3NlYXJvdyc6J1xcdTI5MjUnLCdoa3N3YXJvdyc6J1xcdTI5MjYnLCdob2Fycic6J1xcdTIxRkYnLCdob210aHQnOidcXHUyMjNCJywnaG9va2xlZnRhcnJvdyc6J1xcdTIxQTknLCdob29rcmlnaHRhcnJvdyc6J1xcdTIxQUEnLCdob3BmJzonXFx1RDgzNVxcdURENTknLCdIb3BmJzonXFx1MjEwRCcsJ2hvcmJhcic6J1xcdTIwMTUnLCdIb3Jpem9udGFsTGluZSc6J1xcdTI1MDAnLCdoc2NyJzonXFx1RDgzNVxcdURDQkQnLCdIc2NyJzonXFx1MjEwQicsJ2hzbGFzaCc6J1xcdTIxMEYnLCdoc3Ryb2snOidcXHUwMTI3JywnSHN0cm9rJzonXFx1MDEyNicsJ0h1bXBEb3duSHVtcCc6J1xcdTIyNEUnLCdIdW1wRXF1YWwnOidcXHUyMjRGJywnaHlidWxsJzonXFx1MjA0MycsJ2h5cGhlbic6J1xcdTIwMTAnLCdpYWN1dGUnOidcXHhFRCcsJ0lhY3V0ZSc6J1xceENEJywnaWMnOidcXHUyMDYzJywnaWNpcmMnOidcXHhFRScsJ0ljaXJjJzonXFx4Q0UnLCdpY3knOidcXHUwNDM4JywnSWN5JzonXFx1MDQxOCcsJ0lkb3QnOidcXHUwMTMwJywnaWVjeSc6J1xcdTA0MzUnLCdJRWN5JzonXFx1MDQxNScsJ2lleGNsJzonXFx4QTEnLCdpZmYnOidcXHUyMUQ0JywnaWZyJzonXFx1RDgzNVxcdUREMjYnLCdJZnInOidcXHUyMTExJywnaWdyYXZlJzonXFx4RUMnLCdJZ3JhdmUnOidcXHhDQycsJ2lpJzonXFx1MjE0OCcsJ2lpaWludCc6J1xcdTJBMEMnLCdpaWludCc6J1xcdTIyMkQnLCdpaW5maW4nOidcXHUyOURDJywnaWlvdGEnOidcXHUyMTI5JywnaWpsaWcnOidcXHUwMTMzJywnSUpsaWcnOidcXHUwMTMyJywnSW0nOidcXHUyMTExJywnaW1hY3InOidcXHUwMTJCJywnSW1hY3InOidcXHUwMTJBJywnaW1hZ2UnOidcXHUyMTExJywnSW1hZ2luYXJ5SSc6J1xcdTIxNDgnLCdpbWFnbGluZSc6J1xcdTIxMTAnLCdpbWFncGFydCc6J1xcdTIxMTEnLCdpbWF0aCc6J1xcdTAxMzEnLCdpbW9mJzonXFx1MjJCNycsJ2ltcGVkJzonXFx1MDFCNScsJ0ltcGxpZXMnOidcXHUyMUQyJywnaW4nOidcXHUyMjA4JywnaW5jYXJlJzonXFx1MjEwNScsJ2luZmluJzonXFx1MjIxRScsJ2luZmludGllJzonXFx1MjlERCcsJ2lub2RvdCc6J1xcdTAxMzEnLCdpbnQnOidcXHUyMjJCJywnSW50JzonXFx1MjIyQycsJ2ludGNhbCc6J1xcdTIyQkEnLCdpbnRlZ2Vycyc6J1xcdTIxMjQnLCdJbnRlZ3JhbCc6J1xcdTIyMkInLCdpbnRlcmNhbCc6J1xcdTIyQkEnLCdJbnRlcnNlY3Rpb24nOidcXHUyMkMyJywnaW50bGFyaGsnOidcXHUyQTE3JywnaW50cHJvZCc6J1xcdTJBM0MnLCdJbnZpc2libGVDb21tYSc6J1xcdTIwNjMnLCdJbnZpc2libGVUaW1lcyc6J1xcdTIwNjInLCdpb2N5JzonXFx1MDQ1MScsJ0lPY3knOidcXHUwNDAxJywnaW9nb24nOidcXHUwMTJGJywnSW9nb24nOidcXHUwMTJFJywnaW9wZic6J1xcdUQ4MzVcXHVERDVBJywnSW9wZic6J1xcdUQ4MzVcXHVERDQwJywnaW90YSc6J1xcdTAzQjknLCdJb3RhJzonXFx1MDM5OScsJ2lwcm9kJzonXFx1MkEzQycsJ2lxdWVzdCc6J1xceEJGJywnaXNjcic6J1xcdUQ4MzVcXHVEQ0JFJywnSXNjcic6J1xcdTIxMTAnLCdpc2luJzonXFx1MjIwOCcsJ2lzaW5kb3QnOidcXHUyMkY1JywnaXNpbkUnOidcXHUyMkY5JywnaXNpbnMnOidcXHUyMkY0JywnaXNpbnN2JzonXFx1MjJGMycsJ2lzaW52JzonXFx1MjIwOCcsJ2l0JzonXFx1MjA2MicsJ2l0aWxkZSc6J1xcdTAxMjknLCdJdGlsZGUnOidcXHUwMTI4JywnaXVrY3knOidcXHUwNDU2JywnSXVrY3knOidcXHUwNDA2JywnaXVtbCc6J1xceEVGJywnSXVtbCc6J1xceENGJywnamNpcmMnOidcXHUwMTM1JywnSmNpcmMnOidcXHUwMTM0JywnamN5JzonXFx1MDQzOScsJ0pjeSc6J1xcdTA0MTknLCdqZnInOidcXHVEODM1XFx1REQyNycsJ0pmcic6J1xcdUQ4MzVcXHVERDBEJywnam1hdGgnOidcXHUwMjM3Jywnam9wZic6J1xcdUQ4MzVcXHVERDVCJywnSm9wZic6J1xcdUQ4MzVcXHVERDQxJywnanNjcic6J1xcdUQ4MzVcXHVEQ0JGJywnSnNjcic6J1xcdUQ4MzVcXHVEQ0E1JywnanNlcmN5JzonXFx1MDQ1OCcsJ0pzZXJjeSc6J1xcdTA0MDgnLCdqdWtjeSc6J1xcdTA0NTQnLCdKdWtjeSc6J1xcdTA0MDQnLCdrYXBwYSc6J1xcdTAzQkEnLCdLYXBwYSc6J1xcdTAzOUEnLCdrYXBwYXYnOidcXHUwM0YwJywna2NlZGlsJzonXFx1MDEzNycsJ0tjZWRpbCc6J1xcdTAxMzYnLCdrY3knOidcXHUwNDNBJywnS2N5JzonXFx1MDQxQScsJ2tmcic6J1xcdUQ4MzVcXHVERDI4JywnS2ZyJzonXFx1RDgzNVxcdUREMEUnLCdrZ3JlZW4nOidcXHUwMTM4Jywna2hjeSc6J1xcdTA0NDUnLCdLSGN5JzonXFx1MDQyNScsJ2tqY3knOidcXHUwNDVDJywnS0pjeSc6J1xcdTA0MEMnLCdrb3BmJzonXFx1RDgzNVxcdURENUMnLCdLb3BmJzonXFx1RDgzNVxcdURENDInLCdrc2NyJzonXFx1RDgzNVxcdURDQzAnLCdLc2NyJzonXFx1RDgzNVxcdURDQTYnLCdsQWFycic6J1xcdTIxREEnLCdsYWN1dGUnOidcXHUwMTNBJywnTGFjdXRlJzonXFx1MDEzOScsJ2xhZW1wdHl2JzonXFx1MjlCNCcsJ2xhZ3Jhbic6J1xcdTIxMTInLCdsYW1iZGEnOidcXHUwM0JCJywnTGFtYmRhJzonXFx1MDM5QicsJ2xhbmcnOidcXHUyN0U4JywnTGFuZyc6J1xcdTI3RUEnLCdsYW5nZCc6J1xcdTI5OTEnLCdsYW5nbGUnOidcXHUyN0U4JywnbGFwJzonXFx1MkE4NScsJ0xhcGxhY2V0cmYnOidcXHUyMTEyJywnbGFxdW8nOidcXHhBQicsJ2xhcnInOidcXHUyMTkwJywnbEFycic6J1xcdTIxRDAnLCdMYXJyJzonXFx1MjE5RScsJ2xhcnJiJzonXFx1MjFFNCcsJ2xhcnJiZnMnOidcXHUyOTFGJywnbGFycmZzJzonXFx1MjkxRCcsJ2xhcnJoayc6J1xcdTIxQTknLCdsYXJybHAnOidcXHUyMUFCJywnbGFycnBsJzonXFx1MjkzOScsJ2xhcnJzaW0nOidcXHUyOTczJywnbGFycnRsJzonXFx1MjFBMicsJ2xhdCc6J1xcdTJBQUInLCdsYXRhaWwnOidcXHUyOTE5JywnbEF0YWlsJzonXFx1MjkxQicsJ2xhdGUnOidcXHUyQUFEJywnbGF0ZXMnOidcXHUyQUFEXFx1RkUwMCcsJ2xiYXJyJzonXFx1MjkwQycsJ2xCYXJyJzonXFx1MjkwRScsJ2xiYnJrJzonXFx1Mjc3MicsJ2xicmFjZSc6J3snLCdsYnJhY2snOidbJywnbGJya2UnOidcXHUyOThCJywnbGJya3NsZCc6J1xcdTI5OEYnLCdsYnJrc2x1JzonXFx1Mjk4RCcsJ2xjYXJvbic6J1xcdTAxM0UnLCdMY2Fyb24nOidcXHUwMTNEJywnbGNlZGlsJzonXFx1MDEzQycsJ0xjZWRpbCc6J1xcdTAxM0InLCdsY2VpbCc6J1xcdTIzMDgnLCdsY3ViJzoneycsJ2xjeSc6J1xcdTA0M0InLCdMY3knOidcXHUwNDFCJywnbGRjYSc6J1xcdTI5MzYnLCdsZHF1byc6J1xcdTIwMUMnLCdsZHF1b3InOidcXHUyMDFFJywnbGRyZGhhcic6J1xcdTI5NjcnLCdsZHJ1c2hhcic6J1xcdTI5NEInLCdsZHNoJzonXFx1MjFCMicsJ2xlJzonXFx1MjI2NCcsJ2xFJzonXFx1MjI2NicsJ0xlZnRBbmdsZUJyYWNrZXQnOidcXHUyN0U4JywnbGVmdGFycm93JzonXFx1MjE5MCcsJ0xlZnRhcnJvdyc6J1xcdTIxRDAnLCdMZWZ0QXJyb3cnOidcXHUyMTkwJywnTGVmdEFycm93QmFyJzonXFx1MjFFNCcsJ0xlZnRBcnJvd1JpZ2h0QXJyb3cnOidcXHUyMUM2JywnbGVmdGFycm93dGFpbCc6J1xcdTIxQTInLCdMZWZ0Q2VpbGluZyc6J1xcdTIzMDgnLCdMZWZ0RG91YmxlQnJhY2tldCc6J1xcdTI3RTYnLCdMZWZ0RG93blRlZVZlY3Rvcic6J1xcdTI5NjEnLCdMZWZ0RG93blZlY3Rvcic6J1xcdTIxQzMnLCdMZWZ0RG93blZlY3RvckJhcic6J1xcdTI5NTknLCdMZWZ0Rmxvb3InOidcXHUyMzBBJywnbGVmdGhhcnBvb25kb3duJzonXFx1MjFCRCcsJ2xlZnRoYXJwb29udXAnOidcXHUyMUJDJywnbGVmdGxlZnRhcnJvd3MnOidcXHUyMUM3JywnbGVmdHJpZ2h0YXJyb3cnOidcXHUyMTk0JywnTGVmdHJpZ2h0YXJyb3cnOidcXHUyMUQ0JywnTGVmdFJpZ2h0QXJyb3cnOidcXHUyMTk0JywnbGVmdHJpZ2h0YXJyb3dzJzonXFx1MjFDNicsJ2xlZnRyaWdodGhhcnBvb25zJzonXFx1MjFDQicsJ2xlZnRyaWdodHNxdWlnYXJyb3cnOidcXHUyMUFEJywnTGVmdFJpZ2h0VmVjdG9yJzonXFx1Mjk0RScsJ0xlZnRUZWUnOidcXHUyMkEzJywnTGVmdFRlZUFycm93JzonXFx1MjFBNCcsJ0xlZnRUZWVWZWN0b3InOidcXHUyOTVBJywnbGVmdHRocmVldGltZXMnOidcXHUyMkNCJywnTGVmdFRyaWFuZ2xlJzonXFx1MjJCMicsJ0xlZnRUcmlhbmdsZUJhcic6J1xcdTI5Q0YnLCdMZWZ0VHJpYW5nbGVFcXVhbCc6J1xcdTIyQjQnLCdMZWZ0VXBEb3duVmVjdG9yJzonXFx1Mjk1MScsJ0xlZnRVcFRlZVZlY3Rvcic6J1xcdTI5NjAnLCdMZWZ0VXBWZWN0b3InOidcXHUyMUJGJywnTGVmdFVwVmVjdG9yQmFyJzonXFx1Mjk1OCcsJ0xlZnRWZWN0b3InOidcXHUyMUJDJywnTGVmdFZlY3RvckJhcic6J1xcdTI5NTInLCdsZWcnOidcXHUyMkRBJywnbEVnJzonXFx1MkE4QicsJ2xlcSc6J1xcdTIyNjQnLCdsZXFxJzonXFx1MjI2NicsJ2xlcXNsYW50JzonXFx1MkE3RCcsJ2xlcyc6J1xcdTJBN0QnLCdsZXNjYyc6J1xcdTJBQTgnLCdsZXNkb3QnOidcXHUyQTdGJywnbGVzZG90byc6J1xcdTJBODEnLCdsZXNkb3Rvcic6J1xcdTJBODMnLCdsZXNnJzonXFx1MjJEQVxcdUZFMDAnLCdsZXNnZXMnOidcXHUyQTkzJywnbGVzc2FwcHJveCc6J1xcdTJBODUnLCdsZXNzZG90JzonXFx1MjJENicsJ2xlc3NlcWd0cic6J1xcdTIyREEnLCdsZXNzZXFxZ3RyJzonXFx1MkE4QicsJ0xlc3NFcXVhbEdyZWF0ZXInOidcXHUyMkRBJywnTGVzc0Z1bGxFcXVhbCc6J1xcdTIyNjYnLCdMZXNzR3JlYXRlcic6J1xcdTIyNzYnLCdsZXNzZ3RyJzonXFx1MjI3NicsJ0xlc3NMZXNzJzonXFx1MkFBMScsJ2xlc3NzaW0nOidcXHUyMjcyJywnTGVzc1NsYW50RXF1YWwnOidcXHUyQTdEJywnTGVzc1RpbGRlJzonXFx1MjI3MicsJ2xmaXNodCc6J1xcdTI5N0MnLCdsZmxvb3InOidcXHUyMzBBJywnbGZyJzonXFx1RDgzNVxcdUREMjknLCdMZnInOidcXHVEODM1XFx1REQwRicsJ2xnJzonXFx1MjI3NicsJ2xnRSc6J1xcdTJBOTEnLCdsSGFyJzonXFx1Mjk2MicsJ2xoYXJkJzonXFx1MjFCRCcsJ2xoYXJ1JzonXFx1MjFCQycsJ2xoYXJ1bCc6J1xcdTI5NkEnLCdsaGJsayc6J1xcdTI1ODQnLCdsamN5JzonXFx1MDQ1OScsJ0xKY3knOidcXHUwNDA5JywnbGwnOidcXHUyMjZBJywnTGwnOidcXHUyMkQ4JywnbGxhcnInOidcXHUyMUM3JywnbGxjb3JuZXInOidcXHUyMzFFJywnTGxlZnRhcnJvdyc6J1xcdTIxREEnLCdsbGhhcmQnOidcXHUyOTZCJywnbGx0cmknOidcXHUyNUZBJywnbG1pZG90JzonXFx1MDE0MCcsJ0xtaWRvdCc6J1xcdTAxM0YnLCdsbW91c3QnOidcXHUyM0IwJywnbG1vdXN0YWNoZSc6J1xcdTIzQjAnLCdsbmFwJzonXFx1MkE4OScsJ2xuYXBwcm94JzonXFx1MkE4OScsJ2xuZSc6J1xcdTJBODcnLCdsbkUnOidcXHUyMjY4JywnbG5lcSc6J1xcdTJBODcnLCdsbmVxcSc6J1xcdTIyNjgnLCdsbnNpbSc6J1xcdTIyRTYnLCdsb2FuZyc6J1xcdTI3RUMnLCdsb2Fycic6J1xcdTIxRkQnLCdsb2Jyayc6J1xcdTI3RTYnLCdsb25nbGVmdGFycm93JzonXFx1MjdGNScsJ0xvbmdsZWZ0YXJyb3cnOidcXHUyN0Y4JywnTG9uZ0xlZnRBcnJvdyc6J1xcdTI3RjUnLCdsb25nbGVmdHJpZ2h0YXJyb3cnOidcXHUyN0Y3JywnTG9uZ2xlZnRyaWdodGFycm93JzonXFx1MjdGQScsJ0xvbmdMZWZ0UmlnaHRBcnJvdyc6J1xcdTI3RjcnLCdsb25nbWFwc3RvJzonXFx1MjdGQycsJ2xvbmdyaWdodGFycm93JzonXFx1MjdGNicsJ0xvbmdyaWdodGFycm93JzonXFx1MjdGOScsJ0xvbmdSaWdodEFycm93JzonXFx1MjdGNicsJ2xvb3BhcnJvd2xlZnQnOidcXHUyMUFCJywnbG9vcGFycm93cmlnaHQnOidcXHUyMUFDJywnbG9wYXInOidcXHUyOTg1JywnbG9wZic6J1xcdUQ4MzVcXHVERDVEJywnTG9wZic6J1xcdUQ4MzVcXHVERDQzJywnbG9wbHVzJzonXFx1MkEyRCcsJ2xvdGltZXMnOidcXHUyQTM0JywnbG93YXN0JzonXFx1MjIxNycsJ2xvd2Jhcic6J18nLCdMb3dlckxlZnRBcnJvdyc6J1xcdTIxOTknLCdMb3dlclJpZ2h0QXJyb3cnOidcXHUyMTk4JywnbG96JzonXFx1MjVDQScsJ2xvemVuZ2UnOidcXHUyNUNBJywnbG96Zic6J1xcdTI5RUInLCdscGFyJzonKCcsJ2xwYXJsdCc6J1xcdTI5OTMnLCdscmFycic6J1xcdTIxQzYnLCdscmNvcm5lcic6J1xcdTIzMUYnLCdscmhhcic6J1xcdTIxQ0InLCdscmhhcmQnOidcXHUyOTZEJywnbHJtJzonXFx1MjAwRScsJ2xydHJpJzonXFx1MjJCRicsJ2xzYXF1byc6J1xcdTIwMzknLCdsc2NyJzonXFx1RDgzNVxcdURDQzEnLCdMc2NyJzonXFx1MjExMicsJ2xzaCc6J1xcdTIxQjAnLCdMc2gnOidcXHUyMUIwJywnbHNpbSc6J1xcdTIyNzInLCdsc2ltZSc6J1xcdTJBOEQnLCdsc2ltZyc6J1xcdTJBOEYnLCdsc3FiJzonWycsJ2xzcXVvJzonXFx1MjAxOCcsJ2xzcXVvcic6J1xcdTIwMUEnLCdsc3Ryb2snOidcXHUwMTQyJywnTHN0cm9rJzonXFx1MDE0MScsJ2x0JzonPCcsJ0x0JzonXFx1MjI2QScsJ0xUJzonPCcsJ2x0Y2MnOidcXHUyQUE2JywnbHRjaXInOidcXHUyQTc5JywnbHRkb3QnOidcXHUyMkQ2JywnbHRocmVlJzonXFx1MjJDQicsJ2x0aW1lcyc6J1xcdTIyQzknLCdsdGxhcnInOidcXHUyOTc2JywnbHRxdWVzdCc6J1xcdTJBN0InLCdsdHJpJzonXFx1MjVDMycsJ2x0cmllJzonXFx1MjJCNCcsJ2x0cmlmJzonXFx1MjVDMicsJ2x0clBhcic6J1xcdTI5OTYnLCdsdXJkc2hhcic6J1xcdTI5NEEnLCdsdXJ1aGFyJzonXFx1Mjk2NicsJ2x2ZXJ0bmVxcSc6J1xcdTIyNjhcXHVGRTAwJywnbHZuRSc6J1xcdTIyNjhcXHVGRTAwJywnbWFjcic6J1xceEFGJywnbWFsZSc6J1xcdTI2NDInLCdtYWx0JzonXFx1MjcyMCcsJ21hbHRlc2UnOidcXHUyNzIwJywnbWFwJzonXFx1MjFBNicsJ01hcCc6J1xcdTI5MDUnLCdtYXBzdG8nOidcXHUyMUE2JywnbWFwc3RvZG93bic6J1xcdTIxQTcnLCdtYXBzdG9sZWZ0JzonXFx1MjFBNCcsJ21hcHN0b3VwJzonXFx1MjFBNScsJ21hcmtlcic6J1xcdTI1QUUnLCdtY29tbWEnOidcXHUyQTI5JywnbWN5JzonXFx1MDQzQycsJ01jeSc6J1xcdTA0MUMnLCdtZGFzaCc6J1xcdTIwMTQnLCdtRERvdCc6J1xcdTIyM0EnLCdtZWFzdXJlZGFuZ2xlJzonXFx1MjIyMScsJ01lZGl1bVNwYWNlJzonXFx1MjA1RicsJ01lbGxpbnRyZic6J1xcdTIxMzMnLCdtZnInOidcXHVEODM1XFx1REQyQScsJ01mcic6J1xcdUQ4MzVcXHVERDEwJywnbWhvJzonXFx1MjEyNycsJ21pY3JvJzonXFx4QjUnLCdtaWQnOidcXHUyMjIzJywnbWlkYXN0JzonKicsJ21pZGNpcic6J1xcdTJBRjAnLCdtaWRkb3QnOidcXHhCNycsJ21pbnVzJzonXFx1MjIxMicsJ21pbnVzYic6J1xcdTIyOUYnLCdtaW51c2QnOidcXHUyMjM4JywnbWludXNkdSc6J1xcdTJBMkEnLCdNaW51c1BsdXMnOidcXHUyMjEzJywnbWxjcCc6J1xcdTJBREInLCdtbGRyJzonXFx1MjAyNicsJ21ucGx1cyc6J1xcdTIyMTMnLCdtb2RlbHMnOidcXHUyMkE3JywnbW9wZic6J1xcdUQ4MzVcXHVERDVFJywnTW9wZic6J1xcdUQ4MzVcXHVERDQ0JywnbXAnOidcXHUyMjEzJywnbXNjcic6J1xcdUQ4MzVcXHVEQ0MyJywnTXNjcic6J1xcdTIxMzMnLCdtc3Rwb3MnOidcXHUyMjNFJywnbXUnOidcXHUwM0JDJywnTXUnOidcXHUwMzlDJywnbXVsdGltYXAnOidcXHUyMkI4JywnbXVtYXAnOidcXHUyMkI4JywnbmFibGEnOidcXHUyMjA3JywnbmFjdXRlJzonXFx1MDE0NCcsJ05hY3V0ZSc6J1xcdTAxNDMnLCduYW5nJzonXFx1MjIyMFxcdTIwRDInLCduYXAnOidcXHUyMjQ5JywnbmFwRSc6J1xcdTJBNzBcXHUwMzM4JywnbmFwaWQnOidcXHUyMjRCXFx1MDMzOCcsJ25hcG9zJzonXFx1MDE0OScsJ25hcHByb3gnOidcXHUyMjQ5JywnbmF0dXInOidcXHUyNjZFJywnbmF0dXJhbCc6J1xcdTI2NkUnLCduYXR1cmFscyc6J1xcdTIxMTUnLCduYnNwJzonXFx4QTAnLCduYnVtcCc6J1xcdTIyNEVcXHUwMzM4JywnbmJ1bXBlJzonXFx1MjI0RlxcdTAzMzgnLCduY2FwJzonXFx1MkE0MycsJ25jYXJvbic6J1xcdTAxNDgnLCdOY2Fyb24nOidcXHUwMTQ3JywnbmNlZGlsJzonXFx1MDE0NicsJ05jZWRpbCc6J1xcdTAxNDUnLCduY29uZyc6J1xcdTIyNDcnLCduY29uZ2RvdCc6J1xcdTJBNkRcXHUwMzM4JywnbmN1cCc6J1xcdTJBNDInLCduY3knOidcXHUwNDNEJywnTmN5JzonXFx1MDQxRCcsJ25kYXNoJzonXFx1MjAxMycsJ25lJzonXFx1MjI2MCcsJ25lYXJoayc6J1xcdTI5MjQnLCduZWFycic6J1xcdTIxOTcnLCduZUFycic6J1xcdTIxRDcnLCduZWFycm93JzonXFx1MjE5NycsJ25lZG90JzonXFx1MjI1MFxcdTAzMzgnLCdOZWdhdGl2ZU1lZGl1bVNwYWNlJzonXFx1MjAwQicsJ05lZ2F0aXZlVGhpY2tTcGFjZSc6J1xcdTIwMEInLCdOZWdhdGl2ZVRoaW5TcGFjZSc6J1xcdTIwMEInLCdOZWdhdGl2ZVZlcnlUaGluU3BhY2UnOidcXHUyMDBCJywnbmVxdWl2JzonXFx1MjI2MicsJ25lc2Vhcic6J1xcdTI5MjgnLCduZXNpbSc6J1xcdTIyNDJcXHUwMzM4JywnTmVzdGVkR3JlYXRlckdyZWF0ZXInOidcXHUyMjZCJywnTmVzdGVkTGVzc0xlc3MnOidcXHUyMjZBJywnTmV3TGluZSc6J1xcbicsJ25leGlzdCc6J1xcdTIyMDQnLCduZXhpc3RzJzonXFx1MjIwNCcsJ25mcic6J1xcdUQ4MzVcXHVERDJCJywnTmZyJzonXFx1RDgzNVxcdUREMTEnLCduZ2UnOidcXHUyMjcxJywnbmdFJzonXFx1MjI2N1xcdTAzMzgnLCduZ2VxJzonXFx1MjI3MScsJ25nZXFxJzonXFx1MjI2N1xcdTAzMzgnLCduZ2Vxc2xhbnQnOidcXHUyQTdFXFx1MDMzOCcsJ25nZXMnOidcXHUyQTdFXFx1MDMzOCcsJ25HZyc6J1xcdTIyRDlcXHUwMzM4JywnbmdzaW0nOidcXHUyMjc1Jywnbmd0JzonXFx1MjI2RicsJ25HdCc6J1xcdTIyNkJcXHUyMEQyJywnbmd0cic6J1xcdTIyNkYnLCduR3R2JzonXFx1MjI2QlxcdTAzMzgnLCduaGFycic6J1xcdTIxQUUnLCduaEFycic6J1xcdTIxQ0UnLCduaHBhcic6J1xcdTJBRjInLCduaSc6J1xcdTIyMEInLCduaXMnOidcXHUyMkZDJywnbmlzZCc6J1xcdTIyRkEnLCduaXYnOidcXHUyMjBCJywnbmpjeSc6J1xcdTA0NUEnLCdOSmN5JzonXFx1MDQwQScsJ25sYXJyJzonXFx1MjE5QScsJ25sQXJyJzonXFx1MjFDRCcsJ25sZHInOidcXHUyMDI1JywnbmxlJzonXFx1MjI3MCcsJ25sRSc6J1xcdTIyNjZcXHUwMzM4JywnbmxlZnRhcnJvdyc6J1xcdTIxOUEnLCduTGVmdGFycm93JzonXFx1MjFDRCcsJ25sZWZ0cmlnaHRhcnJvdyc6J1xcdTIxQUUnLCduTGVmdHJpZ2h0YXJyb3cnOidcXHUyMUNFJywnbmxlcSc6J1xcdTIyNzAnLCdubGVxcSc6J1xcdTIyNjZcXHUwMzM4JywnbmxlcXNsYW50JzonXFx1MkE3RFxcdTAzMzgnLCdubGVzJzonXFx1MkE3RFxcdTAzMzgnLCdubGVzcyc6J1xcdTIyNkUnLCduTGwnOidcXHUyMkQ4XFx1MDMzOCcsJ25sc2ltJzonXFx1MjI3NCcsJ25sdCc6J1xcdTIyNkUnLCduTHQnOidcXHUyMjZBXFx1MjBEMicsJ25sdHJpJzonXFx1MjJFQScsJ25sdHJpZSc6J1xcdTIyRUMnLCduTHR2JzonXFx1MjI2QVxcdTAzMzgnLCdubWlkJzonXFx1MjIyNCcsJ05vQnJlYWsnOidcXHUyMDYwJywnTm9uQnJlYWtpbmdTcGFjZSc6J1xceEEwJywnbm9wZic6J1xcdUQ4MzVcXHVERDVGJywnTm9wZic6J1xcdTIxMTUnLCdub3QnOidcXHhBQycsJ05vdCc6J1xcdTJBRUMnLCdOb3RDb25ncnVlbnQnOidcXHUyMjYyJywnTm90Q3VwQ2FwJzonXFx1MjI2RCcsJ05vdERvdWJsZVZlcnRpY2FsQmFyJzonXFx1MjIyNicsJ05vdEVsZW1lbnQnOidcXHUyMjA5JywnTm90RXF1YWwnOidcXHUyMjYwJywnTm90RXF1YWxUaWxkZSc6J1xcdTIyNDJcXHUwMzM4JywnTm90RXhpc3RzJzonXFx1MjIwNCcsJ05vdEdyZWF0ZXInOidcXHUyMjZGJywnTm90R3JlYXRlckVxdWFsJzonXFx1MjI3MScsJ05vdEdyZWF0ZXJGdWxsRXF1YWwnOidcXHUyMjY3XFx1MDMzOCcsJ05vdEdyZWF0ZXJHcmVhdGVyJzonXFx1MjI2QlxcdTAzMzgnLCdOb3RHcmVhdGVyTGVzcyc6J1xcdTIyNzknLCdOb3RHcmVhdGVyU2xhbnRFcXVhbCc6J1xcdTJBN0VcXHUwMzM4JywnTm90R3JlYXRlclRpbGRlJzonXFx1MjI3NScsJ05vdEh1bXBEb3duSHVtcCc6J1xcdTIyNEVcXHUwMzM4JywnTm90SHVtcEVxdWFsJzonXFx1MjI0RlxcdTAzMzgnLCdub3Rpbic6J1xcdTIyMDknLCdub3RpbmRvdCc6J1xcdTIyRjVcXHUwMzM4Jywnbm90aW5FJzonXFx1MjJGOVxcdTAzMzgnLCdub3RpbnZhJzonXFx1MjIwOScsJ25vdGludmInOidcXHUyMkY3Jywnbm90aW52Yyc6J1xcdTIyRjYnLCdOb3RMZWZ0VHJpYW5nbGUnOidcXHUyMkVBJywnTm90TGVmdFRyaWFuZ2xlQmFyJzonXFx1MjlDRlxcdTAzMzgnLCdOb3RMZWZ0VHJpYW5nbGVFcXVhbCc6J1xcdTIyRUMnLCdOb3RMZXNzJzonXFx1MjI2RScsJ05vdExlc3NFcXVhbCc6J1xcdTIyNzAnLCdOb3RMZXNzR3JlYXRlcic6J1xcdTIyNzgnLCdOb3RMZXNzTGVzcyc6J1xcdTIyNkFcXHUwMzM4JywnTm90TGVzc1NsYW50RXF1YWwnOidcXHUyQTdEXFx1MDMzOCcsJ05vdExlc3NUaWxkZSc6J1xcdTIyNzQnLCdOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcic6J1xcdTJBQTJcXHUwMzM4JywnTm90TmVzdGVkTGVzc0xlc3MnOidcXHUyQUExXFx1MDMzOCcsJ25vdG5pJzonXFx1MjIwQycsJ25vdG5pdmEnOidcXHUyMjBDJywnbm90bml2Yic6J1xcdTIyRkUnLCdub3RuaXZjJzonXFx1MjJGRCcsJ05vdFByZWNlZGVzJzonXFx1MjI4MCcsJ05vdFByZWNlZGVzRXF1YWwnOidcXHUyQUFGXFx1MDMzOCcsJ05vdFByZWNlZGVzU2xhbnRFcXVhbCc6J1xcdTIyRTAnLCdOb3RSZXZlcnNlRWxlbWVudCc6J1xcdTIyMEMnLCdOb3RSaWdodFRyaWFuZ2xlJzonXFx1MjJFQicsJ05vdFJpZ2h0VHJpYW5nbGVCYXInOidcXHUyOUQwXFx1MDMzOCcsJ05vdFJpZ2h0VHJpYW5nbGVFcXVhbCc6J1xcdTIyRUQnLCdOb3RTcXVhcmVTdWJzZXQnOidcXHUyMjhGXFx1MDMzOCcsJ05vdFNxdWFyZVN1YnNldEVxdWFsJzonXFx1MjJFMicsJ05vdFNxdWFyZVN1cGVyc2V0JzonXFx1MjI5MFxcdTAzMzgnLCdOb3RTcXVhcmVTdXBlcnNldEVxdWFsJzonXFx1MjJFMycsJ05vdFN1YnNldCc6J1xcdTIyODJcXHUyMEQyJywnTm90U3Vic2V0RXF1YWwnOidcXHUyMjg4JywnTm90U3VjY2VlZHMnOidcXHUyMjgxJywnTm90U3VjY2VlZHNFcXVhbCc6J1xcdTJBQjBcXHUwMzM4JywnTm90U3VjY2VlZHNTbGFudEVxdWFsJzonXFx1MjJFMScsJ05vdFN1Y2NlZWRzVGlsZGUnOidcXHUyMjdGXFx1MDMzOCcsJ05vdFN1cGVyc2V0JzonXFx1MjI4M1xcdTIwRDInLCdOb3RTdXBlcnNldEVxdWFsJzonXFx1MjI4OScsJ05vdFRpbGRlJzonXFx1MjI0MScsJ05vdFRpbGRlRXF1YWwnOidcXHUyMjQ0JywnTm90VGlsZGVGdWxsRXF1YWwnOidcXHUyMjQ3JywnTm90VGlsZGVUaWxkZSc6J1xcdTIyNDknLCdOb3RWZXJ0aWNhbEJhcic6J1xcdTIyMjQnLCducGFyJzonXFx1MjIyNicsJ25wYXJhbGxlbCc6J1xcdTIyMjYnLCducGFyc2wnOidcXHUyQUZEXFx1MjBFNScsJ25wYXJ0JzonXFx1MjIwMlxcdTAzMzgnLCducG9saW50JzonXFx1MkExNCcsJ25wcic6J1xcdTIyODAnLCducHJjdWUnOidcXHUyMkUwJywnbnByZSc6J1xcdTJBQUZcXHUwMzM4JywnbnByZWMnOidcXHUyMjgwJywnbnByZWNlcSc6J1xcdTJBQUZcXHUwMzM4JywnbnJhcnInOidcXHUyMTlCJywnbnJBcnInOidcXHUyMUNGJywnbnJhcnJjJzonXFx1MjkzM1xcdTAzMzgnLCducmFycncnOidcXHUyMTlEXFx1MDMzOCcsJ25yaWdodGFycm93JzonXFx1MjE5QicsJ25SaWdodGFycm93JzonXFx1MjFDRicsJ25ydHJpJzonXFx1MjJFQicsJ25ydHJpZSc6J1xcdTIyRUQnLCduc2MnOidcXHUyMjgxJywnbnNjY3VlJzonXFx1MjJFMScsJ25zY2UnOidcXHUyQUIwXFx1MDMzOCcsJ25zY3InOidcXHVEODM1XFx1RENDMycsJ05zY3InOidcXHVEODM1XFx1RENBOScsJ25zaG9ydG1pZCc6J1xcdTIyMjQnLCduc2hvcnRwYXJhbGxlbCc6J1xcdTIyMjYnLCduc2ltJzonXFx1MjI0MScsJ25zaW1lJzonXFx1MjI0NCcsJ25zaW1lcSc6J1xcdTIyNDQnLCduc21pZCc6J1xcdTIyMjQnLCduc3Bhcic6J1xcdTIyMjYnLCduc3FzdWJlJzonXFx1MjJFMicsJ25zcXN1cGUnOidcXHUyMkUzJywnbnN1Yic6J1xcdTIyODQnLCduc3ViZSc6J1xcdTIyODgnLCduc3ViRSc6J1xcdTJBQzVcXHUwMzM4JywnbnN1YnNldCc6J1xcdTIyODJcXHUyMEQyJywnbnN1YnNldGVxJzonXFx1MjI4OCcsJ25zdWJzZXRlcXEnOidcXHUyQUM1XFx1MDMzOCcsJ25zdWNjJzonXFx1MjI4MScsJ25zdWNjZXEnOidcXHUyQUIwXFx1MDMzOCcsJ25zdXAnOidcXHUyMjg1JywnbnN1cGUnOidcXHUyMjg5JywnbnN1cEUnOidcXHUyQUM2XFx1MDMzOCcsJ25zdXBzZXQnOidcXHUyMjgzXFx1MjBEMicsJ25zdXBzZXRlcSc6J1xcdTIyODknLCduc3Vwc2V0ZXFxJzonXFx1MkFDNlxcdTAzMzgnLCdudGdsJzonXFx1MjI3OScsJ250aWxkZSc6J1xceEYxJywnTnRpbGRlJzonXFx4RDEnLCdudGxnJzonXFx1MjI3OCcsJ250cmlhbmdsZWxlZnQnOidcXHUyMkVBJywnbnRyaWFuZ2xlbGVmdGVxJzonXFx1MjJFQycsJ250cmlhbmdsZXJpZ2h0JzonXFx1MjJFQicsJ250cmlhbmdsZXJpZ2h0ZXEnOidcXHUyMkVEJywnbnUnOidcXHUwM0JEJywnTnUnOidcXHUwMzlEJywnbnVtJzonIycsJ251bWVybyc6J1xcdTIxMTYnLCdudW1zcCc6J1xcdTIwMDcnLCdudmFwJzonXFx1MjI0RFxcdTIwRDInLCdudmRhc2gnOidcXHUyMkFDJywnbnZEYXNoJzonXFx1MjJBRCcsJ25WZGFzaCc6J1xcdTIyQUUnLCduVkRhc2gnOidcXHUyMkFGJywnbnZnZSc6J1xcdTIyNjVcXHUyMEQyJywnbnZndCc6Jz5cXHUyMEQyJywnbnZIYXJyJzonXFx1MjkwNCcsJ252aW5maW4nOidcXHUyOURFJywnbnZsQXJyJzonXFx1MjkwMicsJ252bGUnOidcXHUyMjY0XFx1MjBEMicsJ252bHQnOic8XFx1MjBEMicsJ252bHRyaWUnOidcXHUyMkI0XFx1MjBEMicsJ252ckFycic6J1xcdTI5MDMnLCdudnJ0cmllJzonXFx1MjJCNVxcdTIwRDInLCdudnNpbSc6J1xcdTIyM0NcXHUyMEQyJywnbndhcmhrJzonXFx1MjkyMycsJ253YXJyJzonXFx1MjE5NicsJ253QXJyJzonXFx1MjFENicsJ253YXJyb3cnOidcXHUyMTk2JywnbnduZWFyJzonXFx1MjkyNycsJ29hY3V0ZSc6J1xceEYzJywnT2FjdXRlJzonXFx4RDMnLCdvYXN0JzonXFx1MjI5QicsJ29jaXInOidcXHUyMjlBJywnb2NpcmMnOidcXHhGNCcsJ09jaXJjJzonXFx4RDQnLCdvY3knOidcXHUwNDNFJywnT2N5JzonXFx1MDQxRScsJ29kYXNoJzonXFx1MjI5RCcsJ29kYmxhYyc6J1xcdTAxNTEnLCdPZGJsYWMnOidcXHUwMTUwJywnb2Rpdic6J1xcdTJBMzgnLCdvZG90JzonXFx1MjI5OScsJ29kc29sZCc6J1xcdTI5QkMnLCdvZWxpZyc6J1xcdTAxNTMnLCdPRWxpZyc6J1xcdTAxNTInLCdvZmNpcic6J1xcdTI5QkYnLCdvZnInOidcXHVEODM1XFx1REQyQycsJ09mcic6J1xcdUQ4MzVcXHVERDEyJywnb2dvbic6J1xcdTAyREInLCdvZ3JhdmUnOidcXHhGMicsJ09ncmF2ZSc6J1xceEQyJywnb2d0JzonXFx1MjlDMScsJ29oYmFyJzonXFx1MjlCNScsJ29obSc6J1xcdTAzQTknLCdvaW50JzonXFx1MjIyRScsJ29sYXJyJzonXFx1MjFCQScsJ29sY2lyJzonXFx1MjlCRScsJ29sY3Jvc3MnOidcXHUyOUJCJywnb2xpbmUnOidcXHUyMDNFJywnb2x0JzonXFx1MjlDMCcsJ29tYWNyJzonXFx1MDE0RCcsJ09tYWNyJzonXFx1MDE0QycsJ29tZWdhJzonXFx1MDNDOScsJ09tZWdhJzonXFx1MDNBOScsJ29taWNyb24nOidcXHUwM0JGJywnT21pY3Jvbic6J1xcdTAzOUYnLCdvbWlkJzonXFx1MjlCNicsJ29taW51cyc6J1xcdTIyOTYnLCdvb3BmJzonXFx1RDgzNVxcdURENjAnLCdPb3BmJzonXFx1RDgzNVxcdURENDYnLCdvcGFyJzonXFx1MjlCNycsJ09wZW5DdXJseURvdWJsZVF1b3RlJzonXFx1MjAxQycsJ09wZW5DdXJseVF1b3RlJzonXFx1MjAxOCcsJ29wZXJwJzonXFx1MjlCOScsJ29wbHVzJzonXFx1MjI5NScsJ29yJzonXFx1MjIyOCcsJ09yJzonXFx1MkE1NCcsJ29yYXJyJzonXFx1MjFCQicsJ29yZCc6J1xcdTJBNUQnLCdvcmRlcic6J1xcdTIxMzQnLCdvcmRlcm9mJzonXFx1MjEzNCcsJ29yZGYnOidcXHhBQScsJ29yZG0nOidcXHhCQScsJ29yaWdvZic6J1xcdTIyQjYnLCdvcm9yJzonXFx1MkE1NicsJ29yc2xvcGUnOidcXHUyQTU3Jywnb3J2JzonXFx1MkE1QicsJ29TJzonXFx1MjRDOCcsJ29zY3InOidcXHUyMTM0JywnT3Njcic6J1xcdUQ4MzVcXHVEQ0FBJywnb3NsYXNoJzonXFx4RjgnLCdPc2xhc2gnOidcXHhEOCcsJ29zb2wnOidcXHUyMjk4Jywnb3RpbGRlJzonXFx4RjUnLCdPdGlsZGUnOidcXHhENScsJ290aW1lcyc6J1xcdTIyOTcnLCdPdGltZXMnOidcXHUyQTM3Jywnb3RpbWVzYXMnOidcXHUyQTM2Jywnb3VtbCc6J1xceEY2JywnT3VtbCc6J1xceEQ2Jywnb3ZiYXInOidcXHUyMzNEJywnT3ZlckJhcic6J1xcdTIwM0UnLCdPdmVyQnJhY2UnOidcXHUyM0RFJywnT3ZlckJyYWNrZXQnOidcXHUyM0I0JywnT3ZlclBhcmVudGhlc2lzJzonXFx1MjNEQycsJ3Bhcic6J1xcdTIyMjUnLCdwYXJhJzonXFx4QjYnLCdwYXJhbGxlbCc6J1xcdTIyMjUnLCdwYXJzaW0nOidcXHUyQUYzJywncGFyc2wnOidcXHUyQUZEJywncGFydCc6J1xcdTIyMDInLCdQYXJ0aWFsRCc6J1xcdTIyMDInLCdwY3knOidcXHUwNDNGJywnUGN5JzonXFx1MDQxRicsJ3BlcmNudCc6JyUnLCdwZXJpb2QnOicuJywncGVybWlsJzonXFx1MjAzMCcsJ3BlcnAnOidcXHUyMkE1JywncGVydGVuayc6J1xcdTIwMzEnLCdwZnInOidcXHVEODM1XFx1REQyRCcsJ1Bmcic6J1xcdUQ4MzVcXHVERDEzJywncGhpJzonXFx1MDNDNicsJ1BoaSc6J1xcdTAzQTYnLCdwaGl2JzonXFx1MDNENScsJ3BobW1hdCc6J1xcdTIxMzMnLCdwaG9uZSc6J1xcdTI2MEUnLCdwaSc6J1xcdTAzQzAnLCdQaSc6J1xcdTAzQTAnLCdwaXRjaGZvcmsnOidcXHUyMkQ0JywncGl2JzonXFx1MDNENicsJ3BsYW5jayc6J1xcdTIxMEYnLCdwbGFuY2toJzonXFx1MjEwRScsJ3BsYW5rdic6J1xcdTIxMEYnLCdwbHVzJzonKycsJ3BsdXNhY2lyJzonXFx1MkEyMycsJ3BsdXNiJzonXFx1MjI5RScsJ3BsdXNjaXInOidcXHUyQTIyJywncGx1c2RvJzonXFx1MjIxNCcsJ3BsdXNkdSc6J1xcdTJBMjUnLCdwbHVzZSc6J1xcdTJBNzInLCdQbHVzTWludXMnOidcXHhCMScsJ3BsdXNtbic6J1xceEIxJywncGx1c3NpbSc6J1xcdTJBMjYnLCdwbHVzdHdvJzonXFx1MkEyNycsJ3BtJzonXFx4QjEnLCdQb2luY2FyZXBsYW5lJzonXFx1MjEwQycsJ3BvaW50aW50JzonXFx1MkExNScsJ3BvcGYnOidcXHVEODM1XFx1REQ2MScsJ1BvcGYnOidcXHUyMTE5JywncG91bmQnOidcXHhBMycsJ3ByJzonXFx1MjI3QScsJ1ByJzonXFx1MkFCQicsJ3ByYXAnOidcXHUyQUI3JywncHJjdWUnOidcXHUyMjdDJywncHJlJzonXFx1MkFBRicsJ3ByRSc6J1xcdTJBQjMnLCdwcmVjJzonXFx1MjI3QScsJ3ByZWNhcHByb3gnOidcXHUyQUI3JywncHJlY2N1cmx5ZXEnOidcXHUyMjdDJywnUHJlY2VkZXMnOidcXHUyMjdBJywnUHJlY2VkZXNFcXVhbCc6J1xcdTJBQUYnLCdQcmVjZWRlc1NsYW50RXF1YWwnOidcXHUyMjdDJywnUHJlY2VkZXNUaWxkZSc6J1xcdTIyN0UnLCdwcmVjZXEnOidcXHUyQUFGJywncHJlY25hcHByb3gnOidcXHUyQUI5JywncHJlY25lcXEnOidcXHUyQUI1JywncHJlY25zaW0nOidcXHUyMkU4JywncHJlY3NpbSc6J1xcdTIyN0UnLCdwcmltZSc6J1xcdTIwMzInLCdQcmltZSc6J1xcdTIwMzMnLCdwcmltZXMnOidcXHUyMTE5JywncHJuYXAnOidcXHUyQUI5JywncHJuRSc6J1xcdTJBQjUnLCdwcm5zaW0nOidcXHUyMkU4JywncHJvZCc6J1xcdTIyMEYnLCdQcm9kdWN0JzonXFx1MjIwRicsJ3Byb2ZhbGFyJzonXFx1MjMyRScsJ3Byb2ZsaW5lJzonXFx1MjMxMicsJ3Byb2ZzdXJmJzonXFx1MjMxMycsJ3Byb3AnOidcXHUyMjFEJywnUHJvcG9ydGlvbic6J1xcdTIyMzcnLCdQcm9wb3J0aW9uYWwnOidcXHUyMjFEJywncHJvcHRvJzonXFx1MjIxRCcsJ3Byc2ltJzonXFx1MjI3RScsJ3BydXJlbCc6J1xcdTIyQjAnLCdwc2NyJzonXFx1RDgzNVxcdURDQzUnLCdQc2NyJzonXFx1RDgzNVxcdURDQUInLCdwc2knOidcXHUwM0M4JywnUHNpJzonXFx1MDNBOCcsJ3B1bmNzcCc6J1xcdTIwMDgnLCdxZnInOidcXHVEODM1XFx1REQyRScsJ1Fmcic6J1xcdUQ4MzVcXHVERDE0JywncWludCc6J1xcdTJBMEMnLCdxb3BmJzonXFx1RDgzNVxcdURENjInLCdRb3BmJzonXFx1MjExQScsJ3FwcmltZSc6J1xcdTIwNTcnLCdxc2NyJzonXFx1RDgzNVxcdURDQzYnLCdRc2NyJzonXFx1RDgzNVxcdURDQUMnLCdxdWF0ZXJuaW9ucyc6J1xcdTIxMEQnLCdxdWF0aW50JzonXFx1MkExNicsJ3F1ZXN0JzonPycsJ3F1ZXN0ZXEnOidcXHUyMjVGJywncXVvdCc6J1wiJywnUVVPVCc6J1wiJywnckFhcnInOidcXHUyMURCJywncmFjZSc6J1xcdTIyM0RcXHUwMzMxJywncmFjdXRlJzonXFx1MDE1NScsJ1JhY3V0ZSc6J1xcdTAxNTQnLCdyYWRpYyc6J1xcdTIyMUEnLCdyYWVtcHR5dic6J1xcdTI5QjMnLCdyYW5nJzonXFx1MjdFOScsJ1JhbmcnOidcXHUyN0VCJywncmFuZ2QnOidcXHUyOTkyJywncmFuZ2UnOidcXHUyOUE1JywncmFuZ2xlJzonXFx1MjdFOScsJ3JhcXVvJzonXFx4QkInLCdyYXJyJzonXFx1MjE5MicsJ3JBcnInOidcXHUyMUQyJywnUmFycic6J1xcdTIxQTAnLCdyYXJyYXAnOidcXHUyOTc1JywncmFycmInOidcXHUyMUU1JywncmFycmJmcyc6J1xcdTI5MjAnLCdyYXJyYyc6J1xcdTI5MzMnLCdyYXJyZnMnOidcXHUyOTFFJywncmFycmhrJzonXFx1MjFBQScsJ3JhcnJscCc6J1xcdTIxQUMnLCdyYXJycGwnOidcXHUyOTQ1JywncmFycnNpbSc6J1xcdTI5NzQnLCdyYXJydGwnOidcXHUyMUEzJywnUmFycnRsJzonXFx1MjkxNicsJ3JhcnJ3JzonXFx1MjE5RCcsJ3JhdGFpbCc6J1xcdTI5MUEnLCdyQXRhaWwnOidcXHUyOTFDJywncmF0aW8nOidcXHUyMjM2JywncmF0aW9uYWxzJzonXFx1MjExQScsJ3JiYXJyJzonXFx1MjkwRCcsJ3JCYXJyJzonXFx1MjkwRicsJ1JCYXJyJzonXFx1MjkxMCcsJ3JiYnJrJzonXFx1Mjc3MycsJ3JicmFjZSc6J30nLCdyYnJhY2snOiddJywncmJya2UnOidcXHUyOThDJywncmJya3NsZCc6J1xcdTI5OEUnLCdyYnJrc2x1JzonXFx1Mjk5MCcsJ3JjYXJvbic6J1xcdTAxNTknLCdSY2Fyb24nOidcXHUwMTU4JywncmNlZGlsJzonXFx1MDE1NycsJ1JjZWRpbCc6J1xcdTAxNTYnLCdyY2VpbCc6J1xcdTIzMDknLCdyY3ViJzonfScsJ3JjeSc6J1xcdTA0NDAnLCdSY3knOidcXHUwNDIwJywncmRjYSc6J1xcdTI5MzcnLCdyZGxkaGFyJzonXFx1Mjk2OScsJ3JkcXVvJzonXFx1MjAxRCcsJ3JkcXVvcic6J1xcdTIwMUQnLCdyZHNoJzonXFx1MjFCMycsJ1JlJzonXFx1MjExQycsJ3JlYWwnOidcXHUyMTFDJywncmVhbGluZSc6J1xcdTIxMUInLCdyZWFscGFydCc6J1xcdTIxMUMnLCdyZWFscyc6J1xcdTIxMUQnLCdyZWN0JzonXFx1MjVBRCcsJ3JlZyc6J1xceEFFJywnUkVHJzonXFx4QUUnLCdSZXZlcnNlRWxlbWVudCc6J1xcdTIyMEInLCdSZXZlcnNlRXF1aWxpYnJpdW0nOidcXHUyMUNCJywnUmV2ZXJzZVVwRXF1aWxpYnJpdW0nOidcXHUyOTZGJywncmZpc2h0JzonXFx1Mjk3RCcsJ3JmbG9vcic6J1xcdTIzMEInLCdyZnInOidcXHVEODM1XFx1REQyRicsJ1Jmcic6J1xcdTIxMUMnLCdySGFyJzonXFx1Mjk2NCcsJ3JoYXJkJzonXFx1MjFDMScsJ3JoYXJ1JzonXFx1MjFDMCcsJ3JoYXJ1bCc6J1xcdTI5NkMnLCdyaG8nOidcXHUwM0MxJywnUmhvJzonXFx1MDNBMScsJ3Job3YnOidcXHUwM0YxJywnUmlnaHRBbmdsZUJyYWNrZXQnOidcXHUyN0U5JywncmlnaHRhcnJvdyc6J1xcdTIxOTInLCdSaWdodGFycm93JzonXFx1MjFEMicsJ1JpZ2h0QXJyb3cnOidcXHUyMTkyJywnUmlnaHRBcnJvd0Jhcic6J1xcdTIxRTUnLCdSaWdodEFycm93TGVmdEFycm93JzonXFx1MjFDNCcsJ3JpZ2h0YXJyb3d0YWlsJzonXFx1MjFBMycsJ1JpZ2h0Q2VpbGluZyc6J1xcdTIzMDknLCdSaWdodERvdWJsZUJyYWNrZXQnOidcXHUyN0U3JywnUmlnaHREb3duVGVlVmVjdG9yJzonXFx1Mjk1RCcsJ1JpZ2h0RG93blZlY3Rvcic6J1xcdTIxQzInLCdSaWdodERvd25WZWN0b3JCYXInOidcXHUyOTU1JywnUmlnaHRGbG9vcic6J1xcdTIzMEInLCdyaWdodGhhcnBvb25kb3duJzonXFx1MjFDMScsJ3JpZ2h0aGFycG9vbnVwJzonXFx1MjFDMCcsJ3JpZ2h0bGVmdGFycm93cyc6J1xcdTIxQzQnLCdyaWdodGxlZnRoYXJwb29ucyc6J1xcdTIxQ0MnLCdyaWdodHJpZ2h0YXJyb3dzJzonXFx1MjFDOScsJ3JpZ2h0c3F1aWdhcnJvdyc6J1xcdTIxOUQnLCdSaWdodFRlZSc6J1xcdTIyQTInLCdSaWdodFRlZUFycm93JzonXFx1MjFBNicsJ1JpZ2h0VGVlVmVjdG9yJzonXFx1Mjk1QicsJ3JpZ2h0dGhyZWV0aW1lcyc6J1xcdTIyQ0MnLCdSaWdodFRyaWFuZ2xlJzonXFx1MjJCMycsJ1JpZ2h0VHJpYW5nbGVCYXInOidcXHUyOUQwJywnUmlnaHRUcmlhbmdsZUVxdWFsJzonXFx1MjJCNScsJ1JpZ2h0VXBEb3duVmVjdG9yJzonXFx1Mjk0RicsJ1JpZ2h0VXBUZWVWZWN0b3InOidcXHUyOTVDJywnUmlnaHRVcFZlY3Rvcic6J1xcdTIxQkUnLCdSaWdodFVwVmVjdG9yQmFyJzonXFx1Mjk1NCcsJ1JpZ2h0VmVjdG9yJzonXFx1MjFDMCcsJ1JpZ2h0VmVjdG9yQmFyJzonXFx1Mjk1MycsJ3JpbmcnOidcXHUwMkRBJywncmlzaW5nZG90c2VxJzonXFx1MjI1MycsJ3JsYXJyJzonXFx1MjFDNCcsJ3JsaGFyJzonXFx1MjFDQycsJ3JsbSc6J1xcdTIwMEYnLCdybW91c3QnOidcXHUyM0IxJywncm1vdXN0YWNoZSc6J1xcdTIzQjEnLCdybm1pZCc6J1xcdTJBRUUnLCdyb2FuZyc6J1xcdTI3RUQnLCdyb2Fycic6J1xcdTIxRkUnLCdyb2Jyayc6J1xcdTI3RTcnLCdyb3Bhcic6J1xcdTI5ODYnLCdyb3BmJzonXFx1RDgzNVxcdURENjMnLCdSb3BmJzonXFx1MjExRCcsJ3JvcGx1cyc6J1xcdTJBMkUnLCdyb3RpbWVzJzonXFx1MkEzNScsJ1JvdW5kSW1wbGllcyc6J1xcdTI5NzAnLCdycGFyJzonKScsJ3JwYXJndCc6J1xcdTI5OTQnLCdycHBvbGludCc6J1xcdTJBMTInLCdycmFycic6J1xcdTIxQzknLCdScmlnaHRhcnJvdyc6J1xcdTIxREInLCdyc2FxdW8nOidcXHUyMDNBJywncnNjcic6J1xcdUQ4MzVcXHVEQ0M3JywnUnNjcic6J1xcdTIxMUInLCdyc2gnOidcXHUyMUIxJywnUnNoJzonXFx1MjFCMScsJ3JzcWInOiddJywncnNxdW8nOidcXHUyMDE5JywncnNxdW9yJzonXFx1MjAxOScsJ3J0aHJlZSc6J1xcdTIyQ0MnLCdydGltZXMnOidcXHUyMkNBJywncnRyaSc6J1xcdTI1QjknLCdydHJpZSc6J1xcdTIyQjUnLCdydHJpZic6J1xcdTI1QjgnLCdydHJpbHRyaSc6J1xcdTI5Q0UnLCdSdWxlRGVsYXllZCc6J1xcdTI5RjQnLCdydWx1aGFyJzonXFx1Mjk2OCcsJ3J4JzonXFx1MjExRScsJ3NhY3V0ZSc6J1xcdTAxNUInLCdTYWN1dGUnOidcXHUwMTVBJywnc2JxdW8nOidcXHUyMDFBJywnc2MnOidcXHUyMjdCJywnU2MnOidcXHUyQUJDJywnc2NhcCc6J1xcdTJBQjgnLCdzY2Fyb24nOidcXHUwMTYxJywnU2Nhcm9uJzonXFx1MDE2MCcsJ3NjY3VlJzonXFx1MjI3RCcsJ3NjZSc6J1xcdTJBQjAnLCdzY0UnOidcXHUyQUI0Jywnc2NlZGlsJzonXFx1MDE1RicsJ1NjZWRpbCc6J1xcdTAxNUUnLCdzY2lyYyc6J1xcdTAxNUQnLCdTY2lyYyc6J1xcdTAxNUMnLCdzY25hcCc6J1xcdTJBQkEnLCdzY25FJzonXFx1MkFCNicsJ3NjbnNpbSc6J1xcdTIyRTknLCdzY3BvbGludCc6J1xcdTJBMTMnLCdzY3NpbSc6J1xcdTIyN0YnLCdzY3knOidcXHUwNDQxJywnU2N5JzonXFx1MDQyMScsJ3Nkb3QnOidcXHUyMkM1Jywnc2RvdGInOidcXHUyMkExJywnc2RvdGUnOidcXHUyQTY2Jywnc2VhcmhrJzonXFx1MjkyNScsJ3NlYXJyJzonXFx1MjE5OCcsJ3NlQXJyJzonXFx1MjFEOCcsJ3NlYXJyb3cnOidcXHUyMTk4Jywnc2VjdCc6J1xceEE3Jywnc2VtaSc6JzsnLCdzZXN3YXInOidcXHUyOTI5Jywnc2V0bWludXMnOidcXHUyMjE2Jywnc2V0bW4nOidcXHUyMjE2Jywnc2V4dCc6J1xcdTI3MzYnLCdzZnInOidcXHVEODM1XFx1REQzMCcsJ1Nmcic6J1xcdUQ4MzVcXHVERDE2Jywnc2Zyb3duJzonXFx1MjMyMicsJ3NoYXJwJzonXFx1MjY2RicsJ3NoY2hjeSc6J1xcdTA0NDknLCdTSENIY3knOidcXHUwNDI5Jywnc2hjeSc6J1xcdTA0NDgnLCdTSGN5JzonXFx1MDQyOCcsJ1Nob3J0RG93bkFycm93JzonXFx1MjE5MycsJ1Nob3J0TGVmdEFycm93JzonXFx1MjE5MCcsJ3Nob3J0bWlkJzonXFx1MjIyMycsJ3Nob3J0cGFyYWxsZWwnOidcXHUyMjI1JywnU2hvcnRSaWdodEFycm93JzonXFx1MjE5MicsJ1Nob3J0VXBBcnJvdyc6J1xcdTIxOTEnLCdzaHknOidcXHhBRCcsJ3NpZ21hJzonXFx1MDNDMycsJ1NpZ21hJzonXFx1MDNBMycsJ3NpZ21hZic6J1xcdTAzQzInLCdzaWdtYXYnOidcXHUwM0MyJywnc2ltJzonXFx1MjIzQycsJ3NpbWRvdCc6J1xcdTJBNkEnLCdzaW1lJzonXFx1MjI0MycsJ3NpbWVxJzonXFx1MjI0MycsJ3NpbWcnOidcXHUyQTlFJywnc2ltZ0UnOidcXHUyQUEwJywnc2ltbCc6J1xcdTJBOUQnLCdzaW1sRSc6J1xcdTJBOUYnLCdzaW1uZSc6J1xcdTIyNDYnLCdzaW1wbHVzJzonXFx1MkEyNCcsJ3NpbXJhcnInOidcXHUyOTcyJywnc2xhcnInOidcXHUyMTkwJywnU21hbGxDaXJjbGUnOidcXHUyMjE4Jywnc21hbGxzZXRtaW51cyc6J1xcdTIyMTYnLCdzbWFzaHAnOidcXHUyQTMzJywnc21lcGFyc2wnOidcXHUyOUU0Jywnc21pZCc6J1xcdTIyMjMnLCdzbWlsZSc6J1xcdTIzMjMnLCdzbXQnOidcXHUyQUFBJywnc210ZSc6J1xcdTJBQUMnLCdzbXRlcyc6J1xcdTJBQUNcXHVGRTAwJywnc29mdGN5JzonXFx1MDQ0QycsJ1NPRlRjeSc6J1xcdTA0MkMnLCdzb2wnOicvJywnc29sYic6J1xcdTI5QzQnLCdzb2xiYXInOidcXHUyMzNGJywnc29wZic6J1xcdUQ4MzVcXHVERDY0JywnU29wZic6J1xcdUQ4MzVcXHVERDRBJywnc3BhZGVzJzonXFx1MjY2MCcsJ3NwYWRlc3VpdCc6J1xcdTI2NjAnLCdzcGFyJzonXFx1MjIyNScsJ3NxY2FwJzonXFx1MjI5MycsJ3NxY2Fwcyc6J1xcdTIyOTNcXHVGRTAwJywnc3FjdXAnOidcXHUyMjk0Jywnc3FjdXBzJzonXFx1MjI5NFxcdUZFMDAnLCdTcXJ0JzonXFx1MjIxQScsJ3Nxc3ViJzonXFx1MjI4RicsJ3Nxc3ViZSc6J1xcdTIyOTEnLCdzcXN1YnNldCc6J1xcdTIyOEYnLCdzcXN1YnNldGVxJzonXFx1MjI5MScsJ3Nxc3VwJzonXFx1MjI5MCcsJ3Nxc3VwZSc6J1xcdTIyOTInLCdzcXN1cHNldCc6J1xcdTIyOTAnLCdzcXN1cHNldGVxJzonXFx1MjI5MicsJ3NxdSc6J1xcdTI1QTEnLCdzcXVhcmUnOidcXHUyNUExJywnU3F1YXJlJzonXFx1MjVBMScsJ1NxdWFyZUludGVyc2VjdGlvbic6J1xcdTIyOTMnLCdTcXVhcmVTdWJzZXQnOidcXHUyMjhGJywnU3F1YXJlU3Vic2V0RXF1YWwnOidcXHUyMjkxJywnU3F1YXJlU3VwZXJzZXQnOidcXHUyMjkwJywnU3F1YXJlU3VwZXJzZXRFcXVhbCc6J1xcdTIyOTInLCdTcXVhcmVVbmlvbic6J1xcdTIyOTQnLCdzcXVhcmYnOidcXHUyNUFBJywnc3F1Zic6J1xcdTI1QUEnLCdzcmFycic6J1xcdTIxOTInLCdzc2NyJzonXFx1RDgzNVxcdURDQzgnLCdTc2NyJzonXFx1RDgzNVxcdURDQUUnLCdzc2V0bW4nOidcXHUyMjE2Jywnc3NtaWxlJzonXFx1MjMyMycsJ3NzdGFyZic6J1xcdTIyQzYnLCdzdGFyJzonXFx1MjYwNicsJ1N0YXInOidcXHUyMkM2Jywnc3RhcmYnOidcXHUyNjA1Jywnc3RyYWlnaHRlcHNpbG9uJzonXFx1MDNGNScsJ3N0cmFpZ2h0cGhpJzonXFx1MDNENScsJ3N0cm5zJzonXFx4QUYnLCdzdWInOidcXHUyMjgyJywnU3ViJzonXFx1MjJEMCcsJ3N1YmRvdCc6J1xcdTJBQkQnLCdzdWJlJzonXFx1MjI4NicsJ3N1YkUnOidcXHUyQUM1Jywnc3ViZWRvdCc6J1xcdTJBQzMnLCdzdWJtdWx0JzonXFx1MkFDMScsJ3N1Ym5lJzonXFx1MjI4QScsJ3N1Ym5FJzonXFx1MkFDQicsJ3N1YnBsdXMnOidcXHUyQUJGJywnc3VicmFycic6J1xcdTI5NzknLCdzdWJzZXQnOidcXHUyMjgyJywnU3Vic2V0JzonXFx1MjJEMCcsJ3N1YnNldGVxJzonXFx1MjI4NicsJ3N1YnNldGVxcSc6J1xcdTJBQzUnLCdTdWJzZXRFcXVhbCc6J1xcdTIyODYnLCdzdWJzZXRuZXEnOidcXHUyMjhBJywnc3Vic2V0bmVxcSc6J1xcdTJBQ0InLCdzdWJzaW0nOidcXHUyQUM3Jywnc3Vic3ViJzonXFx1MkFENScsJ3N1YnN1cCc6J1xcdTJBRDMnLCdzdWNjJzonXFx1MjI3QicsJ3N1Y2NhcHByb3gnOidcXHUyQUI4Jywnc3VjY2N1cmx5ZXEnOidcXHUyMjdEJywnU3VjY2VlZHMnOidcXHUyMjdCJywnU3VjY2VlZHNFcXVhbCc6J1xcdTJBQjAnLCdTdWNjZWVkc1NsYW50RXF1YWwnOidcXHUyMjdEJywnU3VjY2VlZHNUaWxkZSc6J1xcdTIyN0YnLCdzdWNjZXEnOidcXHUyQUIwJywnc3VjY25hcHByb3gnOidcXHUyQUJBJywnc3VjY25lcXEnOidcXHUyQUI2Jywnc3VjY25zaW0nOidcXHUyMkU5Jywnc3VjY3NpbSc6J1xcdTIyN0YnLCdTdWNoVGhhdCc6J1xcdTIyMEInLCdzdW0nOidcXHUyMjExJywnU3VtJzonXFx1MjIxMScsJ3N1bmcnOidcXHUyNjZBJywnc3VwJzonXFx1MjI4MycsJ1N1cCc6J1xcdTIyRDEnLCdzdXAxJzonXFx4QjknLCdzdXAyJzonXFx4QjInLCdzdXAzJzonXFx4QjMnLCdzdXBkb3QnOidcXHUyQUJFJywnc3VwZHN1Yic6J1xcdTJBRDgnLCdzdXBlJzonXFx1MjI4NycsJ3N1cEUnOidcXHUyQUM2Jywnc3VwZWRvdCc6J1xcdTJBQzQnLCdTdXBlcnNldCc6J1xcdTIyODMnLCdTdXBlcnNldEVxdWFsJzonXFx1MjI4NycsJ3N1cGhzb2wnOidcXHUyN0M5Jywnc3VwaHN1Yic6J1xcdTJBRDcnLCdzdXBsYXJyJzonXFx1Mjk3QicsJ3N1cG11bHQnOidcXHUyQUMyJywnc3VwbmUnOidcXHUyMjhCJywnc3VwbkUnOidcXHUyQUNDJywnc3VwcGx1cyc6J1xcdTJBQzAnLCdzdXBzZXQnOidcXHUyMjgzJywnU3Vwc2V0JzonXFx1MjJEMScsJ3N1cHNldGVxJzonXFx1MjI4NycsJ3N1cHNldGVxcSc6J1xcdTJBQzYnLCdzdXBzZXRuZXEnOidcXHUyMjhCJywnc3Vwc2V0bmVxcSc6J1xcdTJBQ0MnLCdzdXBzaW0nOidcXHUyQUM4Jywnc3Vwc3ViJzonXFx1MkFENCcsJ3N1cHN1cCc6J1xcdTJBRDYnLCdzd2FyaGsnOidcXHUyOTI2Jywnc3dhcnInOidcXHUyMTk5Jywnc3dBcnInOidcXHUyMUQ5Jywnc3dhcnJvdyc6J1xcdTIxOTknLCdzd253YXInOidcXHUyOTJBJywnc3psaWcnOidcXHhERicsJ1RhYic6J1xcdCcsJ3RhcmdldCc6J1xcdTIzMTYnLCd0YXUnOidcXHUwM0M0JywnVGF1JzonXFx1MDNBNCcsJ3RicmsnOidcXHUyM0I0JywndGNhcm9uJzonXFx1MDE2NScsJ1RjYXJvbic6J1xcdTAxNjQnLCd0Y2VkaWwnOidcXHUwMTYzJywnVGNlZGlsJzonXFx1MDE2MicsJ3RjeSc6J1xcdTA0NDInLCdUY3knOidcXHUwNDIyJywndGRvdCc6J1xcdTIwREInLCd0ZWxyZWMnOidcXHUyMzE1JywndGZyJzonXFx1RDgzNVxcdUREMzEnLCdUZnInOidcXHVEODM1XFx1REQxNycsJ3RoZXJlNCc6J1xcdTIyMzQnLCd0aGVyZWZvcmUnOidcXHUyMjM0JywnVGhlcmVmb3JlJzonXFx1MjIzNCcsJ3RoZXRhJzonXFx1MDNCOCcsJ1RoZXRhJzonXFx1MDM5OCcsJ3RoZXRhc3ltJzonXFx1MDNEMScsJ3RoZXRhdic6J1xcdTAzRDEnLCd0aGlja2FwcHJveCc6J1xcdTIyNDgnLCd0aGlja3NpbSc6J1xcdTIyM0MnLCdUaGlja1NwYWNlJzonXFx1MjA1RlxcdTIwMEEnLCd0aGluc3AnOidcXHUyMDA5JywnVGhpblNwYWNlJzonXFx1MjAwOScsJ3Roa2FwJzonXFx1MjI0OCcsJ3Roa3NpbSc6J1xcdTIyM0MnLCd0aG9ybic6J1xceEZFJywnVEhPUk4nOidcXHhERScsJ3RpbGRlJzonXFx1MDJEQycsJ1RpbGRlJzonXFx1MjIzQycsJ1RpbGRlRXF1YWwnOidcXHUyMjQzJywnVGlsZGVGdWxsRXF1YWwnOidcXHUyMjQ1JywnVGlsZGVUaWxkZSc6J1xcdTIyNDgnLCd0aW1lcyc6J1xceEQ3JywndGltZXNiJzonXFx1MjJBMCcsJ3RpbWVzYmFyJzonXFx1MkEzMScsJ3RpbWVzZCc6J1xcdTJBMzAnLCd0aW50JzonXFx1MjIyRCcsJ3RvZWEnOidcXHUyOTI4JywndG9wJzonXFx1MjJBNCcsJ3RvcGJvdCc6J1xcdTIzMzYnLCd0b3BjaXInOidcXHUyQUYxJywndG9wZic6J1xcdUQ4MzVcXHVERDY1JywnVG9wZic6J1xcdUQ4MzVcXHVERDRCJywndG9wZm9yayc6J1xcdTJBREEnLCd0b3NhJzonXFx1MjkyOScsJ3RwcmltZSc6J1xcdTIwMzQnLCd0cmFkZSc6J1xcdTIxMjInLCdUUkFERSc6J1xcdTIxMjInLCd0cmlhbmdsZSc6J1xcdTI1QjUnLCd0cmlhbmdsZWRvd24nOidcXHUyNUJGJywndHJpYW5nbGVsZWZ0JzonXFx1MjVDMycsJ3RyaWFuZ2xlbGVmdGVxJzonXFx1MjJCNCcsJ3RyaWFuZ2xlcSc6J1xcdTIyNUMnLCd0cmlhbmdsZXJpZ2h0JzonXFx1MjVCOScsJ3RyaWFuZ2xlcmlnaHRlcSc6J1xcdTIyQjUnLCd0cmlkb3QnOidcXHUyNUVDJywndHJpZSc6J1xcdTIyNUMnLCd0cmltaW51cyc6J1xcdTJBM0EnLCdUcmlwbGVEb3QnOidcXHUyMERCJywndHJpcGx1cyc6J1xcdTJBMzknLCd0cmlzYic6J1xcdTI5Q0QnLCd0cml0aW1lJzonXFx1MkEzQicsJ3RycGV6aXVtJzonXFx1MjNFMicsJ3RzY3InOidcXHVEODM1XFx1RENDOScsJ1RzY3InOidcXHVEODM1XFx1RENBRicsJ3RzY3knOidcXHUwNDQ2JywnVFNjeSc6J1xcdTA0MjYnLCd0c2hjeSc6J1xcdTA0NUInLCdUU0hjeSc6J1xcdTA0MEInLCd0c3Ryb2snOidcXHUwMTY3JywnVHN0cm9rJzonXFx1MDE2NicsJ3R3aXh0JzonXFx1MjI2QycsJ3R3b2hlYWRsZWZ0YXJyb3cnOidcXHUyMTlFJywndHdvaGVhZHJpZ2h0YXJyb3cnOidcXHUyMUEwJywndWFjdXRlJzonXFx4RkEnLCdVYWN1dGUnOidcXHhEQScsJ3VhcnInOidcXHUyMTkxJywndUFycic6J1xcdTIxRDEnLCdVYXJyJzonXFx1MjE5RicsJ1VhcnJvY2lyJzonXFx1Mjk0OScsJ3VicmN5JzonXFx1MDQ1RScsJ1VicmN5JzonXFx1MDQwRScsJ3VicmV2ZSc6J1xcdTAxNkQnLCdVYnJldmUnOidcXHUwMTZDJywndWNpcmMnOidcXHhGQicsJ1VjaXJjJzonXFx4REInLCd1Y3knOidcXHUwNDQzJywnVWN5JzonXFx1MDQyMycsJ3VkYXJyJzonXFx1MjFDNScsJ3VkYmxhYyc6J1xcdTAxNzEnLCdVZGJsYWMnOidcXHUwMTcwJywndWRoYXInOidcXHUyOTZFJywndWZpc2h0JzonXFx1Mjk3RScsJ3Vmcic6J1xcdUQ4MzVcXHVERDMyJywnVWZyJzonXFx1RDgzNVxcdUREMTgnLCd1Z3JhdmUnOidcXHhGOScsJ1VncmF2ZSc6J1xceEQ5JywndUhhcic6J1xcdTI5NjMnLCd1aGFybCc6J1xcdTIxQkYnLCd1aGFycic6J1xcdTIxQkUnLCd1aGJsayc6J1xcdTI1ODAnLCd1bGNvcm4nOidcXHUyMzFDJywndWxjb3JuZXInOidcXHUyMzFDJywndWxjcm9wJzonXFx1MjMwRicsJ3VsdHJpJzonXFx1MjVGOCcsJ3VtYWNyJzonXFx1MDE2QicsJ1VtYWNyJzonXFx1MDE2QScsJ3VtbCc6J1xceEE4JywnVW5kZXJCYXInOidfJywnVW5kZXJCcmFjZSc6J1xcdTIzREYnLCdVbmRlckJyYWNrZXQnOidcXHUyM0I1JywnVW5kZXJQYXJlbnRoZXNpcyc6J1xcdTIzREQnLCdVbmlvbic6J1xcdTIyQzMnLCdVbmlvblBsdXMnOidcXHUyMjhFJywndW9nb24nOidcXHUwMTczJywnVW9nb24nOidcXHUwMTcyJywndW9wZic6J1xcdUQ4MzVcXHVERDY2JywnVW9wZic6J1xcdUQ4MzVcXHVERDRDJywndXBhcnJvdyc6J1xcdTIxOTEnLCdVcGFycm93JzonXFx1MjFEMScsJ1VwQXJyb3cnOidcXHUyMTkxJywnVXBBcnJvd0Jhcic6J1xcdTI5MTInLCdVcEFycm93RG93bkFycm93JzonXFx1MjFDNScsJ3VwZG93bmFycm93JzonXFx1MjE5NScsJ1VwZG93bmFycm93JzonXFx1MjFENScsJ1VwRG93bkFycm93JzonXFx1MjE5NScsJ1VwRXF1aWxpYnJpdW0nOidcXHUyOTZFJywndXBoYXJwb29ubGVmdCc6J1xcdTIxQkYnLCd1cGhhcnBvb25yaWdodCc6J1xcdTIxQkUnLCd1cGx1cyc6J1xcdTIyOEUnLCdVcHBlckxlZnRBcnJvdyc6J1xcdTIxOTYnLCdVcHBlclJpZ2h0QXJyb3cnOidcXHUyMTk3JywndXBzaSc6J1xcdTAzQzUnLCdVcHNpJzonXFx1MDNEMicsJ3Vwc2loJzonXFx1MDNEMicsJ3Vwc2lsb24nOidcXHUwM0M1JywnVXBzaWxvbic6J1xcdTAzQTUnLCdVcFRlZSc6J1xcdTIyQTUnLCdVcFRlZUFycm93JzonXFx1MjFBNScsJ3VwdXBhcnJvd3MnOidcXHUyMUM4JywndXJjb3JuJzonXFx1MjMxRCcsJ3VyY29ybmVyJzonXFx1MjMxRCcsJ3VyY3JvcCc6J1xcdTIzMEUnLCd1cmluZyc6J1xcdTAxNkYnLCdVcmluZyc6J1xcdTAxNkUnLCd1cnRyaSc6J1xcdTI1RjknLCd1c2NyJzonXFx1RDgzNVxcdURDQ0EnLCdVc2NyJzonXFx1RDgzNVxcdURDQjAnLCd1dGRvdCc6J1xcdTIyRjAnLCd1dGlsZGUnOidcXHUwMTY5JywnVXRpbGRlJzonXFx1MDE2OCcsJ3V0cmknOidcXHUyNUI1JywndXRyaWYnOidcXHUyNUI0JywndXVhcnInOidcXHUyMUM4JywndXVtbCc6J1xceEZDJywnVXVtbCc6J1xceERDJywndXdhbmdsZSc6J1xcdTI5QTcnLCd2YW5ncnQnOidcXHUyOTlDJywndmFyZXBzaWxvbic6J1xcdTAzRjUnLCd2YXJrYXBwYSc6J1xcdTAzRjAnLCd2YXJub3RoaW5nJzonXFx1MjIwNScsJ3ZhcnBoaSc6J1xcdTAzRDUnLCd2YXJwaSc6J1xcdTAzRDYnLCd2YXJwcm9wdG8nOidcXHUyMjFEJywndmFycic6J1xcdTIxOTUnLCd2QXJyJzonXFx1MjFENScsJ3ZhcnJobyc6J1xcdTAzRjEnLCd2YXJzaWdtYSc6J1xcdTAzQzInLCd2YXJzdWJzZXRuZXEnOidcXHUyMjhBXFx1RkUwMCcsJ3ZhcnN1YnNldG5lcXEnOidcXHUyQUNCXFx1RkUwMCcsJ3ZhcnN1cHNldG5lcSc6J1xcdTIyOEJcXHVGRTAwJywndmFyc3Vwc2V0bmVxcSc6J1xcdTJBQ0NcXHVGRTAwJywndmFydGhldGEnOidcXHUwM0QxJywndmFydHJpYW5nbGVsZWZ0JzonXFx1MjJCMicsJ3ZhcnRyaWFuZ2xlcmlnaHQnOidcXHUyMkIzJywndkJhcic6J1xcdTJBRTgnLCdWYmFyJzonXFx1MkFFQicsJ3ZCYXJ2JzonXFx1MkFFOScsJ3ZjeSc6J1xcdTA0MzInLCdWY3knOidcXHUwNDEyJywndmRhc2gnOidcXHUyMkEyJywndkRhc2gnOidcXHUyMkE4JywnVmRhc2gnOidcXHUyMkE5JywnVkRhc2gnOidcXHUyMkFCJywnVmRhc2hsJzonXFx1MkFFNicsJ3ZlZSc6J1xcdTIyMjgnLCdWZWUnOidcXHUyMkMxJywndmVlYmFyJzonXFx1MjJCQicsJ3ZlZWVxJzonXFx1MjI1QScsJ3ZlbGxpcCc6J1xcdTIyRUUnLCd2ZXJiYXInOid8JywnVmVyYmFyJzonXFx1MjAxNicsJ3ZlcnQnOid8JywnVmVydCc6J1xcdTIwMTYnLCdWZXJ0aWNhbEJhcic6J1xcdTIyMjMnLCdWZXJ0aWNhbExpbmUnOid8JywnVmVydGljYWxTZXBhcmF0b3InOidcXHUyNzU4JywnVmVydGljYWxUaWxkZSc6J1xcdTIyNDAnLCdWZXJ5VGhpblNwYWNlJzonXFx1MjAwQScsJ3Zmcic6J1xcdUQ4MzVcXHVERDMzJywnVmZyJzonXFx1RDgzNVxcdUREMTknLCd2bHRyaSc6J1xcdTIyQjInLCd2bnN1Yic6J1xcdTIyODJcXHUyMEQyJywndm5zdXAnOidcXHUyMjgzXFx1MjBEMicsJ3ZvcGYnOidcXHVEODM1XFx1REQ2NycsJ1ZvcGYnOidcXHVEODM1XFx1REQ0RCcsJ3Zwcm9wJzonXFx1MjIxRCcsJ3ZydHJpJzonXFx1MjJCMycsJ3ZzY3InOidcXHVEODM1XFx1RENDQicsJ1ZzY3InOidcXHVEODM1XFx1RENCMScsJ3ZzdWJuZSc6J1xcdTIyOEFcXHVGRTAwJywndnN1Ym5FJzonXFx1MkFDQlxcdUZFMDAnLCd2c3VwbmUnOidcXHUyMjhCXFx1RkUwMCcsJ3ZzdXBuRSc6J1xcdTJBQ0NcXHVGRTAwJywnVnZkYXNoJzonXFx1MjJBQScsJ3Z6aWd6YWcnOidcXHUyOTlBJywnd2NpcmMnOidcXHUwMTc1JywnV2NpcmMnOidcXHUwMTc0Jywnd2VkYmFyJzonXFx1MkE1RicsJ3dlZGdlJzonXFx1MjIyNycsJ1dlZGdlJzonXFx1MjJDMCcsJ3dlZGdlcSc6J1xcdTIyNTknLCd3ZWllcnAnOidcXHUyMTE4Jywnd2ZyJzonXFx1RDgzNVxcdUREMzQnLCdXZnInOidcXHVEODM1XFx1REQxQScsJ3dvcGYnOidcXHVEODM1XFx1REQ2OCcsJ1dvcGYnOidcXHVEODM1XFx1REQ0RScsJ3dwJzonXFx1MjExOCcsJ3dyJzonXFx1MjI0MCcsJ3dyZWF0aCc6J1xcdTIyNDAnLCd3c2NyJzonXFx1RDgzNVxcdURDQ0MnLCdXc2NyJzonXFx1RDgzNVxcdURDQjInLCd4Y2FwJzonXFx1MjJDMicsJ3hjaXJjJzonXFx1MjVFRicsJ3hjdXAnOidcXHUyMkMzJywneGR0cmknOidcXHUyNUJEJywneGZyJzonXFx1RDgzNVxcdUREMzUnLCdYZnInOidcXHVEODM1XFx1REQxQicsJ3hoYXJyJzonXFx1MjdGNycsJ3hoQXJyJzonXFx1MjdGQScsJ3hpJzonXFx1MDNCRScsJ1hpJzonXFx1MDM5RScsJ3hsYXJyJzonXFx1MjdGNScsJ3hsQXJyJzonXFx1MjdGOCcsJ3htYXAnOidcXHUyN0ZDJywneG5pcyc6J1xcdTIyRkInLCd4b2RvdCc6J1xcdTJBMDAnLCd4b3BmJzonXFx1RDgzNVxcdURENjknLCdYb3BmJzonXFx1RDgzNVxcdURENEYnLCd4b3BsdXMnOidcXHUyQTAxJywneG90aW1lJzonXFx1MkEwMicsJ3hyYXJyJzonXFx1MjdGNicsJ3hyQXJyJzonXFx1MjdGOScsJ3hzY3InOidcXHVEODM1XFx1RENDRCcsJ1hzY3InOidcXHVEODM1XFx1RENCMycsJ3hzcWN1cCc6J1xcdTJBMDYnLCd4dXBsdXMnOidcXHUyQTA0JywneHV0cmknOidcXHUyNUIzJywneHZlZSc6J1xcdTIyQzEnLCd4d2VkZ2UnOidcXHUyMkMwJywneWFjdXRlJzonXFx4RkQnLCdZYWN1dGUnOidcXHhERCcsJ3lhY3knOidcXHUwNDRGJywnWUFjeSc6J1xcdTA0MkYnLCd5Y2lyYyc6J1xcdTAxNzcnLCdZY2lyYyc6J1xcdTAxNzYnLCd5Y3knOidcXHUwNDRCJywnWWN5JzonXFx1MDQyQicsJ3llbic6J1xceEE1JywneWZyJzonXFx1RDgzNVxcdUREMzYnLCdZZnInOidcXHVEODM1XFx1REQxQycsJ3lpY3knOidcXHUwNDU3JywnWUljeSc6J1xcdTA0MDcnLCd5b3BmJzonXFx1RDgzNVxcdURENkEnLCdZb3BmJzonXFx1RDgzNVxcdURENTAnLCd5c2NyJzonXFx1RDgzNVxcdURDQ0UnLCdZc2NyJzonXFx1RDgzNVxcdURDQjQnLCd5dWN5JzonXFx1MDQ0RScsJ1lVY3knOidcXHUwNDJFJywneXVtbCc6J1xceEZGJywnWXVtbCc6J1xcdTAxNzgnLCd6YWN1dGUnOidcXHUwMTdBJywnWmFjdXRlJzonXFx1MDE3OScsJ3pjYXJvbic6J1xcdTAxN0UnLCdaY2Fyb24nOidcXHUwMTdEJywnemN5JzonXFx1MDQzNycsJ1pjeSc6J1xcdTA0MTcnLCd6ZG90JzonXFx1MDE3QycsJ1pkb3QnOidcXHUwMTdCJywnemVldHJmJzonXFx1MjEyOCcsJ1plcm9XaWR0aFNwYWNlJzonXFx1MjAwQicsJ3pldGEnOidcXHUwM0I2JywnWmV0YSc6J1xcdTAzOTYnLCd6ZnInOidcXHVEODM1XFx1REQzNycsJ1pmcic6J1xcdTIxMjgnLCd6aGN5JzonXFx1MDQzNicsJ1pIY3knOidcXHUwNDE2JywnemlncmFycic6J1xcdTIxREQnLCd6b3BmJzonXFx1RDgzNVxcdURENkInLCdab3BmJzonXFx1MjEyNCcsJ3pzY3InOidcXHVEODM1XFx1RENDRicsJ1pzY3InOidcXHVEODM1XFx1RENCNScsJ3p3aic6J1xcdTIwMEQnLCd6d25qJzonXFx1MjAwQyd9O1xuXHR2YXIgZGVjb2RlTWFwTGVnYWN5ID0geydhYWN1dGUnOidcXHhFMScsJ0FhY3V0ZSc6J1xceEMxJywnYWNpcmMnOidcXHhFMicsJ0FjaXJjJzonXFx4QzInLCdhY3V0ZSc6J1xceEI0JywnYWVsaWcnOidcXHhFNicsJ0FFbGlnJzonXFx4QzYnLCdhZ3JhdmUnOidcXHhFMCcsJ0FncmF2ZSc6J1xceEMwJywnYW1wJzonJicsJ0FNUCc6JyYnLCdhcmluZyc6J1xceEU1JywnQXJpbmcnOidcXHhDNScsJ2F0aWxkZSc6J1xceEUzJywnQXRpbGRlJzonXFx4QzMnLCdhdW1sJzonXFx4RTQnLCdBdW1sJzonXFx4QzQnLCdicnZiYXInOidcXHhBNicsJ2NjZWRpbCc6J1xceEU3JywnQ2NlZGlsJzonXFx4QzcnLCdjZWRpbCc6J1xceEI4JywnY2VudCc6J1xceEEyJywnY29weSc6J1xceEE5JywnQ09QWSc6J1xceEE5JywnY3VycmVuJzonXFx4QTQnLCdkZWcnOidcXHhCMCcsJ2RpdmlkZSc6J1xceEY3JywnZWFjdXRlJzonXFx4RTknLCdFYWN1dGUnOidcXHhDOScsJ2VjaXJjJzonXFx4RUEnLCdFY2lyYyc6J1xceENBJywnZWdyYXZlJzonXFx4RTgnLCdFZ3JhdmUnOidcXHhDOCcsJ2V0aCc6J1xceEYwJywnRVRIJzonXFx4RDAnLCdldW1sJzonXFx4RUInLCdFdW1sJzonXFx4Q0InLCdmcmFjMTInOidcXHhCRCcsJ2ZyYWMxNCc6J1xceEJDJywnZnJhYzM0JzonXFx4QkUnLCdndCc6Jz4nLCdHVCc6Jz4nLCdpYWN1dGUnOidcXHhFRCcsJ0lhY3V0ZSc6J1xceENEJywnaWNpcmMnOidcXHhFRScsJ0ljaXJjJzonXFx4Q0UnLCdpZXhjbCc6J1xceEExJywnaWdyYXZlJzonXFx4RUMnLCdJZ3JhdmUnOidcXHhDQycsJ2lxdWVzdCc6J1xceEJGJywnaXVtbCc6J1xceEVGJywnSXVtbCc6J1xceENGJywnbGFxdW8nOidcXHhBQicsJ2x0JzonPCcsJ0xUJzonPCcsJ21hY3InOidcXHhBRicsJ21pY3JvJzonXFx4QjUnLCdtaWRkb3QnOidcXHhCNycsJ25ic3AnOidcXHhBMCcsJ25vdCc6J1xceEFDJywnbnRpbGRlJzonXFx4RjEnLCdOdGlsZGUnOidcXHhEMScsJ29hY3V0ZSc6J1xceEYzJywnT2FjdXRlJzonXFx4RDMnLCdvY2lyYyc6J1xceEY0JywnT2NpcmMnOidcXHhENCcsJ29ncmF2ZSc6J1xceEYyJywnT2dyYXZlJzonXFx4RDInLCdvcmRmJzonXFx4QUEnLCdvcmRtJzonXFx4QkEnLCdvc2xhc2gnOidcXHhGOCcsJ09zbGFzaCc6J1xceEQ4Jywnb3RpbGRlJzonXFx4RjUnLCdPdGlsZGUnOidcXHhENScsJ291bWwnOidcXHhGNicsJ091bWwnOidcXHhENicsJ3BhcmEnOidcXHhCNicsJ3BsdXNtbic6J1xceEIxJywncG91bmQnOidcXHhBMycsJ3F1b3QnOidcIicsJ1FVT1QnOidcIicsJ3JhcXVvJzonXFx4QkInLCdyZWcnOidcXHhBRScsJ1JFRyc6J1xceEFFJywnc2VjdCc6J1xceEE3Jywnc2h5JzonXFx4QUQnLCdzdXAxJzonXFx4QjknLCdzdXAyJzonXFx4QjInLCdzdXAzJzonXFx4QjMnLCdzemxpZyc6J1xceERGJywndGhvcm4nOidcXHhGRScsJ1RIT1JOJzonXFx4REUnLCd0aW1lcyc6J1xceEQ3JywndWFjdXRlJzonXFx4RkEnLCdVYWN1dGUnOidcXHhEQScsJ3VjaXJjJzonXFx4RkInLCdVY2lyYyc6J1xceERCJywndWdyYXZlJzonXFx4RjknLCdVZ3JhdmUnOidcXHhEOScsJ3VtbCc6J1xceEE4JywndXVtbCc6J1xceEZDJywnVXVtbCc6J1xceERDJywneWFjdXRlJzonXFx4RkQnLCdZYWN1dGUnOidcXHhERCcsJ3llbic6J1xceEE1JywneXVtbCc6J1xceEZGJ307XG5cdHZhciBkZWNvZGVNYXBOdW1lcmljID0geycwJzonXFx1RkZGRCcsJzEyOCc6J1xcdTIwQUMnLCcxMzAnOidcXHUyMDFBJywnMTMxJzonXFx1MDE5MicsJzEzMic6J1xcdTIwMUUnLCcxMzMnOidcXHUyMDI2JywnMTM0JzonXFx1MjAyMCcsJzEzNSc6J1xcdTIwMjEnLCcxMzYnOidcXHUwMkM2JywnMTM3JzonXFx1MjAzMCcsJzEzOCc6J1xcdTAxNjAnLCcxMzknOidcXHUyMDM5JywnMTQwJzonXFx1MDE1MicsJzE0Mic6J1xcdTAxN0QnLCcxNDUnOidcXHUyMDE4JywnMTQ2JzonXFx1MjAxOScsJzE0Nyc6J1xcdTIwMUMnLCcxNDgnOidcXHUyMDFEJywnMTQ5JzonXFx1MjAyMicsJzE1MCc6J1xcdTIwMTMnLCcxNTEnOidcXHUyMDE0JywnMTUyJzonXFx1MDJEQycsJzE1Myc6J1xcdTIxMjInLCcxNTQnOidcXHUwMTYxJywnMTU1JzonXFx1MjAzQScsJzE1Nic6J1xcdTAxNTMnLCcxNTgnOidcXHUwMTdFJywnMTU5JzonXFx1MDE3OCd9O1xuXHR2YXIgaW52YWxpZFJlZmVyZW5jZUNvZGVQb2ludHMgPSBbMSwyLDMsNCw1LDYsNyw4LDExLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDY0OTc2LDY0OTc3LDY0OTc4LDY0OTc5LDY0OTgwLDY0OTgxLDY0OTgyLDY0OTgzLDY0OTg0LDY0OTg1LDY0OTg2LDY0OTg3LDY0OTg4LDY0OTg5LDY0OTkwLDY0OTkxLDY0OTkyLDY0OTkzLDY0OTk0LDY0OTk1LDY0OTk2LDY0OTk3LDY0OTk4LDY0OTk5LDY1MDAwLDY1MDAxLDY1MDAyLDY1MDAzLDY1MDA0LDY1MDA1LDY1MDA2LDY1MDA3LDY1NTM0LDY1NTM1LDEzMTA3MCwxMzEwNzEsMTk2NjA2LDE5NjYwNywyNjIxNDIsMjYyMTQzLDMyNzY3OCwzMjc2NzksMzkzMjE0LDM5MzIxNSw0NTg3NTAsNDU4NzUxLDUyNDI4Niw1MjQyODcsNTg5ODIyLDU4OTgyMyw2NTUzNTgsNjU1MzU5LDcyMDg5NCw3MjA4OTUsNzg2NDMwLDc4NjQzMSw4NTE5NjYsODUxOTY3LDkxNzUwMiw5MTc1MDMsOTgzMDM4LDk4MzAzOSwxMDQ4NTc0LDEwNDg1NzUsMTExNDExMCwxMTE0MTExXTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuXHR2YXIgb2JqZWN0ID0ge307XG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIGhhcyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHlOYW1lKSB7XG5cdFx0cmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eU5hbWUpO1xuXHR9O1xuXG5cdHZhciBjb250YWlucyA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkge1xuXHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdGlmIChhcnJheVtpbmRleF0gPT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHR2YXIgbWVyZ2UgPSBmdW5jdGlvbihvcHRpb25zLCBkZWZhdWx0cykge1xuXHRcdGlmICghb3B0aW9ucykge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRzO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0dmFyIGtleTtcblx0XHRmb3IgKGtleSBpbiBkZWZhdWx0cykge1xuXHRcdFx0Ly8gQSBgaGFzT3duUHJvcGVydHlgIGNoZWNrIGlzIG5vdCBuZWVkZWQgaGVyZSwgc2luY2Ugb25seSByZWNvZ25pemVkXG5cdFx0XHQvLyBvcHRpb24gbmFtZXMgYXJlIHVzZWQgYW55d2F5LiBBbnkgb3RoZXJzIGFyZSBpZ25vcmVkLlxuXHRcdFx0cmVzdWx0W2tleV0gPSBoYXMob3B0aW9ucywga2V5KSA/IG9wdGlvbnNba2V5XSA6IGRlZmF1bHRzW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0Ly8gTW9kaWZpZWQgdmVyc2lvbiBvZiBgdWNzMmVuY29kZWA7IHNlZSBodHRwczovL210aHMuYmUvcHVueWNvZGUuXG5cdHZhciBjb2RlUG9pbnRUb1N5bWJvbCA9IGZ1bmN0aW9uKGNvZGVQb2ludCwgc3RyaWN0KSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdGlmICgoY29kZVBvaW50ID49IDB4RDgwMCAmJiBjb2RlUG9pbnQgPD0gMHhERkZGKSB8fCBjb2RlUG9pbnQgPiAweDEwRkZGRikge1xuXHRcdFx0Ly8gU2VlIGlzc3VlICM0OlxuXHRcdFx0Ly8g4oCcT3RoZXJ3aXNlLCBpZiB0aGUgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAweEQ4MDAgdG8gMHhERkZGIG9yIGlzXG5cdFx0XHQvLyBncmVhdGVyIHRoYW4gMHgxMEZGRkYsIHRoZW4gdGhpcyBpcyBhIHBhcnNlIGVycm9yLiBSZXR1cm4gYSBVK0ZGRkRcblx0XHRcdC8vIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi7igJ1cblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcignY2hhcmFjdGVyIHJlZmVyZW5jZSBvdXRzaWRlIHRoZSBwZXJtaXNzaWJsZSBVbmljb2RlIHJhbmdlJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJ1xcdUZGRkQnO1xuXHRcdH1cblx0XHRpZiAoaGFzKGRlY29kZU1hcE51bWVyaWMsIGNvZGVQb2ludCkpIHtcblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcignZGlzYWxsb3dlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGVjb2RlTWFwTnVtZXJpY1tjb2RlUG9pbnRdO1xuXHRcdH1cblx0XHRpZiAoc3RyaWN0ICYmIGNvbnRhaW5zKGludmFsaWRSZWZlcmVuY2VDb2RlUG9pbnRzLCBjb2RlUG9pbnQpKSB7XG5cdFx0XHRwYXJzZUVycm9yKCdkaXNhbGxvd2VkIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuXHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRjtcblx0XHR9XG5cdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZShjb2RlUG9pbnQpO1xuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0dmFyIGhleEVzY2FwZSA9IGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuXHRcdHJldHVybiAnJiN4JyArIGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArICc7Jztcblx0fTtcblxuXHR2YXIgZGVjRXNjYXBlID0gZnVuY3Rpb24oY29kZVBvaW50KSB7XG5cdFx0cmV0dXJuICcmIycgKyBjb2RlUG9pbnQgKyAnOyc7XG5cdH07XG5cblx0dmFyIHBhcnNlRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1BhcnNlIGVycm9yOiAnICsgbWVzc2FnZSk7XG5cdH07XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBlbmNvZGUub3B0aW9ucyk7XG5cdFx0dmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXHRcdGlmIChzdHJpY3QgJiYgcmVnZXhJbnZhbGlkUmF3Q29kZVBvaW50LnRlc3Qoc3RyaW5nKSkge1xuXHRcdFx0cGFyc2VFcnJvcignZm9yYmlkZGVuIGNvZGUgcG9pbnQnKTtcblx0XHR9XG5cdFx0dmFyIGVuY29kZUV2ZXJ5dGhpbmcgPSBvcHRpb25zLmVuY29kZUV2ZXJ5dGhpbmc7XG5cdFx0dmFyIHVzZU5hbWVkUmVmZXJlbmNlcyA9IG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzO1xuXHRcdHZhciBhbGxvd1Vuc2FmZVN5bWJvbHMgPSBvcHRpb25zLmFsbG93VW5zYWZlU3ltYm9scztcblx0XHR2YXIgZXNjYXBlQ29kZVBvaW50ID0gb3B0aW9ucy5kZWNpbWFsID8gZGVjRXNjYXBlIDogaGV4RXNjYXBlO1xuXG5cdFx0dmFyIGVzY2FwZUJtcFN5bWJvbCA9IGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIGVzY2FwZUNvZGVQb2ludChzeW1ib2wuY2hhckNvZGVBdCgwKSk7XG5cdFx0fTtcblxuXHRcdGlmIChlbmNvZGVFdmVyeXRoaW5nKSB7XG5cdFx0XHQvLyBFbmNvZGUgQVNDSUkgc3ltYm9scy5cblx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4QXNjaWlXaGl0ZWxpc3QsIGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0XHQvLyBVc2UgbmFtZWQgcmVmZXJlbmNlcyBpZiByZXF1ZXN0ZWQgJiBwb3NzaWJsZS5cblx0XHRcdFx0aWYgKHVzZU5hbWVkUmVmZXJlbmNlcyAmJiBoYXMoZW5jb2RlTWFwLCBzeW1ib2wpKSB7XG5cdFx0XHRcdFx0cmV0dXJuICcmJyArIGVuY29kZU1hcFtzeW1ib2xdICsgJzsnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlc2NhcGVCbXBTeW1ib2woc3ltYm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gU2hvcnRlbiBhIGZldyBlc2NhcGVzIHRoYXQgcmVwcmVzZW50IHR3byBzeW1ib2xzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmVcblx0XHRcdC8vIGlzIHdpdGhpbiB0aGUgQVNDSUkgcmFuZ2UuXG5cdFx0XHRpZiAodXNlTmFtZWRSZWZlcmVuY2VzKSB7XG5cdFx0XHRcdHN0cmluZyA9IHN0cmluZ1xuXHRcdFx0XHRcdC5yZXBsYWNlKC8mZ3Q7XFx1MjBEMi9nLCAnJm52Z3Q7Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJmx0O1xcdTIwRDIvZywgJyZudmx0OycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjeDY2OyYjeDZBOy9nLCAnJmZqbGlnOycpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW5jb2RlIG5vbi1BU0NJSSBzeW1ib2xzLlxuXHRcdFx0aWYgKHVzZU5hbWVkUmVmZXJlbmNlcykge1xuXHRcdFx0XHQvLyBFbmNvZGUgbm9uLUFTQ0lJIHN5bWJvbHMgdGhhdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIG5hbWVkIHJlZmVyZW5jZS5cblx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFbmNvZGVOb25Bc2NpaSwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGVuY29kZU1hcCwgc3RyaW5nKWAgaGVyZS5cblx0XHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N0cmluZ10gKyAnOyc7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm90ZTogYW55IHJlbWFpbmluZyBub24tQVNDSUkgc3ltYm9scyBhcmUgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBgaWZgLlxuXHRcdH0gZWxzZSBpZiAodXNlTmFtZWRSZWZlcmVuY2VzKSB7XG5cdFx0XHQvLyBBcHBseSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cblx0XHRcdC8vIEVuY29kZSBgPD5cIicmYCB1c2luZyBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cblx0XHRcdGlmICghYWxsb3dVbnNhZmVTeW1ib2xzKSB7XG5cdFx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4RXNjYXBlLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N0cmluZ10gKyAnOyc7IC8vIG5vIG5lZWQgdG8gY2hlY2sgYGhhcygpYCBoZXJlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU2hvcnRlbiBlc2NhcGVzIHRoYXQgcmVwcmVzZW50IHR3byBzeW1ib2xzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmUgaXNcblx0XHRcdC8vIGA8PlwiJyZgLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nXG5cdFx0XHRcdC5yZXBsYWNlKC8mZ3Q7XFx1MjBEMi9nLCAnJm52Z3Q7Jylcblx0XHRcdFx0LnJlcGxhY2UoLyZsdDtcXHUyMEQyL2csICcmbnZsdDsnKTtcblx0XHRcdC8vIEVuY29kZSBub24tQVNDSUkgc3ltYm9scyB0aGF0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgbmFtZWQgcmVmZXJlbmNlLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFbmNvZGVOb25Bc2NpaSwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhlbmNvZGVNYXAsIHN0cmluZylgIGhlcmUuXG5cdFx0XHRcdHJldHVybiAnJicgKyBlbmNvZGVNYXBbc3RyaW5nXSArICc7Jztcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoIWFsbG93VW5zYWZlU3ltYm9scykge1xuXHRcdFx0Ly8gRW5jb2RlIGA8PlwiJyZgIHVzaW5nIGhleGFkZWNpbWFsIGVzY2FwZXMsIG5vdyB0aGF0IHRoZXnigJlyZSBub3QgaGFuZGxlZFxuXHRcdFx0Ly8gdXNpbmcgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleEVzY2FwZSwgZXNjYXBlQm1wU3ltYm9sKTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0cmluZ1xuXHRcdFx0Ly8gRW5jb2RlIGFzdHJhbCBzeW1ib2xzLlxuXHRcdFx0LnJlcGxhY2UocmVnZXhBc3RyYWxTeW1ib2xzLCBmdW5jdGlvbigkMCkge1xuXHRcdFx0XHQvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcblx0XHRcdFx0dmFyIGhpZ2ggPSAkMC5jaGFyQ29kZUF0KDApO1xuXHRcdFx0XHR2YXIgbG93ID0gJDAuY2hhckNvZGVBdCgxKTtcblx0XHRcdFx0dmFyIGNvZGVQb2ludCA9IChoaWdoIC0gMHhEODAwKSAqIDB4NDAwICsgbG93IC0gMHhEQzAwICsgMHgxMDAwMDtcblx0XHRcdFx0cmV0dXJuIGVzY2FwZUNvZGVQb2ludChjb2RlUG9pbnQpO1xuXHRcdFx0fSlcblx0XHRcdC8vIEVuY29kZSBhbnkgcmVtYWluaW5nIEJNUCBzeW1ib2xzIHRoYXQgYXJlIG5vdCBwcmludGFibGUgQVNDSUkgc3ltYm9sc1xuXHRcdFx0Ly8gdXNpbmcgYSBoZXhhZGVjaW1hbCBlc2NhcGUuXG5cdFx0XHQucmVwbGFjZShyZWdleEJtcFdoaXRlbGlzdCwgZXNjYXBlQm1wU3ltYm9sKTtcblx0fTtcblx0Ly8gRXhwb3NlIGRlZmF1bHQgb3B0aW9ucyAoc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSkuXG5cdGVuY29kZS5vcHRpb25zID0ge1xuXHRcdCdhbGxvd1Vuc2FmZVN5bWJvbHMnOiBmYWxzZSxcblx0XHQnZW5jb2RlRXZlcnl0aGluZyc6IGZhbHNlLFxuXHRcdCdzdHJpY3QnOiBmYWxzZSxcblx0XHQndXNlTmFtZWRSZWZlcmVuY2VzJzogZmFsc2UsXG5cdFx0J2RlY2ltYWwnIDogZmFsc2Vcblx0fTtcblxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaHRtbCwgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBkZWNvZGUub3B0aW9ucyk7XG5cdFx0dmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXHRcdGlmIChzdHJpY3QgJiYgcmVnZXhJbnZhbGlkRW50aXR5LnRlc3QoaHRtbCkpIHtcblx0XHRcdHBhcnNlRXJyb3IoJ21hbGZvcm1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBodG1sLnJlcGxhY2UocmVnZXhEZWNvZGUsIGZ1bmN0aW9uKCQwLCAkMSwgJDIsICQzLCAkNCwgJDUsICQ2LCAkNywgJDgpIHtcblx0XHRcdHZhciBjb2RlUG9pbnQ7XG5cdFx0XHR2YXIgc2VtaWNvbG9uO1xuXHRcdFx0dmFyIGRlY0RpZ2l0cztcblx0XHRcdHZhciBoZXhEaWdpdHM7XG5cdFx0XHR2YXIgcmVmZXJlbmNlO1xuXHRcdFx0dmFyIG5leHQ7XG5cblx0XHRcdGlmICgkMSkge1xuXHRcdFx0XHRyZWZlcmVuY2UgPSAkMTtcblx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGRlY29kZU1hcCwgcmVmZXJlbmNlKWAuXG5cdFx0XHRcdHJldHVybiBkZWNvZGVNYXBbcmVmZXJlbmNlXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCQyKSB7XG5cdFx0XHRcdC8vIERlY29kZSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB3aXRob3V0IHRyYWlsaW5nIGA7YCwgZS5nLiBgJmFtcGAuXG5cdFx0XHRcdC8vIFRoaXMgaXMgb25seSBhIHBhcnNlIGVycm9yIGlmIGl0IGdldHMgY29udmVydGVkIHRvIGAmYCwgb3IgaWYgaXQgaXNcblx0XHRcdFx0Ly8gZm9sbG93ZWQgYnkgYD1gIGluIGFuIGF0dHJpYnV0ZSBjb250ZXh0LlxuXHRcdFx0XHRyZWZlcmVuY2UgPSAkMjtcblx0XHRcdFx0bmV4dCA9ICQzO1xuXHRcdFx0XHRpZiAobmV4dCAmJiBvcHRpb25zLmlzQXR0cmlidXRlVmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoc3RyaWN0ICYmIG5leHQgPT0gJz0nKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUVycm9yKCdgJmAgZGlkIG5vdCBzdGFydCBhIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuICQwO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0XHRcdHBhcnNlRXJyb3IoXG5cdFx0XHRcdFx0XHRcdCduYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbidcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhkZWNvZGVNYXBMZWdhY3ksIHJlZmVyZW5jZSlgLlxuXHRcdFx0XHRcdHJldHVybiBkZWNvZGVNYXBMZWdhY3lbcmVmZXJlbmNlXSArIChuZXh0IHx8ICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJDQpIHtcblx0XHRcdFx0Ly8gRGVjb2RlIGRlY2ltYWwgZXNjYXBlcywgZS5nLiBgJiMxMTk1NTg7YC5cblx0XHRcdFx0ZGVjRGlnaXRzID0gJDQ7XG5cdFx0XHRcdHNlbWljb2xvbiA9ICQ1O1xuXHRcdFx0XHRpZiAoc3RyaWN0ICYmICFzZW1pY29sb24pIHtcblx0XHRcdFx0XHRwYXJzZUVycm9yKCdjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvZGVQb2ludCA9IHBhcnNlSW50KGRlY0RpZ2l0cywgMTApO1xuXHRcdFx0XHRyZXR1cm4gY29kZVBvaW50VG9TeW1ib2woY29kZVBvaW50LCBzdHJpY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJDYpIHtcblx0XHRcdFx0Ly8gRGVjb2RlIGhleGFkZWNpbWFsIGVzY2FwZXMsIGUuZy4gYCYjeDFEMzA2O2AuXG5cdFx0XHRcdGhleERpZ2l0cyA9ICQ2O1xuXHRcdFx0XHRzZW1pY29sb24gPSAkNztcblx0XHRcdFx0aWYgKHN0cmljdCAmJiAhc2VtaWNvbG9uKSB7XG5cdFx0XHRcdFx0cGFyc2VFcnJvcignY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlUG9pbnQgPSBwYXJzZUludChoZXhEaWdpdHMsIDE2KTtcblx0XHRcdFx0cmV0dXJuIGNvZGVQb2ludFRvU3ltYm9sKGNvZGVQb2ludCwgc3RyaWN0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2XigJlyZSBzdGlsbCBoZXJlLCBgaWYgKCQ3KWAgaXMgaW1wbGllZDsgaXTigJlzIGFuIGFtYmlndW91c1xuXHRcdFx0Ly8gYW1wZXJzYW5kIGZvciBzdXJlLiBodHRwczovL210aHMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHNcblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcihcblx0XHRcdFx0XHQnbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJDA7XG5cdFx0fSk7XG5cdH07XG5cdC8vIEV4cG9zZSBkZWZhdWx0IG9wdGlvbnMgKHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gZ2xvYmFsbHkpLlxuXHRkZWNvZGUub3B0aW9ucyA9IHtcblx0XHQnaXNBdHRyaWJ1dGVWYWx1ZSc6IGZhbHNlLFxuXHRcdCdzdHJpY3QnOiBmYWxzZVxuXHR9O1xuXG5cdHZhciBlc2NhcGUgPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVnZXhFc2NhcGUsIGZ1bmN0aW9uKCQwKSB7XG5cdFx0XHQvLyBOb3RlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoZXNjYXBlTWFwLCAkMClgIGhlcmUuXG5cdFx0XHRyZXR1cm4gZXNjYXBlTWFwWyQwXTtcblx0XHR9KTtcblx0fTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgaGUgPSB7XG5cdFx0J3ZlcnNpb24nOiAnMS4yLjAnLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZXNjYXBlJzogZXNjYXBlLFxuXHRcdCd1bmVzY2FwZSc6IGRlY29kZVxuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGhlO1xuXHRcdH0pO1xuXHR9XHRlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzLCBpby5qcywgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBoZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGhlKSB7XG5cdFx0XHRcdGhhcyhoZSwga2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGhlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QuaGUgPSBoZTtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5UHJpbWl0aXZlID0gZnVuY3Rpb24odikge1xuICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdiA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6ICcnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlcCwgZXEsIG5hbWUpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICBvYmogPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbWFwKG9iamVjdEtleXMob2JqKSwgZnVuY3Rpb24oaykge1xuICAgICAgdmFyIGtzID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShrKSkgKyBlcTtcbiAgICAgIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgICAgcmV0dXJuIG1hcChvYmpba10sIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKHYpKTtcbiAgICAgICAgfSkuam9pbihzZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKHNlcCk7XG5cbiAgfVxuXG4gIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShuYW1lKSkgKyBlcSArXG4gICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9iaikpO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbmZ1bmN0aW9uIG1hcCAoeHMsIGYpIHtcbiAgaWYgKHhzLm1hcCkgcmV0dXJuIHhzLm1hcChmKTtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnB1c2goZih4c1tpXSwgaSkpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9kZWNvZGUnKTtcbmV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2VuY29kZScpO1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBnbG9iYWwuXztcbiAgICB2YXIgZXhwb3J0cyA9IGdsb2JhbC5fID0gZmFjdG9yeSgpO1xuICAgIGV4cG9ydHMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsgZ2xvYmFsLl8gPSBjdXJyZW50OyByZXR1cm4gZXhwb3J0czsgfTtcbiAgfSgpKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7XG4gIC8vICAgICBVbmRlcnNjb3JlLmpzIDEuMTMuNlxuICAvLyAgICAgaHR0cHM6Ly91bmRlcnNjb3JlanMub3JnXG4gIC8vICAgICAoYykgMjAwOS0yMDIyIEplcmVteSBBc2hrZW5hcywgSnVsaWFuIEdvbmdncmlqcCwgYW5kIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICAvLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIHZhciBWRVJTSU9OID0gJzEuMTMuNic7XG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgKGBzZWxmYCkgaW4gdGhlIGJyb3dzZXIsIGBnbG9iYWxgXG4gIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgdmFyIHJvb3QgPSAodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYpIHx8XG4gICAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKSB8fFxuICAgICAgICAgICAge307XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBNb2Rlcm4gZmVhdHVyZSBkZXRlY3Rpb24uXG4gIHZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyxcbiAgICAgIHN1cHBvcnRzRGF0YVZpZXcgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgICBuYXRpdmVJc1ZpZXcgPSBzdXBwb3J0c0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldztcblxuICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byB0aGVzZSBidWlsdGluIGZ1bmN0aW9ucyBiZWNhdXNlIHdlIG92ZXJyaWRlIHRoZW0uXG4gIHZhciBfaXNOYU4gPSBpc05hTixcbiAgICAgIF9pc0Zpbml0ZSA9IGlzRmluaXRlO1xuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgLy8gVGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LlxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuICAvLyBTb21lIGZ1bmN0aW9ucyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgb3IgYSBmZXcgZXhwZWN0ZWRcbiAgLy8gYXJndW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgdmFsdWVzIHRvIG9wZXJhdGVcbiAgLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZc1xuICAvLyBhcmd1bWVudCBsZW5ndGggKG9yIGFuIGV4cGxpY2l0IGBzdGFydEluZGV4YCksIGludG8gYW4gYXJyYXkgdGhhdCBiZWNvbWVzXG4gIC8vIHRoZSBsYXN0IGFyZ3VtZW50LiBTaW1pbGFyIHRvIEVTNuKAmXMgXCJyZXN0IHBhcmFtZXRlclwiLlxuICBmdW5jdGlvbiByZXN0QXJndW1lbnRzKGZ1bmMsIHN0YXJ0SW5kZXgpIHtcbiAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKSxcbiAgICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIHJlc3QpO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFyZ3Nbc3RhcnRJbmRleF0gPSByZXN0O1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgKHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqKTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgdGVzdGVyLlxuICBmdW5jdGlvbiB0YWdUZXN0ZXIobmFtZSkge1xuICAgIHZhciB0YWcgPSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSB0YWc7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpc1N0cmluZyA9IHRhZ1Rlc3RlcignU3RyaW5nJyk7XG5cbiAgdmFyIGlzTnVtYmVyID0gdGFnVGVzdGVyKCdOdW1iZXInKTtcblxuICB2YXIgaXNEYXRlID0gdGFnVGVzdGVyKCdEYXRlJyk7XG5cbiAgdmFyIGlzUmVnRXhwID0gdGFnVGVzdGVyKCdSZWdFeHAnKTtcblxuICB2YXIgaXNFcnJvciA9IHRhZ1Rlc3RlcignRXJyb3InKTtcblxuICB2YXIgaXNTeW1ib2wgPSB0YWdUZXN0ZXIoJ1N5bWJvbCcpO1xuXG4gIHZhciBpc0FycmF5QnVmZmVyID0gdGFnVGVzdGVyKCdBcnJheUJ1ZmZlcicpO1xuXG4gIHZhciBpc0Z1bmN0aW9uID0gdGFnVGVzdGVyKCdGdW5jdGlvbicpO1xuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSBgdHlwZW9mYCBidWdzIGluIG9sZFxuICAvLyB2OCwgSUUgMTEgKCMxNjIxKSwgU2FmYXJpIDggKCMxOTI5KSwgYW5kIFBoYW50b21KUyAoIzIyMzYpLlxuICB2YXIgbm9kZWxpc3QgPSByb290LmRvY3VtZW50ICYmIHJvb3QuZG9jdW1lbnQuY2hpbGROb2RlcztcbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnICYmIHR5cGVvZiBub2RlbGlzdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGlzRnVuY3Rpb24kMSA9IGlzRnVuY3Rpb247XG5cbiAgdmFyIGhhc09iamVjdFRhZyA9IHRhZ1Rlc3RlcignT2JqZWN0Jyk7XG5cbiAgLy8gSW4gSUUgMTAgLSBFZGdlIDEzLCBgRGF0YVZpZXdgIGhhcyBzdHJpbmcgdGFnIGAnW29iamVjdCBPYmplY3RdJ2AuXG4gIC8vIEluIElFIDExLCB0aGUgbW9zdCBjb21tb24gYW1vbmcgdGhlbSwgdGhpcyBwcm9ibGVtIGFsc28gYXBwbGllcyB0b1xuICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC5cbiAgdmFyIGhhc1N0cmluZ1RhZ0J1ZyA9IChcbiAgICAgICAgc3VwcG9ydHNEYXRhVmlldyAmJiBoYXNPYmplY3RUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkpXG4gICAgICApLFxuICAgICAgaXNJRTExID0gKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnICYmIGhhc09iamVjdFRhZyhuZXcgTWFwKSk7XG5cbiAgdmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7XG5cbiAgLy8gSW4gSUUgMTAgLSBFZGdlIDEzLCB3ZSBuZWVkIGEgZGlmZmVyZW50IGhldXJpc3RpY1xuICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLlxuICBmdW5jdGlvbiBpZTEwSXNEYXRhVmlldyhvYmopIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaXNGdW5jdGlvbiQxKG9iai5nZXRJbnQ4KSAmJiBpc0FycmF5QnVmZmVyKG9iai5idWZmZXIpO1xuICB9XG5cbiAgdmFyIGlzRGF0YVZpZXckMSA9IChoYXNTdHJpbmdUYWdCdWcgPyBpZTEwSXNEYXRhVmlldyA6IGlzRGF0YVZpZXcpO1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBgQXJyYXkuaXNBcnJheWAuXG4gIHZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCB0YWdUZXN0ZXIoJ0FycmF5Jyk7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBga2V5YCBpcyBhbiBvd24gcHJvcGVydHkgbmFtZSBvZiBgb2JqYC5cbiAgZnVuY3Rpb24gaGFzJDEob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH1cblxuICB2YXIgaXNBcmd1bWVudHMgPSB0YWdUZXN0ZXIoJ0FyZ3VtZW50cycpO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgICAgaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIGhhcyQxKG9iaiwgJ2NhbGxlZScpO1xuICAgICAgfTtcbiAgICB9XG4gIH0oKSk7XG5cbiAgdmFyIGlzQXJndW1lbnRzJDEgPSBpc0FyZ3VtZW50cztcblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIGZ1bmN0aW9uIGlzRmluaXRlJDEob2JqKSB7XG4gICAgcmV0dXJuICFpc1N5bWJvbChvYmopICYmIF9pc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9XG5cbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gP1xuICBmdW5jdGlvbiBpc05hTiQxKG9iaikge1xuICAgIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopO1xuICB9XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH1cblxuICAvLyBDb21tb24gaW50ZXJuYWwgbG9naWMgZm9yIGBpc0FycmF5TGlrZWAgYW5kIGBpc0J1ZmZlckxpa2VgLlxuICBmdW5jdGlvbiBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRTaXplUHJvcGVydHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgICAgdmFyIHNpemVQcm9wZXJ0eSA9IGdldFNpemVQcm9wZXJ0eShjb2xsZWN0aW9uKTtcbiAgICAgIHJldHVybiB0eXBlb2Ygc2l6ZVByb3BlcnR5ID09ICdudW1iZXInICYmIHNpemVQcm9wZXJ0eSA+PSAwICYmIHNpemVQcm9wZXJ0eSA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gICAgfVxuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gb2J0YWluIHByb3BlcnR5IGBrZXlgIGZyb20gYG9iamAuXG4gIGZ1bmN0aW9uIHNoYWxsb3dQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGJ5dGVMZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbiAgdmFyIGdldEJ5dGVMZW5ndGggPSBzaGFsbG93UHJvcGVydHkoJ2J5dGVMZW5ndGgnKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHNwZW5kIGV4dGVuc2l2ZSBjaGVja3MgYWdhaW5zdFxuICAvLyBgQXJyYXlCdWZmZXJgIGV0IGFsLlxuICB2YXIgaXNCdWZmZXJMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIHR5cGVkIGFycmF5P1xuICB2YXIgdHlwZWRBcnJheVBhdHRlcm4gPSAvXFxbb2JqZWN0ICgoSXxVaSludCg4fDE2fDMyKXxGbG9hdCgzMnw2NCl8VWludDhDbGFtcGVkfEJpZyhJfFVpKW50NjQpQXJyYXlcXF0vO1xuICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7XG4gICAgLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgaXMgdGhlIG1vc3QgZnV0dXJlLXByb29mLCBzbyB1c2UgaXQgd2hlbiBhdmFpbGFibGUuXG4gICAgLy8gT3RoZXJ3aXNlLCBmYWxsIGJhY2sgb24gdGhlIGFib3ZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3JDEob2JqKSkgOlxuICAgICAgICAgICAgICAgICAgaXNCdWZmZXJMaWtlKG9iaikgJiYgdHlwZWRBcnJheVBhdHRlcm4udGVzdCh0b1N0cmluZy5jYWxsKG9iaikpO1xuICB9XG5cbiAgdmFyIGlzVHlwZWRBcnJheSQxID0gc3VwcG9ydHNBcnJheUJ1ZmZlciA/IGlzVHlwZWRBcnJheSA6IGNvbnN0YW50KGZhbHNlKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuXG4gIHZhciBnZXRMZW5ndGggPSBzaGFsbG93UHJvcGVydHkoJ2xlbmd0aCcpO1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgbG9va3VwIHN0cnVjdHVyZS5cbiAgLy8gYGNvbGxlY3ROb25FbnVtUHJvcHNgIHVzZWQgdG8gZGVwZW5kIG9uIGBfLmNvbnRhaW5zYCwgYnV0IHRoaXMgbGVkIHRvXG4gIC8vIGNpcmN1bGFyIGltcG9ydHMuIGBlbXVsYXRlZFNldGAgaXMgYSBvbmUtb2ZmIHNvbHV0aW9uIHRoYXQgb25seSB3b3JrcyBmb3JcbiAgLy8gYXJyYXlzIG9mIHN0cmluZ3MuXG4gIGZ1bmN0aW9uIGVtdWxhdGVkU2V0KGtleXMpIHtcbiAgICB2YXIgaGFzaCA9IHt9O1xuICAgIGZvciAodmFyIGwgPSBrZXlzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyArK2kpIGhhc2hba2V5c1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiB7XG4gICAgICBjb250YWluczogZnVuY3Rpb24oa2V5KSB7IHJldHVybiBoYXNoW2tleV0gPT09IHRydWU7IH0sXG4gICAgICBwdXNoOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaGFzaFtrZXldID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBoZWxwZXIuIENoZWNrcyBga2V5c2AgZm9yIHRoZSBwcmVzZW5jZSBvZiBrZXlzIGluIElFIDwgOSB0aGF0IHdvbid0XG4gIC8vIGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLiBFeHRlbmRzIGBrZXlzYCBpbiBwbGFjZSBpZlxuICAvLyBuZWVkZWQuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAga2V5cyA9IGVtdWxhdGVkU2V0KGtleXMpO1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKGlzRnVuY3Rpb24kMShjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoaGFzJDEob2JqLCBwcm9wKSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzJDEob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgLy8gU2tpcCB0aGUgbW9yZSBleHBlbnNpdmUgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIGNoZWNrcyBpZiBgb2JqYCBoYXMgbm9cbiAgICAvLyBgLmxlbmd0aGAuXG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChvYmopO1xuICAgIGlmICh0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIChcbiAgICAgIGlzQXJyYXkob2JqKSB8fCBpc1N0cmluZyhvYmopIHx8IGlzQXJndW1lbnRzJDEob2JqKVxuICAgICkpIHJldHVybiBsZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIGdldExlbmd0aChrZXlzKG9iaikpID09PSAwO1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIGZ1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IF9rZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdCBjYW5cbiAgLy8gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIGZ1bmN0aW9ucyBhZGRlZFxuICAvLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuICBmdW5jdGlvbiBfJDEob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8kMSkgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXyQxKSkgcmV0dXJuIG5ldyBfJDEob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9XG5cbiAgXyQxLlZFUlNJT04gPSBWRVJTSU9OO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuICBfJDEucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3hpZXMgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8kMS5wcm90b3R5cGUudmFsdWVPZiA9IF8kMS5wcm90b3R5cGUudG9KU09OID0gXyQxLnByb3RvdHlwZS52YWx1ZTtcblxuICBfJDEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLl93cmFwcGVkKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byB3cmFwIG9yIHNoYWxsb3ctY29weSBhbiBBcnJheUJ1ZmZlcixcbiAgLy8gdHlwZWQgYXJyYXkgb3IgRGF0YVZpZXcgdG8gYSBuZXcgdmlldywgcmV1c2luZyB0aGUgYnVmZmVyLlxuICBmdW5jdGlvbiB0b0J1ZmZlclZpZXcoYnVmZmVyU291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFxuICAgICAgYnVmZmVyU291cmNlLmJ1ZmZlciB8fCBidWZmZXJTb3VyY2UsXG4gICAgICBidWZmZXJTb3VyY2UuYnl0ZU9mZnNldCB8fCAwLFxuICAgICAgZ2V0Qnl0ZUxlbmd0aChidWZmZXJTb3VyY2UpXG4gICAgKTtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIHN0cmluZyB0d2ljZSwgc28gZ2l2ZSBpdCBhIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi5cbiAgdmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYF8uaXNFcXVhbGAuXG4gIGZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwczovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuICBmdW5jdGlvbiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8kMSkgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfJDEpIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIGluIElFIDEwIC0gRWRnZSAxMy5cbiAgICBpZiAoaGFzU3RyaW5nVGFnQnVnICYmIGNsYXNzTmFtZSA9PSAnW29iamVjdCBPYmplY3RdJyAmJiBpc0RhdGFWaWV3JDEoYSkpIHtcbiAgICAgIGlmICghaXNEYXRhVmlldyQxKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjbGFzc05hbWUgPSB0YWdEYXRhVmlldztcbiAgICB9XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICAgIHJldHVybiBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYSkgPT09IFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChiKTtcbiAgICAgIGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcbiAgICAgIGNhc2UgdGFnRGF0YVZpZXc6XG4gICAgICAgIC8vIENvZXJjZSB0byB0eXBlZCBhcnJheSBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLlxuICAgICAgICByZXR1cm4gZGVlcEVxKHRvQnVmZmVyVmlldyhhKSwgdG9CdWZmZXJWaWV3KGIpLCBhU3RhY2ssIGJTdGFjayk7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cyAmJiBpc1R5cGVkQXJyYXkkMShhKSkge1xuICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IGdldEJ5dGVMZW5ndGgoYSk7XG4gICAgICAgIGlmIChieXRlTGVuZ3RoICE9PSBnZXRCeXRlTGVuZ3RoKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlO1xuICAgICAgICBhcmVBcnJheXMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShpc0Z1bmN0aW9uJDEoYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uJDEoYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBfa2V5cyA9IGtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChrZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IF9rZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKGhhcyQxKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYik7XG4gIH1cblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBmdW5jdGlvbiBhbGxLZXlzKG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICAvLyBTaW5jZSB0aGUgcmVndWxhciBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdHlwZSB0ZXN0cyBkb24ndCB3b3JrIGZvclxuICAvLyBzb21lIHR5cGVzIGluIElFIDExLCB3ZSB1c2UgYSBmaW5nZXJwcmludGluZyBoZXVyaXN0aWMgaW5zdGVhZCwgYmFzZWRcbiAgLy8gb24gdGhlIG1ldGhvZHMuIEl0J3Mgbm90IGdyZWF0LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBnb3QuXG4gIC8vIFRoZSBmaW5nZXJwcmludCBtZXRob2QgbGlzdHMgYXJlIGRlZmluZWQgYmVsb3cuXG4gIGZ1bmN0aW9uIGllMTFmaW5nZXJwcmludChtZXRob2RzKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChtZXRob2RzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGhhdmUgbm8gZW51bWVyYWJsZSBrZXlzLlxuICAgICAgdmFyIGtleXMgPSBhbGxLZXlzKG9iaik7XG4gICAgICBpZiAoZ2V0TGVuZ3RoKGtleXMpKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNGdW5jdGlvbiQxKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHdlIGFyZSB0ZXN0aW5nIGFnYWluc3QgYFdlYWtNYXBgLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoXG4gICAgICAvLyBpdCBmcm9tIGEgcmVndWxhciBgTWFwYC5cbiAgICAgIHJldHVybiBtZXRob2RzICE9PSB3ZWFrTWFwTWV0aG9kcyB8fCAhaXNGdW5jdGlvbiQxKG9ialtmb3JFYWNoTmFtZV0pO1xuICAgIH07XG4gIH1cblxuICAvLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlXG4gIC8vIGVhY2ggc3RyaW5nIGluIHRoZSBmaW5nZXJwcmludHMgb25seSBvbmNlLlxuICB2YXIgZm9yRWFjaE5hbWUgPSAnZm9yRWFjaCcsXG4gICAgICBoYXNOYW1lID0gJ2hhcycsXG4gICAgICBjb21tb25Jbml0ID0gWydjbGVhcicsICdkZWxldGUnXSxcbiAgICAgIG1hcFRhaWwgPSBbJ2dldCcsIGhhc05hbWUsICdzZXQnXTtcblxuICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBlYWNoIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50XG4gIC8vIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgc3VibGlzdHMuXG4gIHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLFxuICAgICAgd2Vha01hcE1ldGhvZHMgPSBjb21tb25Jbml0LmNvbmNhdChtYXBUYWlsKSxcbiAgICAgIHNldE1ldGhvZHMgPSBbJ2FkZCddLmNvbmNhdChjb21tb25Jbml0LCBmb3JFYWNoTmFtZSwgaGFzTmFtZSk7XG5cbiAgdmFyIGlzTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KG1hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdNYXAnKTtcblxuICB2YXIgaXNXZWFrTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpO1xuXG4gIHZhciBpc1NldCA9IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludChzZXRNZXRob2RzKSA6IHRhZ1Rlc3RlcignU2V0Jyk7XG5cbiAgdmFyIGlzV2Vha1NldCA9IHRhZ1Rlc3RlcignV2Vha1NldCcpO1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgZnVuY3Rpb24gdmFsdWVzKG9iaikge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtfa2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgLy8gVGhlIG9wcG9zaXRlIG9mIGBfLm9iamVjdGAgd2l0aCBvbmUgYXJndW1lbnQuXG4gIGZ1bmN0aW9uIHBhaXJzKG9iaikge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBbX2tleXNbaV0sIG9ialtfa2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH1cblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIGZ1bmN0aW9uIGludmVydChvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtfa2V5c1tpXV1dID0gX2tleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbiQxKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoa2V5c0Z1bmMsIGRlZmF1bHRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoZGVmYXVsdHMpIG9iaiA9IE9iamVjdChvYmopO1xuICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKCFkZWZhdWx0cyB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH1cblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgdmFyIGV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKGFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW5cbiAgLy8gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgdmFyIGV4dGVuZE93biA9IGNyZWF0ZUFzc2lnbmVyKGtleXMpO1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIHZhciBkZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKGFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZSBhIG5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgZnVuY3Rpb24gY3RvcigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90b3R5cGUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgdmFyIEN0b3IgPSBjdG9yKCk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5cbiAgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIGZ1bmN0aW9uIGNsb25lKG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBleHRlbmQoe30sIG9iaik7XG4gIH1cblxuICAvLyBJbnZva2VzIGBpbnRlcmNlcHRvcmAgd2l0aCB0aGUgYG9iamAgYW5kIHRoZW4gcmV0dXJucyBgb2JqYC5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBmdW5jdGlvbiB0YXAob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBhIChkZWVwKSBwcm9wZXJ0eSBgcGF0aGAgdG8gYXJyYXkuXG4gIC8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLlxuICBmdW5jdGlvbiB0b1BhdGgkMShwYXRoKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdO1xuICB9XG4gIF8kMS50b1BhdGggPSB0b1BhdGgkMTtcblxuICAvLyBJbnRlcm5hbCB3cmFwcGVyIGZvciBgXy50b1BhdGhgIHRvIGVuYWJsZSBtaW5pZmljYXRpb24uXG4gIC8vIFNpbWlsYXIgdG8gYGNiYCBmb3IgYF8uaXRlcmF0ZWVgLlxuICBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICAgIHJldHVybiBfJDEudG9QYXRoKHBhdGgpO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gb2J0YWluIGEgbmVzdGVkIHByb3BlcnR5IGluIGBvYmpgIGFsb25nIGBwYXRoYC5cbiAgZnVuY3Rpb24gZGVlcEdldChvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9XG5cbiAgLy8gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgKGRlZXApIHByb3BlcnR5IG9uIGBwYXRoYCBmcm9tIGBvYmplY3RgLlxuICAvLyBJZiBhbnkgcHJvcGVydHkgaW4gYHBhdGhgIGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSB2YWx1ZSBpc1xuICAvLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuXG4gIC8vIFRoZSBgcGF0aGAgaXMgbm9ybWFsaXplZCB0aHJvdWdoIGBfLnRvUGF0aGAuXG4gIGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgfVxuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHkgb25cbiAgLy8gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS4gVW5saWtlIHRoZSBpbnRlcm5hbCBgaGFzYFxuICAvLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy5cbiAgZnVuY3Rpb24gaGFzKG9iaiwgcGF0aCkge1xuICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgICAgaWYgKCFoYXMkMShvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH1cblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gbWF0Y2hlcihhdHRycykge1xuICAgIGF0dHJzID0gZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIHBhc3NlZCBhbiBvYmplY3QsIHdpbGwgdHJhdmVyc2UgdGhhdCBvYmplY3TigJlzXG4gIC8vIHByb3BlcnRpZXMgZG93biB0aGUgZ2l2ZW4gYHBhdGhgLCBzcGVjaWZpZWQgYXMgYW4gYXJyYXkgb2Yga2V5cyBvciBpbmRpY2VzLlxuICBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gZGVlcEdldChvYmosIHBhdGgpO1xuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gb3B0aW1pemVDYihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgLy8gVGhlIDItYXJndW1lbnQgY2FzZSBpcyBvbWl0dGVkIGJlY2F1c2Ugd2XigJlyZSBub3QgdXNpbmcgaXQuXG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2hcbiAgLy8gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlciBgXy5pZGVudGl0eWAsXG4gIC8vIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSkgcmV0dXJuIG1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICAvLyBFeHRlcm5hbCB3cmFwcGVyIGZvciBvdXIgY2FsbGJhY2sgZ2VuZXJhdG9yLiBVc2VycyBtYXkgY3VzdG9taXplXG4gIC8vIGBfLml0ZXJhdGVlYCBpZiB0aGV5IHdhbnQgYWRkaXRpb25hbCBwcmVkaWNhdGUvaXRlcmF0ZWUgc2hvcnRoYW5kIHN0eWxlcy5cbiAgLy8gVGhpcyBhYnN0cmFjdGlvbiBoaWRlcyB0aGUgaW50ZXJuYWwtb25seSBgYXJnQ291bnRgIGFyZ3VtZW50LlxuICBmdW5jdGlvbiBpdGVyYXRlZSh2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfVxuICBfJDEuaXRlcmF0ZWUgPSBpdGVyYXRlZTtcblxuICAvLyBUaGUgZnVuY3Rpb24gd2UgY2FsbCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIGEgY2FsbGJhY2suIEl0IGludm9rZXNcbiAgLy8gYF8uaXRlcmF0ZWVgIGlmIG92ZXJyaWRkZW4sIG90aGVyd2lzZSBgYmFzZUl0ZXJhdGVlYC5cbiAgZnVuY3Rpb24gY2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKF8kMS5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfJDEuaXRlcmF0ZWUodmFsdWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBlbGVtZW50IG9mIGBvYmpgLlxuICAvLyBJbiBjb250cmFzdCB0byBgXy5tYXBgIGl0IHJldHVybnMgYW4gb2JqZWN0LlxuICBmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0ge307XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07XG4gICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBmdW5jdGlvbiBub29wKCl7fVxuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgZnVuY3Rpb24gcHJvcGVydHlPZihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBub29wO1xuICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gZ2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxuICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfVxuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIChpbmNsdXNpdmUpLlxuICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICB2YXIgbm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3NcbiAgLy8gdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIGZ1bmN0aW9uIGNyZWF0ZUVzY2FwZXIobWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsga2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcblxuICAvLyBGdW5jdGlvbiBmb3IgZXNjYXBpbmcgc3RyaW5ncyB0byBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBfZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuXG4gIC8vIEludGVybmFsIGxpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgdW5lc2NhcGluZy5cbiAgdmFyIHVuZXNjYXBlTWFwID0gaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb24gZm9yIHVuZXNjYXBpbmcgc3RyaW5ncyBmcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIF91bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycy4gQ2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIHZhciB0ZW1wbGF0ZVNldHRpbmdzID0gXyQxLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGBfLnRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXG4nOiAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVSZWdFeHAgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgZnVuY3Rpb24gZXNjYXBlQ2hhcihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfVxuXG4gIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24gdGhyb3VnaFxuICAvLyBgXy50ZW1wbGF0ZVNldHRpbmdzLnZhcmlhYmxlYCwgd2UgdGVzdCBpdCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgcmVndWxhclxuICAvLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWRcbiAgLy8gaWRlbnRpZmllcnMsIGJ1dCBzdGlsbCBwcmV2ZW50cyBwb3NzaWJsZSBsb29waG9sZXMgdGhyb3VnaCBkZWZhdWx0cyBvclxuICAvLyBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQuXG4gIHZhciBiYXJlSWRlbnRpZmllciA9IC9eXFxzKihcXHd8XFwkKStcXHMqJC87XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfJDEudGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGU7XG4gICAgaWYgKGFyZ3VtZW50KSB7XG4gICAgICAvLyBJbnN1cmUgYWdhaW5zdCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbi4gKENWRS0yMDIxLTIzMzU4KVxuICAgICAgaWYgKCFiYXJlSWRlbnRpZmllci50ZXN0KGFyZ3VtZW50KSkgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuICAgICAgYXJndW1lbnQgPSAnb2JqJztcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHZhciByZW5kZXI7XG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyQxKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIGZ1bmN0aW9uIHJlc3VsdChvYmosIHBhdGgsIGZhbGxiYWNrKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgIHJldHVybiBpc0Z1bmN0aW9uJDEoZmFsbGJhY2spID8gZmFsbGJhY2suY2FsbChvYmopIDogZmFsbGJhY2s7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpbcGF0aFtpXV07XG4gICAgICBpZiAocHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHByb3AgPSBmYWxsYmFjaztcbiAgICAgICAgaSA9IGxlbmd0aDsgLy8gRW5zdXJlIHdlIGRvbid0IGNvbnRpbnVlIGl0ZXJhdGluZy5cbiAgICAgIH1cbiAgICAgIG9iaiA9IGlzRnVuY3Rpb24kMShwcm9wKSA/IHByb3AuY2FsbChvYmopIDogcHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9XG5cbiAgLy8gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBmdW5jdGlvbiBjaGFpbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfJDEob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYHNvdXJjZUZ1bmNgIGJvdW5kIHRvIGBjb250ZXh0YCB3aXRoIG9wdGlvbmFsXG4gIC8vIGBhcmdzYC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yIG9yIGFzIGFcbiAgLy8gbm9ybWFsIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBleGVjdXRlQm91bmQoc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIGBfYCBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICB2YXIgcGFydGlhbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgYm91bmRBcmdzKSB7XG4gICAgdmFyIHBsYWNlaG9sZGVyID0gcGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgcGFydGlhbC5wbGFjZWhvbGRlciA9IF8kMTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuXG4gIHZhciBiaW5kID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCFpc0Z1bmN0aW9uJDEoZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KGNhbGxBcmdzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdC5cbiAgLy8gUmVsYXRlZDogaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBpc0FycmF5TGlrZSA9IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldExlbmd0aCk7XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBmbGF0dGVuJDEoaW5wdXQsIGRlcHRoLCBzdHJpY3QsIG91dHB1dCkge1xuICAgIG91dHB1dCA9IG91dHB1dCB8fCBbXTtcbiAgICBpZiAoIWRlcHRoICYmIGRlcHRoICE9PSAwKSB7XG4gICAgICBkZXB0aCA9IEluZmluaXR5O1xuICAgIH0gZWxzZSBpZiAoZGVwdGggPD0gMCkge1xuICAgICAgcmV0dXJuIG91dHB1dC5jb25jYXQoaW5wdXQpO1xuICAgIH1cbiAgICB2YXIgaWR4ID0gb3V0cHV0Lmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzJDEodmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAgIGZsYXR0ZW4kMSh2YWx1ZSwgZGVwdGggLSAxLCBzdHJpY3QsIG91dHB1dCk7XG4gICAgICAgICAgaWR4ID0gb3V0cHV0Lmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgdmFyIGJpbmRBbGwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIGtleXMgPSBmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9KTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyQxKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH1cblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgdmFyIGRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIHZhciBkZWZlciA9IHBhcnRpYWwoZGVsYXksIF8kMSwgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIHRpbWVvdXQsIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIF9ub3cgPSBub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBfbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAoX25vdyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gX25vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgcHJldmlvdXMgPSAwO1xuICAgICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRocm90dGxlZDtcbiAgfVxuXG4gIC8vIFdoZW4gYSBzZXF1ZW5jZSBvZiBjYWxscyBvZiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gZW5kcywgdGhlIGFyZ3VtZW50XG4gIC8vIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhlIGVuZCBvZiBhIHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgdGhlIGB3YWl0YFxuICAvLyBwYXJhbWV0ZXIuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uIHdpbGwgYmVcbiAgLy8gdHJpZ2dlcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGluc3RlYWQgb2YgYXQgdGhlIGVuZC5cbiAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHByZXZpb3VzLCBhcmdzLCByZXN1bHQsIGNvbnRleHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwYXNzZWQgPSBub3coKSAtIHByZXZpb3VzO1xuICAgICAgaWYgKHdhaXQgPiBwYXNzZWQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBwYXNzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIGBmdW5jYCBjYW4gcmVjdXJzaXZlbHkgaW52b2tlIGBkZWJvdW5jZWRgLlxuICAgICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGRlYm91bmNlZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oX2FyZ3MpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IF9hcmdzO1xuICAgICAgcHJldmlvdXMgPSBub3coKTtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZGVib3VuY2VkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIHdyYXAoZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZVxuICAvLyBOdGggY2FsbC5cbiAgZnVuY3Rpb24gYmVmb3JlKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIHZhciBvbmNlID0gcGFydGlhbChiZWZvcmUsIDIpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBmaW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IF9rZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgLlxuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgdmFyIGZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuXG4gIC8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIHZhciBmaW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgYF8uaW5kZXhPZmAgYW5kIGBfLmxhc3RJbmRleE9mYCBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIGlzTmFOJDEpO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICB2YXIgaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpO1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICB2YXIgbGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgZmluZExhc3RJbmRleCk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBmaW5kKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleUZpbmRlciA9IGlzQXJyYXlMaWtlKG9iaikgPyBmaW5kSW5kZXggOiBmaW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdFxuICAvLyBvYmplY3QgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gZmluZFdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gZmluZChvYmosIG1hdGNoZXIoYXR0cnMpKTtcbiAgfVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSBmb3IgY29sbGVjdGlvbiBmdW5jdGlvbnMsIGFuIGBlYWNoYFxuICAvLyBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBmdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIGZ1bmN0aW9uIG1hcChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiwgaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBXcmFwIGNvZGUgdGhhdCByZWFzc2lnbnMgYXJndW1lbnQgdmFyaWFibGVzIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gdGhhblxuICAgIC8vIHRoZSBvbmUgdGhhdCBhY2Nlc3NlcyBgYXJndW1lbnRzLmxlbmd0aGAgdG8gYXZvaWQgYSBwZXJmIGhpdC4gKCMxOTkxKVxuICAgIHZhciByZWR1Y2VyID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgaW5pdGlhbCkge1xuICAgICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGlmICghaW5pdGlhbCkge1xuICAgICAgICBtZW1vID0gb2JqW19rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICB2YXIgcmVkdWNlID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICB2YXIgcmVkdWNlUmlnaHQgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGZpbHRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBmdW5jdGlvbiByZWplY3Qob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgcGFzcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGV2ZXJ5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBzb21lKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICBmdW5jdGlvbiBjb250YWlucyhvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBpbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIHZhciBpbnZva2UgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwgcGF0aCwgYXJncykge1xuICAgIHZhciBjb250ZXh0UGF0aCwgZnVuYztcbiAgICBpZiAoaXNGdW5jdGlvbiQxKHBhdGgpKSB7XG4gICAgICBmdW5jID0gcGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICAgIGNvbnRleHRQYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG4gICAgICBwYXRoID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gbWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgZnVuY3Rpb24gcGx1Y2sob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gbWFwKG9iaiwgcHJvcGVydHkoa2V5KSk7XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbHRlcmA6IHNlbGVjdGluZyBvbmx5XG4gIC8vIG9iamVjdHMgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gd2hlcmUob2JqLCBhdHRycykge1xuICAgIHJldHVybiBmaWx0ZXIob2JqLCBtYXRjaGVyKGF0dHJzKSk7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBmdW5jdGlvbiBtaW4ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCAodHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgKGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgdmFyIHJlU3RyU3ltYm9sID0gL1teXFx1ZDgwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRmZmZdL2c7XG4gIGZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7XG4gICAgcmV0dXJuIHZhbHVlcyhvYmopO1xuICB9XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIGZ1bmN0aW9uIHNhbXBsZShvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbcmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHZhciBzYW1wbGUgPSB0b0FycmF5KG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gcmFuZG9tKGluZGV4LCBsYXN0KTtcbiAgICAgIHZhciB0ZW1wID0gc2FtcGxlW2luZGV4XTtcbiAgICAgIHNhbXBsZVtpbmRleF0gPSBzYW1wbGVbcmFuZF07XG4gICAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wO1xuICAgIH1cbiAgICByZXR1cm4gc2FtcGxlLnNsaWNlKDAsIG4pO1xuICB9XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7XG4gICAgcmV0dXJuIHNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfVxuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgZnVuY3Rpb24gc29ydEJ5KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBwbHVjayhtYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCsrLFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgZnVuY3Rpb24gZ3JvdXAoYmVoYXZpb3IsIHBhcnRpdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcGFydGl0aW9uID8gW1tdLCBbXV0gOiB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICB2YXIgZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMkMShyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBfLmdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgdmFyIGluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgdmFyIGNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoaGFzJDEocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBwYXNzIHRoZSBnaXZlblxuICAvLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC5cbiAgdmFyIHBhcnRpdGlvbiA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIHBhc3MpIHtcbiAgICByZXN1bHRbcGFzcyA/IDAgOiAxXS5wdXNoKHZhbHVlKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBjb2xsZWN0aW9uLlxuICBmdW5jdGlvbiBzaXplKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDoga2V5cyhvYmopLmxlbmd0aDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGBfLnBpY2tgIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBga2V5YCBpcyBhbiBlbnVtZXJhYmxlXG4gIC8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG4gIGZ1bmN0aW9uIGtleUluT2JqKHZhbHVlLCBrZXksIG9iaikge1xuICAgIHJldHVybiBrZXkgaW4gb2JqO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dlZCBwcm9wZXJ0aWVzLlxuICB2YXIgcGljayA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBpdGVyYXRlZSA9IGtleXNbMF07XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGtleXNbMV0pO1xuICAgICAga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBrZXlJbk9iajtcbiAgICAgIGtleXMgPSBmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgZGlzYWxsb3dlZCBwcm9wZXJ0aWVzLlxuICB2YXIgb21pdCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIGl0ZXJhdGVlID0ga2V5c1swXSwgY29udGV4dDtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBuZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBtYXAoZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFjb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH0pO1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBmdW5jdGlvbiBpbml0aWFsKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIGZ1bmN0aW9uIGZpcnN0KGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIGluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGBhcnJheWAuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm4gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlXG4gIC8vIGBhcnJheWAuXG4gIGZ1bmN0aW9uIHJlc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgZnVuY3Rpb24gbGFzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiByZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH1cblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTtcbiAgfVxuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciB1cCB0byBgZGVwdGhgLlxuICAvLyBQYXNzaW5nIGB0cnVlYCBvciBgZmFsc2VgIGFzIGBkZXB0aGAgbWVhbnMgYDFgIG9yIGBJbmZpbml0eWAsIHJlc3BlY3RpdmVseS5cbiAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSwgZGVwdGgpIHtcbiAgICByZXR1cm4gZmxhdHRlbiQxKGFycmF5LCBkZXB0aCwgZmFsc2UpO1xuICB9XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICB2YXIgZGlmZmVyZW5jZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIHJlc3QpIHtcbiAgICByZXN0ID0gZmxhdHRlbiQxKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBmaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgdmFyIHdpdGhvdXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCBvdGhlckFycmF5cykge1xuICAgIHJldHVybiBkaWZmZXJlbmNlKGFycmF5LCBvdGhlckFycmF5cyk7XG4gIH0pO1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gVGhlIGZhc3RlciBhbGdvcml0aG0gd2lsbCBub3Qgd29yayB3aXRoIGFuIGl0ZXJhdGVlIGlmIHRoZSBpdGVyYXRlZVxuICAvLyBpcyBub3QgYSBvbmUtdG8tb25lIGZ1bmN0aW9uLCBzbyBwcm92aWRpbmcgYW4gaXRlcmF0ZWUgd2lsbCBkaXNhYmxlXG4gIC8vIHRoZSBmYXN0ZXIgYWxnb3JpdGhtLlxuICBmdW5jdGlvbiB1bmlxKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIWlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFjb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICB2YXIgdW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiB1bmlxKGZsYXR0ZW4kMShhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFjb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlcy5cbiAgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gcGx1Y2soYXJyYXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIHZhciB6aXAgPSByZXN0QXJndW1lbnRzKHVuemlwKTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIFBhc3NpbmcgYnkgcGFpcnMgaXMgdGhlIHJldmVyc2Ugb2YgYF8ucGFpcnNgLlxuICBmdW5jdGlvbiBvYmplY3QobGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBzdGVwID0gc3RvcCA8IHN0YXJ0ID8gLTEgOiAxO1xuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvLyBDaHVuayBhIHNpbmdsZSBhcnJheSBpbnRvIG11bHRpcGxlIGFycmF5cywgZWFjaCBjb250YWluaW5nIGBjb3VudGAgb3IgZmV3ZXJcbiAgLy8gaXRlbXMuXG4gIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICBmdW5jdGlvbiBjaGFpblJlc3VsdChpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8kMShvYmopLmNoYWluKCkgOiBvYmo7XG4gIH1cblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIGZ1bmN0aW9uIG1peGluKG9iaikge1xuICAgIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gXyQxW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgZnVuYy5hcHBseShfJDEsIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF8kMTtcbiAgfVxuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBpZiAob2JqICE9IG51bGwpIHtcbiAgICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIG9ialswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIGlmIChvYmogIT0gbnVsbCkgb2JqID0gbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIE5hbWVkIEV4cG9ydHNcblxuICB2YXIgYWxsRXhwb3J0cyA9IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgVkVSU0lPTjogVkVSU0lPTixcbiAgICByZXN0QXJndW1lbnRzOiByZXN0QXJndW1lbnRzLFxuICAgIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgICBpc051bGw6IGlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gICAgaXNCb29sZWFuOiBpc0Jvb2xlYW4sXG4gICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICAgIGlzTnVtYmVyOiBpc051bWJlcixcbiAgICBpc0RhdGU6IGlzRGF0ZSxcbiAgICBpc1JlZ0V4cDogaXNSZWdFeHAsXG4gICAgaXNFcnJvcjogaXNFcnJvcixcbiAgICBpc1N5bWJvbDogaXNTeW1ib2wsXG4gICAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgICBpc0RhdGFWaWV3OiBpc0RhdGFWaWV3JDEsXG4gICAgaXNBcnJheTogaXNBcnJheSxcbiAgICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uJDEsXG4gICAgaXNBcmd1bWVudHM6IGlzQXJndW1lbnRzJDEsXG4gICAgaXNGaW5pdGU6IGlzRmluaXRlJDEsXG4gICAgaXNOYU46IGlzTmFOJDEsXG4gICAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXkkMSxcbiAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgIGlzTWF0Y2g6IGlzTWF0Y2gsXG4gICAgaXNFcXVhbDogaXNFcXVhbCxcbiAgICBpc01hcDogaXNNYXAsXG4gICAgaXNXZWFrTWFwOiBpc1dlYWtNYXAsXG4gICAgaXNTZXQ6IGlzU2V0LFxuICAgIGlzV2Vha1NldDogaXNXZWFrU2V0LFxuICAgIGtleXM6IGtleXMsXG4gICAgYWxsS2V5czogYWxsS2V5cyxcbiAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICBwYWlyczogcGFpcnMsXG4gICAgaW52ZXJ0OiBpbnZlcnQsXG4gICAgZnVuY3Rpb25zOiBmdW5jdGlvbnMsXG4gICAgbWV0aG9kczogZnVuY3Rpb25zLFxuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIGV4dGVuZE93bjogZXh0ZW5kT3duLFxuICAgIGFzc2lnbjogZXh0ZW5kT3duLFxuICAgIGRlZmF1bHRzOiBkZWZhdWx0cyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBjbG9uZTogY2xvbmUsXG4gICAgdGFwOiB0YXAsXG4gICAgZ2V0OiBnZXQsXG4gICAgaGFzOiBoYXMsXG4gICAgbWFwT2JqZWN0OiBtYXBPYmplY3QsXG4gICAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICAgIGNvbnN0YW50OiBjb25zdGFudCxcbiAgICBub29wOiBub29wLFxuICAgIHRvUGF0aDogdG9QYXRoJDEsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHByb3BlcnR5T2Y6IHByb3BlcnR5T2YsXG4gICAgbWF0Y2hlcjogbWF0Y2hlcixcbiAgICBtYXRjaGVzOiBtYXRjaGVyLFxuICAgIHRpbWVzOiB0aW1lcyxcbiAgICByYW5kb206IHJhbmRvbSxcbiAgICBub3c6IG5vdyxcbiAgICBlc2NhcGU6IF9lc2NhcGUsXG4gICAgdW5lc2NhcGU6IF91bmVzY2FwZSxcbiAgICB0ZW1wbGF0ZVNldHRpbmdzOiB0ZW1wbGF0ZVNldHRpbmdzLFxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICB1bmlxdWVJZDogdW5pcXVlSWQsXG4gICAgY2hhaW46IGNoYWluLFxuICAgIGl0ZXJhdGVlOiBpdGVyYXRlZSxcbiAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgIGJpbmQ6IGJpbmQsXG4gICAgYmluZEFsbDogYmluZEFsbCxcbiAgICBtZW1vaXplOiBtZW1vaXplLFxuICAgIGRlbGF5OiBkZWxheSxcbiAgICBkZWZlcjogZGVmZXIsXG4gICAgdGhyb3R0bGU6IHRocm90dGxlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZSxcbiAgICB3cmFwOiB3cmFwLFxuICAgIG5lZ2F0ZTogbmVnYXRlLFxuICAgIGNvbXBvc2U6IGNvbXBvc2UsXG4gICAgYWZ0ZXI6IGFmdGVyLFxuICAgIGJlZm9yZTogYmVmb3JlLFxuICAgIG9uY2U6IG9uY2UsXG4gICAgZmluZEtleTogZmluZEtleSxcbiAgICBmaW5kSW5kZXg6IGZpbmRJbmRleCxcbiAgICBmaW5kTGFzdEluZGV4OiBmaW5kTGFzdEluZGV4LFxuICAgIHNvcnRlZEluZGV4OiBzb3J0ZWRJbmRleCxcbiAgICBpbmRleE9mOiBpbmRleE9mLFxuICAgIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZixcbiAgICBmaW5kOiBmaW5kLFxuICAgIGRldGVjdDogZmluZCxcbiAgICBmaW5kV2hlcmU6IGZpbmRXaGVyZSxcbiAgICBlYWNoOiBlYWNoLFxuICAgIGZvckVhY2g6IGVhY2gsXG4gICAgbWFwOiBtYXAsXG4gICAgY29sbGVjdDogbWFwLFxuICAgIHJlZHVjZTogcmVkdWNlLFxuICAgIGZvbGRsOiByZWR1Y2UsXG4gICAgaW5qZWN0OiByZWR1Y2UsXG4gICAgcmVkdWNlUmlnaHQ6IHJlZHVjZVJpZ2h0LFxuICAgIGZvbGRyOiByZWR1Y2VSaWdodCxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICBzZWxlY3Q6IGZpbHRlcixcbiAgICByZWplY3Q6IHJlamVjdCxcbiAgICBldmVyeTogZXZlcnksXG4gICAgYWxsOiBldmVyeSxcbiAgICBzb21lOiBzb21lLFxuICAgIGFueTogc29tZSxcbiAgICBjb250YWluczogY29udGFpbnMsXG4gICAgaW5jbHVkZXM6IGNvbnRhaW5zLFxuICAgIGluY2x1ZGU6IGNvbnRhaW5zLFxuICAgIGludm9rZTogaW52b2tlLFxuICAgIHBsdWNrOiBwbHVjayxcbiAgICB3aGVyZTogd2hlcmUsXG4gICAgbWF4OiBtYXgsXG4gICAgbWluOiBtaW4sXG4gICAgc2h1ZmZsZTogc2h1ZmZsZSxcbiAgICBzYW1wbGU6IHNhbXBsZSxcbiAgICBzb3J0Qnk6IHNvcnRCeSxcbiAgICBncm91cEJ5OiBncm91cEJ5LFxuICAgIGluZGV4Qnk6IGluZGV4QnksXG4gICAgY291bnRCeTogY291bnRCeSxcbiAgICBwYXJ0aXRpb246IHBhcnRpdGlvbixcbiAgICB0b0FycmF5OiB0b0FycmF5LFxuICAgIHNpemU6IHNpemUsXG4gICAgcGljazogcGljayxcbiAgICBvbWl0OiBvbWl0LFxuICAgIGZpcnN0OiBmaXJzdCxcbiAgICBoZWFkOiBmaXJzdCxcbiAgICB0YWtlOiBmaXJzdCxcbiAgICBpbml0aWFsOiBpbml0aWFsLFxuICAgIGxhc3Q6IGxhc3QsXG4gICAgcmVzdDogcmVzdCxcbiAgICB0YWlsOiByZXN0LFxuICAgIGRyb3A6IHJlc3QsXG4gICAgY29tcGFjdDogY29tcGFjdCxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIHdpdGhvdXQ6IHdpdGhvdXQsXG4gICAgdW5pcTogdW5pcSxcbiAgICB1bmlxdWU6IHVuaXEsXG4gICAgdW5pb246IHVuaW9uLFxuICAgIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uLFxuICAgIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2UsXG4gICAgdW56aXA6IHVuemlwLFxuICAgIHRyYW5zcG9zZTogdW56aXAsXG4gICAgemlwOiB6aXAsXG4gICAgb2JqZWN0OiBvYmplY3QsXG4gICAgcmFuZ2U6IHJhbmdlLFxuICAgIGNodW5rOiBjaHVuayxcbiAgICBtaXhpbjogbWl4aW4sXG4gICAgJ2RlZmF1bHQnOiBfJDFcbiAgfTtcblxuICAvLyBEZWZhdWx0IEV4cG9ydFxuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgdmFyIF8gPSBtaXhpbihhbGxFeHBvcnRzKTtcbiAgLy8gTGVnYWN5IE5vZGUuanMgQVBJLlxuICBfLl8gPSBfO1xuXG4gIHJldHVybiBfO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5kZXJzY29yZS11bWQuanMubWFwXG4iLCJjb25zdCBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuXG4vLyByZWY6IE92ZXJEcml2ZS5UaHVuZGVyLk1vZGVscy5EYXRhTW9kZWxzLkdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tZWRpYVR5cGUgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5sYW5ndWFnZSAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJFbnRpdHlJZCAgPSBudWxsOyAvLyBpbnRcbiAgICAgICAgdGhpcy5tYXR1cml0eUxldmVscyAgICAgPSBbXTsgLy8gc3RyaW5nXG4gICAgICAgIHRoaXMuc3ViamVjdHMgICAgICAgICAgID0gW107IC8vIHN0cmluZ1xuICAgICAgICB0aGlzLmJpc2FjQ29kZXMgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuc29ydEJ5ICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWF4SXRlbXMgICAgICAgICAgID0gdW5kZWZpbmVkOyAvLyBpbnRcblxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIC4uLmFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVHJhbnNsYXRlcyBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyBtb2RlbCB0byBwYXJhbWV0ZXJzIHRoYXQgYWxpZ24gd2l0aCB0aGUgTWVkaWFQYXJhbWV0ZXJzIG1vZGVsIGZvciBleGVjdXRpbmcgYSBcInNlYXJjaFwiXG4gICAgc2VyaWFsaXplRm9yU2VhcmNoKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBfLmV4dGVuZCh7fSwgdGhpcyk7XG5cbiAgICAgICAgLy8gbGFuZ3VhZ2UgaXMgYW4gYXJyYXkgaW4gTWVkaWFQYXJhbWV0ZXJzXG4gICAgICAgIG1vZGVsLmxhbmd1YWdlID0gXyhfLmZsYXR0ZW4oW21vZGVsLmxhbmd1YWdlXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG5cbiAgICAgICAgLy8gbWF0dXJpdHlMZXZlbHMgaXMgY2FsbGVkIG1hdHVyaXR5TGV2ZWxcbiAgICAgICAgbW9kZWwubWF0dXJpdHlMZXZlbCA9IF8oXy5mbGF0dGVuKFttb2RlbC5tYXR1cml0eUxldmVsc10pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuICAgICAgICBkZWxldGUgbW9kZWwubWF0dXJpdHlMZXZlbHM7XG5cbiAgICAgICAgLy8gc3ViamVjdHMgaXMgY2FsbGVkIHN1YmplY3RcbiAgICAgICAgbW9kZWwuc3ViamVjdCA9IF8oXy5mbGF0dGVuKFttb2RlbC5zdWJqZWN0c10pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuICAgICAgICBkZWxldGUgbW9kZWwuc3ViamVjdHM7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2Jpc2FjLWNvbGxlY3Rpb24tZmlsdGVyaW5nJykpIHtcbiAgICAgICAgICAgIG1vZGVsLmJpc2FjQ29kZSA9IF8oXy5mbGF0dGVuKFttb2RlbC5iaXNhY0NvZGVzXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwubWVkaWFUeXBlcykge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21lZGlhLXR5cGVzLWNvbGxlY3Rpb24tcGFyYW0nKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtb2RlbC5tZWRpYVR5cGU7XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG1vZGVsLm1lZGlhVHlwZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwubWVkaWFUeXBlcykge1xuICAgICAgICAgICAgbW9kZWwubWVkaWFUeXBlcyA9ICBtb2RlbC5tZWRpYVR5cGVzLmpvaW4oJywnKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdmaWx0ZXItb3V0LW50YycpKSB7XG4gICAgICAgICAgICBtb2RlbC5tZWRpYVR5cGVzID0gd2luZG93Lk92ZXJEcml2ZS53aGl0ZWxpc3RlZE1lZGlhVHlwZXM7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgbW9kZWwuYmlzYWNDb2RlczsgIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgcmVnYXJkbGVzcyBiZWNhdXNlIHRoZSBjb3JyZWN0IHF1ZXJ5IHBhcmFtIGlzIGBiaXNhY0NvZGVgLiAgVGhlIG1pc21hdGNoIGJldHdlZW4gdGhlIHRodW5kZXIgcXVlcnkgcGFyYW1zIGFuZCB0aGUgcHJvcGVydHkgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBjb2xsZWN0aW9uIGRlZmluaXRpb25zIGlzLi4uZnVuLlxuXG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sb3JVdGlsaXR5IHtcblxuICAgIC8vIHNlZSBfdmFycy5zY3NzIGZvciB0aGUgY29ycmVzcG9uZGluZyBjc3MgY29sb3IgdmFyc1xuICAgIC8vXG4gICAgc3RhdGljIGdldCBoaWdoQ29udHJhc3RCbHVlKCl7XG4gICAgICAgIHJldHVybiAnIzAwMDBGRic7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBoaWdoQ29udHJhc3RCbHVlSG92ZXIoKXtcbiAgICAgICAgcmV0dXJuICcjMDAwMEY1JztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IGhpZ2hDb250cmFzdFllbGxvdygpe1xuICAgICAgICByZXR1cm4gJyNGRkZGMDAnO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgaGlnaENvbnRyYXN0WWVsbG93SG92ZXIoKSB7XG4gICAgICAgIHJldHVybiAnI0Y1RTYwMCc7XG4gICAgfVxuXG4vLyBjcmVkaXQ6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTA3NzY4NlxuICAgIC8vIFRoaXMgd2lsbCBhY2NlcHQgdGhyZWUgY2hhcmFjdGVyIHNob3J0aGFuZCBoZXggY29sb3JzIGFzIHdlbGwgYXMgdGhlIHN0YW5kYXJkIHNpeCBjaGFyYWN0ZXIgZm9ybWF0LlxuICAgIHN0YXRpYyBoZXhUb1JHQihoZXhDb2xvcil7XG4gICAgICAgIHJldHVybiBoZXhDb2xvci5yZXBsYWNlKC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2lcbiAgICAgICAgICAgICAgICAsKG0sIHIsIGcsIGIpID0+ICcjJyArIHIgKyByICsgZyArIGcgKyBiICsgYilcbiAgICAgICAgICAgIC5zdWJzdHJpbmcoMSkubWF0Y2goLy57Mn0vZylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxNikpO1xuICAgIH1cblxuICAgIHN0YXRpYyByZ2JUb0hleChyZ2IpIHtcbiAgICAgICAgbGV0IG5Ub0hleCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICBsZXQgaGV4ID0gcGFyc2VJbnQobiwgMTApLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gJyMnICsgblRvSGV4KHJnYlswXSkgKyBuVG9IZXgocmdiWzFdKSArIG5Ub0hleChyZ2JbMl0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUZXh0Q29sb3JGcm9tUkdCKGJhY2tncm91bmRSR0Ipe1xuICAgICAgICAvLyBTdGFuZGFyZCBjb250cmFzdCBjYWxjdWxhdGlvbiBiYXNlZCBvbiB0aGUgWSBjb21wb25lbnQgb2YgdGhlIFlJUSBjb2xvciBzcGFjZS4gIExpYmJ5IHVzZXMgdGhlIHNhbWUgZGVmYXVsdCBMdW1hIHRocmVzaG9sZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jrc2gvZGV3ZXktanMvYmxvYi9lYmI3MTg5MjQxYzVlYWRlODAwMDc3NmQ5N2NkNTQ1MWJmNjQzZTNkL3NyYy9hcHAvYmFzZS9jb3Zlci1ndXJ1LmpzI0wxMFxuICAgICAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ZSVEjRnJvbV9SR0JfdG9fWUlRXG4gICAgICAgIGNvbnN0IExVTUFfVEhSRVNIT0xEX1lJUSAgPSAxOTA7XG4gICAgICAgIHJldHVybiAoYmFja2dyb3VuZFJHQlswXSAqIDI5OSArIGJhY2tncm91bmRSR0JbMV0gKiA1ODcgKyBiYWNrZ3JvdW5kUkdCWzJdICogMTE0KSAvIDEwMDAgPiBMVU1BX1RIUkVTSE9MRF9ZSVEgPyAnIzAwMDAwMCcgOiAnI2ZmZmZmZic7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRDb2xvckZyb21IZXgoYmFja2dyb3VuZEhleCl7XG4gICAgICAgIGxldCByZ2IgPSBDb2xvclV0aWxpdHkuaGV4VG9SR0IoYmFja2dyb3VuZEhleCk7XG4gICAgICAgIHJldHVybiBDb2xvclV0aWxpdHkuZ2V0VGV4dENvbG9yRnJvbVJHQihyZ2IpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzaGFkZUNvbG9ySGV4KGhleENvbG9yLCBwZXJjZW50KXtcbiAgICAgICAgbGV0IHJnYiA9IENvbG9yVXRpbGl0eS5oZXhUb1JHQihoZXhDb2xvcik7XG4gICAgICAgIGxldCBzaGFkZWRSR0IgPSBDb2xvclV0aWxpdHkuc2hhZGVDb2xvcihyZ2IsIHBlcmNlbnQpO1xuICAgICAgICByZXR1cm4gQ29sb3JVdGlsaXR5LnJnYlRvSGV4KHNoYWRlZFJHQik7XG4gICAgfVxuXG4gICAgc3RhdGljIHNoYWRlQ29sb3IocmdiLCBwZXJjZW50KXtcbiAgICAgICAgcGVyY2VudCA9IE1hdGguYWJzKHBlcmNlbnQpO1xuICAgICAgICBsZXQgaHNsID0gQ29sb3JVdGlsaXR5LnJnYlRvSHNsKHJnYlswXSwgcmdiWzFdLCByZ2JbMl0pO1xuICAgICAgICBsZXQgbCA9IGhzbFsyXTtcbiAgICAgICAgaWYgKGwgPj0gMC41KXtcbiAgICAgICAgICAgIHBlcmNlbnQgKj0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbCA9IGwgKyBwZXJjZW50O1xuICAgICAgICBoc2xbMl0gPSBsO1xuICAgICAgICByZXR1cm4gQ29sb3JVdGlsaXR5LmhzbFRvUmdiKGhzbFswXSwgaHNsWzFdLCBoc2xbMl0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWRpdDogdGFrZW4gZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTQ5MzA2MFxuICAgICAqXG4gICAgICogQ29udmVydHMgYW4gSFNMIGNvbG9yIHZhbHVlIHRvIFJHQi4gQ29udmVyc2lvbiBmb3JtdWxhXG4gICAgICogYWRhcHRlZCBmcm9tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlLlxuICAgICAqIEFzc3VtZXMgaCwgcywgYW5kIGwgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAxXSBhbmRcbiAgICAgKiByZXR1cm5zIHIsIGcsIGFuZCBiIGluIHRoZSBzZXQgWzAsIDI1NV0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gICB7bnVtYmVyfSAgaCAgICAgICBUaGUgaHVlXG4gICAgICogQHBhcmFtICAge251bWJlcn0gIHMgICAgICAgVGhlIHNhdHVyYXRpb25cbiAgICAgKiBAcGFyYW0gICB7bnVtYmVyfSAgbCAgICAgICBUaGUgbGlnaHRuZXNzXG4gICAgICogQHJldHVybiAge0FycmF5fSAgICAgICAgICAgVGhlIFJHQiByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIHN0YXRpYyBoc2xUb1JnYihoLCBzLCBsKXtcbiAgICAgICAgdmFyIHIsIGcsIGI7XG5cbiAgICAgICAgaWYgKHMgPT09IDApe1xuICAgICAgICAgICAgciA9IGcgPSBiID0gbDsgLy8gYWNocm9tYXRpY1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGh1ZTJyZ2IgPSBmdW5jdGlvbiAocCwgcSwgdCkge1xuICAgICAgICAgICAgICAgIGlmICh0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0ICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0ID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0IC09IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0IDwgMSAvIDYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0IDwgMSAvIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0IDwgMiAvIDMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgICAgIHZhciBwID0gMiAqIGwgLSBxO1xuICAgICAgICAgICAgciA9IGh1ZTJyZ2IocCwgcSwgaCArIDEgLyAzKTtcbiAgICAgICAgICAgIGcgPSBodWUycmdiKHAsIHEsIGgpO1xuICAgICAgICAgICAgYiA9IGh1ZTJyZ2IocCwgcSwgaCAtIDEgLyAzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbTWF0aC5yb3VuZChyICogMjU1KSwgTWF0aC5yb3VuZChnICogMjU1KSwgTWF0aC5yb3VuZChiICogMjU1KV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlZGl0OiB0YWtlbiBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85NDkzMDYwXG4gICAgICpcbiAgICAgKiBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNMLiBDb252ZXJzaW9uIGZvcm11bGFcbiAgICAgKiBhZGFwdGVkIGZyb20gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuXG4gICAgICogQXNzdW1lcyByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gYW5kXG4gICAgICogcmV0dXJucyBoLCBzLCBhbmQgbCBpbiB0aGUgc2V0IFswLCAxXS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtudW1iZXJ9ICByICAgICAgIFRoZSByZWQgY29sb3IgdmFsdWVcbiAgICAgKiBAcGFyYW0gICB7bnVtYmVyfSAgZyAgICAgICBUaGUgZ3JlZW4gY29sb3IgdmFsdWVcbiAgICAgKiBAcGFyYW0gICB7bnVtYmVyfSAgYiAgICAgICBUaGUgYmx1ZSBjb2xvciB2YWx1ZVxuICAgICAqIEByZXR1cm4gIHtBcnJheX0gICAgICAgICAgIFRoZSBIU0wgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBzdGF0aWMgcmdiVG9Ic2wociwgZywgYil7XG4gICAgICAgIHIgPSByIC8gMjU1O1xuICAgICAgICBnID0gZyAvIDI1NTtcbiAgICAgICAgYiA9IGIgLyAyNTU7XG4gICAgICAgIGxldCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICAgICAgbGV0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgICAgICBsZXQgaCwgcywgbCA9IChtYXggKyBtaW4pIC8gMjtcblxuICAgICAgICBpZiAobWF4ID09PSBtaW4pe1xuICAgICAgICAgICAgaCA9IHMgPSAwOyAvLyBhY2hyb21hdGljXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgICAgICAgICAgIHMgPSBsID4gMC41ID8gZCAvICgyIC0gbWF4IC0gbWluKSA6IGQgLyAobWF4ICsgbWluKTtcbiAgICAgICAgICAgIHN3aXRjaCAobWF4KXtcbiAgICAgICAgICAgICAgICBjYXNlIHI6IGggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBnOiBoID0gKGIgLSByKSAvIGQgKyAyOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaCAvPSA2O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtoLCBzLCBsXTtcbiAgICB9XG5cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE9wdGltaXplZENvdmVycyA9IHZvaWQgMDtcbnZhciBfID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ1bmRlcnNjb3JlXCIpKTtcbmZ1bmN0aW9uIGdldE9wdGltaXplZENvdmVycyhjb3ZlcnMsIGRlc2lyZWRTaXplKSB7XG4gICAgLy8gY292ZXJzQnlTaXplIGlzIG5vdyBhbiBhcnJheSBvZiBjb3ZlcnMsIGZyb20gc21hbGxlc3QgdG8gbGFyZ2VzdFxuICAgIHZhciBjb3ZlcnNCeVNpemUgPSBfLnNvcnRCeShjb3ZlcnMsICd3aWR0aCcpO1xuICAgIC8vIFN0YXJ0IHdpdGggdGhlIGJpZ2dlc3QgY292ZXJcbiAgICAvLyBDb3B5IG9iamVjdCB3aXRoIE9iamVjdC5hc3NpZ24oKSBzbyB3ZSBkb250IGRhbWFnZSByZWZlcmVuY2VcbiAgICB2YXIgb3B0aW1pemVkQ292ZXIgPSBPYmplY3QuYXNzaWduKHt9LCBfLmxhc3QoY292ZXJzQnlTaXplKSk7XG4gICAgaWYgKG9wdGltaXplZENvdmVyICYmIG9wdGltaXplZENvdmVyLmhyZWYpIHtcbiAgICAgICAgdmFyIGxlZ2FjeVRvT3B0aW1pemVkSW1hZ2VIb3N0c01hcCA9IHtcbiAgICAgICAgICAgICdodHRwczovL2ltZzEub2QtY2RuLmNvbS8nOiAnaHR0cHM6Ly9pYy5vZC1jZG4uY29tL3Jlc2l6ZScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9pbWFnZXMub3ZlcmRyaXZlY2hpbmEuY24vJzogJ2h0dHBzOi8vaW1hZ2VzLm92ZXJkcml2ZWNoaW5hLmNuL3Jlc2l6ZSdcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGhvc3RNYXBLZXkgPSBfLmZpbmQoT2JqZWN0LmtleXMobGVnYWN5VG9PcHRpbWl6ZWRJbWFnZUhvc3RzTWFwKSwgZnVuY3Rpb24gKGxlZ2FjeSkgeyByZXR1cm4gb3B0aW1pemVkQ292ZXIuaHJlZi5zdGFydHNXaXRoKGxlZ2FjeSk7IH0pO1xuICAgICAgICBpZiAoaG9zdE1hcEtleSkge1xuICAgICAgICAgICAgLy8gbG9vayB1cCB0aGUgY29ycmVzcG9uZGluZyBvcHRpbWl6ZWQgcm9vdCwgZS5nLiBodHRwczovL2ltZzEub2QtY2RuLmNvbS8gLT4gaHR0cHM6Ly9pYy5vZC1jZG4uY29tL3Jlc2l6ZVxuICAgICAgICAgICAgdmFyIG9wdGltaXplZEltYWdlSG9zdCA9IGxlZ2FjeVRvT3B0aW1pemVkSW1hZ2VIb3N0c01hcFtob3N0TWFwS2V5XTtcbiAgICAgICAgICAgIHZhciBvcHRpbWl6YXRpb25zID0gJ3R5cGU9YXV0byc7IC8vIGZvcm1hdCA9IGF1dG8gLT4gdXNlIHdlYnAgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBpdFxuICAgICAgICAgICAgdmFyIHBhdGggPSAnJztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgLy8gbm9kZS5qcyB1c2FnZSBzaG91bGQgYmUgZmluZSB3aXRoIHRoZSBVUkwgYXBpXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwob3B0aW1pemVkQ292ZXIuaHJlZik7XG4gICAgICAgICAgICAgICAgcGF0aCA9IHVybC5wYXRobmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGhhY2sgdG8gZ2V0IHVybCBwYXRobmFtZSBzaW5jZSBJRSBkb2Vzbid0IHN1cHBvcnQgdGhlIFVSTCBhcGkuICBJIGRpZG4ndCB3YW50IHRvIGFkZCBhIHBvbHlmaWxsXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICAgICAgYS5ocmVmID0gb3B0aW1pemVkQ292ZXIuaHJlZjtcbiAgICAgICAgICAgICAgICBwYXRoID0gYS5wYXRobmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7IC8vIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQgYWJvdXQgd2hldGhlciB0aGUgcGF0aG5hbWUgaW5jbHVkZXMgYSBsZWFkaW5nIHNsYXNoLCBidXQgdGhlIGNhY2hlZmx5IGFwaSByZXF1aXJlcyBleGFjdGx5IG9uZSBvbiB0aGUgdXJsIHBhcmFtXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBcIi9cIi5jb25jYXQocGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVuY29kZWRTcmNVcmwgPSBlbmNvZGVVUklDb21wb25lbnQocGF0aCk7XG4gICAgICAgICAgICB2YXIgY292ZXJIcmVmV2l0aG91dFNpemUgPSBcIlwiLmNvbmNhdChvcHRpbWl6ZWRJbWFnZUhvc3QsIFwiP1wiKS5jb25jYXQob3B0aW1pemF0aW9ucywgXCImdXJsPVwiKS5jb25jYXQoZW5jb2RlZFNyY1VybCwgXCImc3RyaXBtZXRhPXRydWVcIik7XG4gICAgICAgICAgICBvcHRpbWl6ZWRDb3Zlci5ocmVmID0gXCJcIi5jb25jYXQoY292ZXJIcmVmV2l0aG91dFNpemUsIFwiJndpZHRoPVwiKS5jb25jYXQoZGVzaXJlZFNpemUpO1xuICAgICAgICAgICAgb3B0aW1pemVkQ292ZXIuc3Jjc2V0ID0gXCJcIi5jb25jYXQoY292ZXJIcmVmV2l0aG91dFNpemUsIFwiJndpZHRoPVwiKS5jb25jYXQoTWF0aC5mbG9vcihkZXNpcmVkU2l6ZSAqIDIpLCBcIiAyeCwgXCIpICtcbiAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChjb3ZlckhyZWZXaXRob3V0U2l6ZSwgXCImd2lkdGg9XCIpLmNvbmNhdChNYXRoLmZsb29yKGRlc2lyZWRTaXplICogMS41KSwgXCIgMS41eCwgXCIpICtcbiAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChjb3ZlckhyZWZXaXRob3V0U2l6ZSwgXCImd2lkdGg9XCIpLmNvbmNhdChkZXNpcmVkU2l6ZSwgXCIgMXhcIik7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW1pemVkQ292ZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF8uZmluZChjb3ZlcnNCeVNpemUsIGZ1bmN0aW9uIChjb3ZlcikgeyByZXR1cm4gY292ZXIud2lkdGggPj0gZGVzaXJlZFNpemU7IH0pIHx8XG4gICAgICAgIF8ubGFzdChjb3ZlcnNCeVNpemUpOyAvLyBmaW5kcyB0aGUgZmlyc3QgY292ZXIgdGhhdCBpcyBiaWcgZW5vdWdoXG59XG5leHBvcnRzLmdldE9wdGltaXplZENvdmVycyA9IGdldE9wdGltaXplZENvdmVycztcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0T3B0aW1pemVkQ292ZXItdHMuanMubWFwXG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE9wdGltaXplZENvdmVyLXRzLmpzLm1hcFxuIiwiY29uc3QgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxuLyoqXG4gKiBEZWZpbmVzIGFsbCB0aGUgYXZhaWxhYmxlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSBtZWRpYSBlbmRwb2ludFxuICogQGNsYXNzIE1lZGlhUGFyYW1ldGVyc1xuICogcmVmOiBodHRwczovL3RodW5kZXIuYXBpLnRlc3Qub3ZlcmRyaXZlLmNvbS9kb2NzL3VpL2luZGV4IyEvTWVkaWEvVjJNZWRpYV9JbmRleE1lZGlhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgTWVkaWFQYXJhbWV0ZXJzIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWVkaWFUeXBlICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5tZWRpYVR5cGVzICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnRpdGxlICAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuc2VyaWVzICAgICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJJZCAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnB1Ymxpc2hlckVudGl0eUlkICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbXByaW50SWQgICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuY3JlYXRvciAgICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5jcmVhdG9ySWQgICAgICAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYWRkZWREYXRlICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5hdmFpbGFibGVGaXJzdCAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuc2hvd09ubHlBdmFpbGFibGUgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93T25seVByZXJlbGVhc2UgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dPbmx5THVja3lEYXlBdmFpbGFibGUgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQXVkaW9TeW5jaHJvbml6ZWRUZXh0ICAgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb25JZCAgICAgICAgICAgICAgID0gMDtcblxuICAgICAgICAvLyBBbGwgb2YgdGhlIGZvbGxvd2luZyBhcnJheXMgYXJlIHN0cmluZyBhcnJheXNcbiAgICAgICAgdGhpcy5mb3JtYXQgICAgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnN1YmplY3QgICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuYmlzYWNDb2RlICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5tYXR1cml0eUxldmVsICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmxhbmd1YWdlICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuYXRvc0xldmVsICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5sZXhpbGVTY29yZSAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmludGVyZXN0TGV2ZWwgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuZ3JhZGVMZXZlbCAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5pbmNsdWRlZEZhY2V0cyAgICAgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuc29ydEJ5ICAgICAgICAgICAgICAgICAgICAgPSAncmVsZXZhbmNlJztcbiAgICAgICAgdGhpcy5zaG93ICAgICAgICAgICAgICAgICAgICAgICA9ICdvd25lZCc7XG4gICAgICAgIHRoaXMucGFnZSAgICAgICAgICAgICAgICAgICAgICAgPSAxO1xuICAgICAgICB0aGlzLnBlclBhZ2UgICAgICAgICAgICAgICAgICAgID0gMjQ7XG4gICAgICAgIHRoaXMuaW5jbHVkZUZhY2V0cyAgICAgICAgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLmluY2x1ZGVOb0Zvcm1hdFRpdGxlcyAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyQ3BjVGl0bGVzICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXhJdGVtcyAgICAgICAgICAgICAgICAgICA9IDA7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCAuLi5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGFwcGx5Um9vbUZpbHRlcnNBbmRVc2VyUHJlZnMocm9vbUZpbHRlcnMsIHVzZXJQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAocm9vbUZpbHRlcnMpIHtcbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2ggdXAgc28gd2UgY2FuJ3QganVzdCBleHRlbmRcbiAgICAgICAgICAgIGlmIChyb29tRmlsdGVycy5tYXR1cml0eUxldmVscykge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0dXJpdHlMZXZlbCA9IHJvb21GaWx0ZXJzLm1hdHVyaXR5TGV2ZWxzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvb21GaWx0ZXJzLnN1YmplY3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0ID0gcm9vbUZpbHRlcnMuc3ViamVjdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gcm9vbUZpbHRlcnMubGFuZ3VhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubWVkaWFUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVR5cGUgPSByb29tRmlsdGVycy5tZWRpYVR5cGU7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVR5cGVzID0gcm9vbUZpbHRlcnMubWVkaWFUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZXJQcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG1vcmUgdXNlciBwcmVmcyB0byBhcHBseSBiZXNpZGVzIGF1ZGllbmNlLXNldHRpbmdzIGJ1dCB0aGlzXG4gICAgICAgICAgICAvLyB3YXMgdGhlIGltbWVkaWF0ZSBuZWVkLiAgV2UgY2FuIGFkZCBtb3JlIGFzIHRoZXkgY29tZSB1cC5cbiAgICAgICAgICAgIGlmICh1c2VyUHJlZmVyZW5jZXNbJ2F1ZGllbmNlLXNldHRpbmcnXSAmJiB0aGlzLm1hdHVyaXR5TGV2ZWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gdXNlclByZWZlcmVuY2VzWydhdWRpZW5jZS1zZXR0aW5nJ107XG4gICAgICAgICAgICAgICAgbGV0IG1hdHVyaXR5TGV2ZWxzID0gW107XG4gICAgICAgICAgICAgICAgXy5lYWNoKF8ua2V5cyhhdWRpZW5jZSksIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaWVuY2Vba2V5XSAmJiBrZXkgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXR1cml0eUxldmVscy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0dXJpdHlMZXZlbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHVyaXR5TGV2ZWwgPSBtYXR1cml0eUxldmVscztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IF8uZXh0ZW5kKHt9LCB0aGlzKTtcblxuICAgICAgICAvLyBSZW1vdmUgYWxsIHByb3BlcnRpZXMgdGhhdCBkbyBub3QgaGF2ZSBhIHZhbHVlIHNldFxuICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAhdGhpcy5faGFzVmFsdWUocmVzcG9uc2Vba2V5XSkgJiYgZGVsZXRlIHJlc3BvbnNlW2tleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBfaGFzVmFsdWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICEoKF8odmFsdWUpLmlzT2JqZWN0KCkgJiYgXyh2YWx1ZSkuaXNFbXB0eSgpKSB8fCAhdmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IE1lZGlhSW50ZXJmYWNlIGZyb20gJy4uL21lZGlhL01lZGlhSW50ZXJmYWNlJztcblxuaW1wb3J0IEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzIGZyb20gJy4uLy4uLy4uLy4uL2J1c2luZXNzLW9iamVjdHMvR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnO1xuXG4vLyByZWY6IFRodW5kZXIuTW9kZWxzLlJlc3BvbnNlTW9kZWxzLkNvbGxlY3Rpb25EZWZpbml0aW9uXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uRGVmaW5pdGlvbiBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcblxuICAgIGdldCBpZEF0dHJpYnV0ZSgpIHsgcmV0dXJuICdpZCc7IH1cblxuICAgIGdldCBjb2xsZWN0aW9uT3B0aW9ucygpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpbmNsdWRlRmFjZXRzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlclBhZ2U6ICAgICAgIHRoaXMucGFnZVNpemUgfHwgNixcbiAgICAgICAgICAgIHNodWZmbGU6ICAgICAgIHRoaXMuc2h1ZmZsZSB8fCB0aGlzLmlzTHVja3lEYXlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KCdzb3J0QnlBdmFpbGFiaWxpdHknKSB8fCB0aGlzLmdldCgnYXZhaWxhYmlsaXR5T3B0aW9uJykgPT09ICdhdmFpbGFibGUtZmlyc3QnKSB7XG4gICAgICAgICAgICBvcHRpb25zLmF2YWlsYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3dPbmx5QXZhaWxhYmxlJykgfHwgdGhpcy5nZXQoJ2F2YWlsYWJpbGl0eU9wdGlvbicpID09PSAnYXZhaWxhYmxlLW9ubHknKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNob3dPbmx5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3dPbmx5UHJlcmVsZWFzZScpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNob3dPbmx5UHJlcmVsZWFzZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXNlTGlzdE9yZGVyKXtcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydEJ5ID0gJ2xpc3RvcmRlcic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBkZWZhdWx0cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwJyxcbiAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlPcHRpb24gICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIHNob3dPbmx5QXZhaWxhYmxlICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd09ubHlQcmVyZWxlYXNlICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBzb3J0QnlBdmFpbGFiaWxpdHkgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscyAgICA6IG51bGwsXG4gICAgICAgICAgICBnZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyAgOiBudWxsLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIG9yZGVyICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG5cbiAgICAgICAgICAgIC8vIENvbXB1dGVkIHByb3BlcnR5XG4gICAgICAgICAgICB0b3RhbEl0ZW1zICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGlzTHVja3lEYXkoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlPcHRpb24nKSA9PT0gJ2F2YWlsYWJsZS1sdWNreWRheSc7XG4gICAgfVxuXG4gICAgZ2V0IGlzR2VuZXJhdGVkKCkge1xuICAgICAgICByZXR1cm4gIV8odGhpcy5nZXQoJ2dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzJykpLmlzRW1wdHkoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNDdXJhdGVkKCkge1xuICAgICAgICByZXR1cm4gIV8odGhpcy5nZXQoJ2N1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpKS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgZ2V0IHVzZUxpc3RPcmRlcigpe1xuICAgICAgICByZXR1cm4gdGhpcy5pc0N1cmF0ZWQgJiYgdGhpcy5nZXQoJ2N1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpLmlzT3JkZXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJvcCB7VGl0bGVDb2xsZWN0aW9ufSBjb2xsZWN0aW9uXG4gICAgICogQG1lbWJlcm9mIENvbGxlY3Rpb25EZWZpbml0aW9uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fbWVkaWFJbnRlcmZhY2UgPSBuZXcgTWVkaWFJbnRlcmZhY2UoKTtcblxuICAgICAgICB0aGlzLnRpdGxlQ29sbGVjdGlvbiA9IHRoaXMuX21lZGlhSW50ZXJmYWNlLml0ZW1zO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy50aXRsZUNvbGxlY3Rpb24sICdhbGwnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldCgndG90YWxJdGVtcycsIHRoaXMudGl0bGVDb2xsZWN0aW9uLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvblRpdGxlcyh7IHBhdHJvblNldHRpbmdzLCByb29tfSkge1xuICAgICAgICAvLyBQYXJzZSB0aGUgY3VycmVudCByb29tJ3MgbWF0dXJpdHlMZXZlbHMgaWYgdGhlcmUgaXMgYSByb29tLCBhbmQgYSBtYXR1cml0eUxldmVscyBmaWx0ZXIgaGFzIGJlZW4gc2V0XG4gICAgICAgIGxldCByb29tSGFzTWF0dXJpdHlMZXZlbEZpbHRlciA9ICFfLmlzRW1wdHkocm9vbSAmJiByb29tLmZpbHRlcnMgJiYgcm9vbS5maWx0ZXJzLm1hdHVyaXR5TGV2ZWxzKTtcblxuICAgICAgICBsZXQgcGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzID0gdGhpcy5fcGFyc2VQYXRyb25BdWRpZW5jZVNldHRpbmdzKHBhdHJvblNldHRpbmdzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0dlbmVyYXRlZCkge1xuICAgICAgICAgICAgbGV0IGdlbkNvbERldGFpbHMgPSB0aGlzLmdldCgnZ2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgZ2VuQ29sRGV0YWlscy5zb3J0QnkgPSB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhdGhpcy5nZXQoJ3Nob3dPbmx5THVja3lEYXlBdmFpbGFibGUnKSl7XG4gICAgICAgICAgICAgICAgZ2VuQ29sRGV0YWlscy5zaG93T25seUx1Y2t5RGF5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkZXRhaWxzID0gbmV3IEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzKGdlbkNvbERldGFpbHMpO1xuICAgICAgICAgICAgbGV0IHBhcmFtcyAgPSBkZXRhaWxzLnNlcmlhbGl6ZUZvclNlYXJjaCgpO1xuXG4gICAgICAgICAgICBpZiAoISFwYXRyb25TZXR0aW5ncy5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBhIHJvb20gd2l0aCBtYXR1cml0eSBmaWx0ZXJzIGFwcGxpZWQsIHRoZSBmaWx0ZXJzIHdpbGwgYmUgYXBhcnQgb2YgdGhlIGNvbGxlY3Rpb24gZGVmaW5pdGlvbiBhbmQgd2UgY2FuIHNpbXBseSBxdWVyeSBmb3IgdGhlIGNvbGxlY3Rpb25cbiAgICAgICAgICAgIC8vIFVzZXIgcHJlZmVyZW5jZXMgc2hvdWxkIE5PVCBvdmVycmlkZSBhIHJvb20ncyBtYXR1cml0eSBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChyb29tSGFzTWF0dXJpdHlMZXZlbEZpbHRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUludGVyZmFjZS5mZXRjaENvbGxlY3Rpb25CeVBhcmFtZXRlcnMocGFyYW1zLCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBkZXRlcm1pbmUgaWYgdGhlIFVzZXIncyBtYXR1cml0eSBmaWx0ZXIgc2V0dGluZ3MgY292ZXIgdGhlIGNvbGxlY3Rpb24ncyBtYXR1cml0eUxldmVsIHNldHRpbmdzXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmICghXyhwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMpLmlzRW1wdHkoKSAmJiBfKHBhcmFtcy5tYXR1cml0eUxldmVsKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihnZW5lcmF0ZWRDb2xsZWN0aW9uT3B0aW9ucywgeyBtYXR1cml0eUxldmVsOiBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRmFrZSBhbiBlbXB0eSByZXNwb25zZSBpZiBhbGwgdGhlIGF1dG8gZ2VuZXJhdGVkIGNvbGxlY3Rpb24ncyBmaWx0ZXJzIGFyZSBub3QgY292ZXJlZCBieSB0aGUgdXNlcidzIG1hdHVyaXR5IGxldmVsIHNldHRpbmdzXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHJvbkZpbHRlcnNQZXJtaXRDb2xsZWN0aW9uKHBhcmFtcy5tYXR1cml0eUxldmVsLCBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMpXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hDb2xsZWN0aW9uQnlQYXJhbWV0ZXJzKHBhcmFtcywgZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hFbXB0eVJlc3BvbnNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBpZiBcImlzQ3VyYXRlZFwiXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29sbGVjdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoISFwYXRyb25TZXR0aW5ncy5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzb3J0LWN1cmF0ZWQtbGlzdC1jYXJvdXNlbHMnKSAmJiB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zLnNvcnRCeSA9IHRoaXMuYXR0cmlidXRlcy5zb3J0Qnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBOT1QgaW4gYSByb29tLCBhcHBseSBhIHVzZXIncyBtYXR1cml0eSBzZXR0aW5ncyBpZiBwcmVzZW50IHRvIHRoZSBjb2xsZWN0aW9uIHJlcXVlc3RcbiAgICAgICAgICAgIC8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGlmIG5vbmUgb2YgdGhlIGNvbnRlbnQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgZmlsdGVyIGl0cyBhY2NlcHRhYmxlIHRoYXQgbm8gcmVzdWx0cyBhcmUgcmV0dXJuZWRcbiAgICAgICAgICAgIGlmIChfKHJvb20pLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zLCB7IG1hdHVyaXR5TGV2ZWw6IHBhdHJvbk1hdHVyaXR5TGV2ZWxQcmVmZXJlbmNlcyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhSW50ZXJmYWNlLmZldGNoQ29sbGVjdGlvbkJ5SWQodGhpcy5pZCwgY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdGhlIHBhdHJvbiBhdWRpZW5jZSBzZXR0aW5ncyBtb2RlbCBpbnRvIGFuIGFycmF5IG9mIGZpbHRlciB0ZXJtcyB0aGF0IE1lZGlhSW50ZXJmYWNlIHVuZGVyc3RhbmRzLCBleDpcbiAgICAvLyBcImF1ZGllbmNlLXNldHRpbmdcIjoge1xuICAgIC8vICAgICBcImFsbFwiICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAvLyAgICAgXCJqdXZlbmlsZVwiICAgICAgIDogZmFsc2UsXG4gICAgLy8gICAgIFwieW91bmdhZHVsdFwiICAgICA6IHRydWUsXG4gICAgLy8gICAgIFwiZ2VuZXJhbGNvbnRlbnRcIiA6IHRydWUsXG4gICAgLy8gICAgIFwiYWR1bHRvbmx5XCIgICAgICA6IHRydWVcbiAgICAvLyB9XG4gICAgLy8gdG86IFtcInlvdW5nYWR1bHRcIiwgXCJnZW5lcmFsY29udGVudFwiLCBcImFkdWx0b25seVwiXVxuICAgIC8qKiBAcmV0dXJucyB7c3RyaW5nW119ICovXG4gICAgX3BhcnNlUGF0cm9uQXVkaWVuY2VTZXR0aW5ncyhwYXRyb25TZXR0aW5ncykge1xuICAgICAgICBsZXQgcGF0cm9uQXVkaWVuY2VTZXR0aW5nID0gcGF0cm9uU2V0dGluZ3MgJiYgcGF0cm9uU2V0dGluZ3NbJ2F1ZGllbmNlLXNldHRpbmcnXSB8fCB7fTtcblxuICAgICAgICBpZiAoXyhwYXRyb25BdWRpZW5jZVNldHRpbmcpLmlzRW1wdHkoKSB8fCBwYXRyb25BdWRpZW5jZVNldHRpbmcuYWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXVkaWVuY2VGaWx0ZXJzID0gW107XG4gICAgICAgIF8ocGF0cm9uQXVkaWVuY2VTZXR0aW5nKS5lYWNoKChpc0FwcGxpZWQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQXBwbGllZCAmJiBrZXkgIT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgICAgICBhdWRpZW5jZUZpbHRlcnMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXVkaWVuY2VGaWx0ZXJzO1xuICAgIH1cblxuICAgIF9wYXRyb25GaWx0ZXJzUGVybWl0Q29sbGVjdGlvbihjb2xsZWN0aW9uTWF0dXJpdHlGaWx0ZXJzID0gW10sIHVzZXJNYXR1cml0eUZpbHRlcnMgPSBbXSkge1xuICAgICAgICBpZiAodXNlck1hdHVyaXR5RmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkxvd2VyID0gY29sbGVjdGlvbk1hdHVyaXR5RmlsdGVycy5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBjb25zdCB1c2VyTG93ZXIgPSB1c2VyTWF0dXJpdHlGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiBmaWx0ZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgcmV0dXJuIF8oY29sbGVjdGlvbkxvd2VyKS5kaWZmZXJlbmNlKHVzZXJMb3dlcikubGVuZ3RoID09PSAwO1xuICAgIH1cbn1cbiIsImltcG9ydCBDb2xsZWN0aW9uSGlnaGxpZ2h0VmlldyAgICAgIGZyb20gJy4uL2NvbGxlY3Rpb25faGlnaGxpZ2h0L3ZpZXdzL0NvbGxlY3Rpb25IaWdobGlnaHQnO1xuaW1wb3J0IFNsYW50ZWRDb2xsZWN0aW9uSGlnaGxpZ2h0ICAgZnJvbSAnLi4vY29sbGVjdGlvbl9oaWdobGlnaHRfc2xhbnRlZC9TbGFudGVkQ29sbGVjdGlvbkhpZ2h0bGlnaHQnO1xuY29uc3Qge2ZlYXR1cmVNYW5hZ2VyfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkhpZ2hsaWdodFZpZXdGYWN0b3J5XG57XG4gICAgc3RhdGljIEJ1aWxkKGNvbGxlY3Rpb25EZWZpbml0aW9uLCB2aWV3T3B0aW9ucywgZm9yY2VTbGFudGVkID0gZmFsc2Upe1xuICAgICAgICBpZiAoKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSAmJiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5pc0x1Y2t5RGF5KSB8fCBmb3JjZVNsYW50ZWQpe1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGFudGVkQ29sbGVjdGlvbkhpZ2hsaWdodCh2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb25IaWdobGlnaHRWaWV3KHZpZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBDb2xsZWN0aW9uRGVmaW5pdGlvbiBmcm9tICcuL0NvbGxlY3Rpb25EZWZpbml0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbk1hbmFnZXIgZXh0ZW5kcyBCYWNrYm9uZS5Db2xsZWN0aW9uIHtcbiAgICBnZXQgbW9kZWwoKSB7IHJldHVybiBDb2xsZWN0aW9uRGVmaW5pdGlvbjsgfVxufVxuIiwiaW1wb3J0IENvbGxlY3Rpb25EZWZpbml0aW9uIGZyb20gJy4vQ29sbGVjdGlvbkRlZmluaXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdlTWFuYWdlciBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcblxuICAgIGdldCBpZEF0dHJpYnV0ZSgpIHsgcmV0dXJuICdwYWdlSWQnOyB9XG5cbiAgICBnZXQgaXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiAhXy5pc0VtcHR5KHRoaXMuYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgLy8gcGFnZSA9PSByb29tLCBwYWdlIGhhcyB2aWV3cywgb25lIG9mIHdoaWNoIGlzIHRoZSBob21lLXBhZ2UgY29sbGVjdGlvbnMgY29sbGVjdGlvblxuICAgIC8vIHJlZjogL3YyL2xpYnJhcmllcy9xYS9wYWdlc1xuICAgIGZldGNoUm9vbUJ5SWQocm9vbUlkID0gJ2hvbWUnKSB7XG4gICAgICAgIHRoaXMudXJsID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3Qucm9vbXMuZ2V0LCB7IHJvb21JZCB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaCh7XG4gICAgICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogKG1vZGVsLCByZXNwb25zZSwgb3B0aW9ucykgPT4gcmVzb2x2ZShyZXNwb25zZSksXG4gICAgICAgICAgICAgICAgZXJyb3I6IChtb2RlbCwgcmVzcG9uc2UsIG9wdGlvbnMpID0+IHJlamVjdChyZXNwb25zZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmZXRjaENhbXBhaWduQnlJZChjYW1wYWlnbklkKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QuY2FtcGFpZ25zLmdldCwgeyBjYW1wYWlnbklkIH0pLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvbmUoKHJlc3BvbnNlKSA9PiByZXNvbHZlKHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAuZmFpbCgoanFIWFIpID0+IHJlamVjdChqcUhYUikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmZXRjaEZpcnN0RGlzcGxheWFibGVDYW1wYWlnbihyb29tSWQgPSAnaG9tZScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMucmVzdC5jYW1wYWlnbnMuZ2V0Rmlyc3REaXNwbGF5YWJsZSwgeyByb29tSWQgfSksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMDAwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG9uZSgocmVzcG9uc2UpID0+IHJlc29sdmUocmVzcG9uc2UpKVxuICAgICAgICAgICAgICAgIC5mYWlsKChqcUhYUikgPT4gcmVqZWN0KGpxSFhSKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvbkJ5SWQoY29sbGVjdGlvbklkKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QuY29sbGVjdGlvbnMuZ2V0QnlJZCwgeyBpZDogY29sbGVjdGlvbklkIH0pLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvbmUoKHJlc3BvbnNlKSA9PiByZXNvbHZlKG5ldyBDb2xsZWN0aW9uRGVmaW5pdGlvbihyZXNwb25zZSkpKVxuICAgICAgICAgICAgICAgIC5mYWlsKChqcUhYUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHJlamVjdChqcUhYUikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRWaWV3KHZpZXdOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xvYWRlZCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIHJldHVybiAodmlld05hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdob21lJ1xuICAgICAgICAgICAgPyBfKHRoaXMuYXR0cmlidXRlcy52aWV3cykuZmluZFdoZXJlKHsgaXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICA6IF8odGhpcy5hdHRyaWJ1dGVzLnZpZXdzKS5maW5kV2hlcmUoeyBuYW1lOiB2aWV3TmFtZSB9KTtcbiAgICB9XG5cbiAgICBnZXRDYW1wYWlnbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTG9hZGVkICYmIHRoaXMuYXR0cmlidXRlcy5jYW1wYWlnbnM7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgKHsgbmFtZSwgcm9vbSwgc2VlQWxsVXJsIH0pID0+IGBcbjxkaXYgY2xhc3M9XCJjb2xsZWN0aW9uLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJIZXJvLWJhbm5lciAkeyAhIXJvb20gJiYgYGlzLSR7cm9vbS50aGVtZU5hbWV9YCB9XCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBzbWFsbC0xMiBDb2xsZWN0aW9uIFN0YW5kYXJkXCI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJjb2xsZWN0aW9uVGl0bGUgTGFiZWwgbGVmdCBpbnZpc2libGVcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIke3NlZUFsbFVybH1cIiBjbGFzcz1cIlRpdGxlTGluayBDYXJvdXNlbC10aXRsZUxpbmsgJHsgISFyb29tICYmIGBpcy0ke3Jvb20udGhlbWVOYW1lfWAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtuYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLWZvcndhcmQtYXJyb3cgc2Vjb25kYXJ5LWNvbG9yXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiJHtzZWVBbGxVcmx9XCIgcm9sZT1cImxpbmtcIiBhcmlhLWxhYmVsPVwiJHsgaHRtbCgnY2Fyb3VzZWwuc2VlQWxsVGl0bGVzJywgeyBjb2xsZWN0aW9uTmFtZTogbmFtZSB9KSB9XCIgY2xhc3M9XCJDYXJvdXNlbC1zZWVBbGwgdS1hbGxDYXBzIGJ1dHRvbiByYWRpdXMgbm8tb3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAke2h0bWwoJ3NlZUFsbCcpfVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlc1wiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInRpdGxlQ29udGFpbmVyXCI+PC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PmA7XG4iLCJpbXBvcnQgVGl0bGVDb2xsZWN0aW9uVmlldyBmcm9tICcuLi8uLi9tZWRpYS9UaXRsZUNvbGxlY3Rpb25WaWV3JztcbmltcG9ydCBDb2xsZWN0aW9uSGlnaGxpZ2h0VGVtcGxhdGUgZnJvbSAnLi4vdGVtcGxhdGVzL2NvbGxlY3Rpb25faGlnaGxpZ2h0Lmh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uSGlnaGxpZ2h0IGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgdGVtcGxhdGUgPSBDb2xsZWN0aW9uSGlnaGxpZ2h0VGVtcGxhdGU7XG5cbiAgICB2aWV3QXR0cmlidXRlcyhjb2xsZWN0aW9uKSB7XG4gICAgICAgIGxldCBjbGFzc2VzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNIZXJvKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goYGxhcmdlLWJsb2NrLWdyaWQtJHtjb2xsZWN0aW9uLmxlbmd0aH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaChgbGFyZ2UtYmxvY2stZ3JpZC02YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPD0gMikge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGBzbWFsbC1ibG9jay1ncmlkLSR7Y29sbGVjdGlvbi5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGBzbWFsbC1ibG9jay1ncmlkLTIgbWVkaXVtLWJsb2NrLWdyaWQtM2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsYXNzOiBgdGl0bGVDb250YWluZXIgJHtjbGFzc2VzLmpvaW4oJyAnKX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHsgYnVzLCByb29tLCBpc0hlcm8gPSBmYWxzZSB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMucm9vbSA9IHJvb207XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IHRoaXMubW9kZWwudGl0bGVDb2xsZWN0aW9uO1xuICAgICAgICB0aGlzLmlzSGVybyA9IGlzSGVybztcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGdldCBzZWVBbGxVcmwoKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHRoaXMubW9kZWwuZ2V0KCdpZCcpO1xuICAgICAgICByZXR1cm4gd2luZG93LnVybCh3aW5kb3cucm91dGVzLmNvbGxlY3Rpb25CeUlkLCB7IGNvbGxlY3Rpb25JZCB9KTtcbiAgICB9XG5cbiAgICBnZXQgZGVzaXJlZFRpdGxlQ291bnQoKSB7XG4gICAgICAgIHJldHVybiA2O1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0ICR2aWV3ID0gJChcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgXy5leHRlbmQoe30sIHRoaXMubW9kZWwuYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICAgICAgICByb29tOiB0aGlzLnJvb20sXG4gICAgICAgICAgICAgICAgICAgIHNlZUFsbFVybDogdGhpcy5zZWVBbGxVcmwsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnRpdGxlQ29sbGVjdGlvblZpZXcgJiYgdGhpcy50aXRsZUNvbGxlY3Rpb25WaWV3LnJlbW92ZSgpO1xuXG4gICAgICAgIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldyA9IG5ldyBUaXRsZUNvbGxlY3Rpb25WaWV3KHtcbiAgICAgICAgICAgIGVsOiAkdmlldy5maW5kKCcudGl0bGVDb250YWluZXInKSxcbiAgICAgICAgICAgIGJ1czogdGhpcy5idXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLnZpZXdBdHRyaWJ1dGVzKHRoaXMuY29sbGVjdGlvbiksXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiB0aGlzLmNvbGxlY3Rpb24sXG4gICAgICAgICAgICBjb3ZlcldpZHRoczogeyBtb2JpbGU6IDE0NSwgdGFibGV0OiAxNjAsIGRlc2t0b3A6IDE5MCB9LFxuICAgICAgICAgICAgaXNJbkhlcm86IHRoaXMuaXNIZXJvLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgIHJvb206IHRoaXMucm9vbSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlZjogTEhUTkctMTk3MCAtIGhpZGluZyB0aGUgbGFzdCB0d28gZWxlbWVudHMgc28gd2UgY2FuIHJlbW92ZSB0aGUgb3ZlcmZsb3cgaGlkZGVuIG9uIHRoZSBwYXJlbnQgY29udGFpbmVyXG4gICAgICAgICR2aWV3LmZpbmQoJy5JdGVtJykuZWFjaCgoaSwgZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpID4gMykge1xuICAgICAgICAgICAgICAgICQoZWwpLmFkZENsYXNzKGB0aXRsZXMtaXRlbS1vdmVyZmxvd2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCgkdmlldyk7XG4gICAgICAgIGlmICh0aGlzLmlzSGVybykge1xuICAgICAgICAgICAgdGhpcy5tYWtlSGVybygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbWFrZUhlcm8oKSB7XG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICB0aGlzLmlzSGVybyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuY29sbGVjdGlvbi1jb250YWluZXInKS5hZGRDbGFzcygnSGVybycpO1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmljb24tZm9yd2FyZC1hcnJvdycpLnJlbW92ZSgpO1xuICAgICAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoJy5jb2xsZWN0aW9uVGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICAuYWZ0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBgPHAgY2xhc3M9XCJIZXJvLWNvbGxlY3Rpb25EZXNjcmlwdGlvblwiPiR7ZGVzY3JpcHRpb259PC9wPmBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy50aXRsZUNvbGxlY3Rpb25WaWV3ICYmIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldy5yZW1vdmUoKTtcbiAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlVGl0bGVWaXNpYmlsaXR5KGlzVmlzaWJsZSkge1xuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLiRlbC5maW5kKCcuY29sbGVjdGlvblRpdGxlJyk7XG4gICAgICAgIGlzVmlzaWJsZVxuICAgICAgICAgICAgPyB0aXRsZS5yZW1vdmVDbGFzcygnaW52aXNpYmxlJylcbiAgICAgICAgICAgIDogdGl0bGUuYWRkQ2xhc3MoJ2ludmlzaWJsZScpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0ICh7Y292ZXJHcmlkU2l6ZUNsYXNzLCBjb2xsZWN0aW9uVGl0bGUsIGNvbGxlY3Rpb25EZXNjcmlwdGlvbiwgY29sbGVjdGlvbklkLCBjb3ZlcnNIdG1sLCBiYW5uZXJCYWNrZ3JvdW5kQ29sb3IsIGJhbm5lclRleHRDb2xvciwgaXNIZXJvLCB1c2VGYWxsYmFja0Rpc3BsYXksIGZhbGxCYWNrR3JpZFdpZHRofSkgPT4gYFxuPGRpdiBjbGFzcz1cInNsYW50ZWRDb2xsZWN0aW9uSGlnaGxpZ2h0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1haW5Cb3ggJHtpc0hlcm8gPyAnaGVybycgOiAnJ31cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHRCbG9ja091dGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiR7YmFubmVyQmFja2dyb3VuZENvbG9yfTtjb2xvcjoke2Jhbm5lclRleHRDb2xvcn1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0QmxvY2tJbm5lciBpbnZpc2libGVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nV3JhcHBlclwiPjxhIGNsYXNzPVwidGl0bGVcIiBocmVmPVwiJHt3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuY29sbGVjdGlvbkJ5SWQsIHtjb2xsZWN0aW9uSWQ6IGNvbGxlY3Rpb25JZH0pfVwiPiR7Y29sbGVjdGlvblRpdGxlfTwvYT48L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7Y29sbGVjdGlvbkRlc2NyaXB0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY29sbGVjdGlvbkxpbmsgaG9yaXpvbnRhbFwiIGhyZWY9XCIke3dpbmRvdy51cmwod2luZG93LnJvdXRlcy5jb2xsZWN0aW9uQnlJZCwge2NvbGxlY3Rpb25JZDogY29sbGVjdGlvbklkfSl9XCI+JHt3aW5kb3cudGV4dCgnc2VlQWxsJyl9PGkgY2xhc3M9XCJpY29uLWZvcndhcmQtYXJyb3dcIi8+PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVDb3ZlcnMgJHtjb3ZlckdyaWRTaXplQ2xhc3N9XCI+XG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRXcmFwcGVyT3V0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRXcmFwcGVyQXNwZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3VzZUZhbGxiYWNrRGlzcGxheSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHVsIGNsYXNzPVwiZmFsbGJhY2tDb3ZlckdyaWQgc21hbGwtYmxvY2stZ3JpZC0ke2ZhbGxCYWNrR3JpZFdpZHRofVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y292ZXJzSHRtbC5tYXAoKGh0bWwpID0+IGA8bGkgY2xhc3M9XCJjb3ZlckltYWdlQ29udGFpbmVyQ29udGFpbmVyXCI+JHtodG1sfTwvbGk+YCkuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPmAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJncmlkSW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvdmVyc0h0bWwubWFwKChjb3Zlckh0bWwsIGluZGV4KSA9PiBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImMke2luZGV4ICsgMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb3Zlckh0bWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCkuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGEgY2xhc3M9XCJjb2xsZWN0aW9uTGluayB2ZXJ0aWNhbFwiIGhyZWY9XCIke3dpbmRvdy51cmwod2luZG93LnJvdXRlcy5jb2xsZWN0aW9uQnlJZCwge2NvbGxlY3Rpb25JZDogY29sbGVjdGlvbklkfSl9XCI+JHt3aW5kb3cudGV4dCgnc2VlQWxsJyl9PGkgY2xhc3M9XCJpY29uLWZvcndhcmQtYXJyb3dcIi8+PC9hPlxuPC9kaXY+XG5gO1xuXG4iLCJpbXBvcnQgU2xhbnRlZEdyaWRUZW1wbGF0ZSAgZnJvbSAnLi9TbGFudGVkQ29sbGVjdGlvbkhpZ2h0bGlnaHQuaHRtbCc7XG5pbXBvcnQgQ292ZXIgZnJvbSAnLi4vbWVkaWEvQ292ZXInO1xuaW1wb3J0IFRpdGxlTmFtZSBmcm9tICcuLi9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVOYW1lJztcbmltcG9ydCBDb2xvclV0aWxpdHkgZnJvbSAnLi4vLi4vLi4vLi4vbGliL2NvbG9yVXRpbGl0eSc7XG5jb25zdCB7T3ZlckRyaXZlfSA9IHdpbmRvdztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTbGFudGVkQ29sbGVjdGlvbkhpZ2hsaWdodCBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuXG4gICAgdGVtcGxhdGUgPSBTbGFudGVkR3JpZFRlbXBsYXRlO1xuICAgIGNvbnN0cnVjdG9yKHsgYnVzLCByb29tLCBpc0hlcm8gPSBmYWxzZSwgdGl0bGVDb3VudE92ZXJyaWRlID0gbnVsbCB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcbiAgICAgICAgdGhpcy5idXMgICAgICAgICA9IGJ1cztcbiAgICAgICAgdGhpcy5yb29tICAgICAgICA9IHJvb207XG4gICAgICAgIHRoaXMuaXNIZXJvICAgICAgPSBpc0hlcm87XG4gICAgICAgIHRoaXMuaGlnaENvbnRyYXN0TW9kZSA9IHdpbmRvdy5PdmVyRHJpdmUuaGlnaENvbnRyYXN0O1xuICAgICAgICB0aGlzLnRpdGxlQ291bnRPdmVycmlkZSA9IHRpdGxlQ291bnRPdmVycmlkZTtcblxuICAgICAgICB0aGlzLl92ZXJ0VG9Ib3JpekJyZWFrcG9pbnRQeCA9IDcyMDtcbiAgICAgICAgdGhpcy5fY292ZXJCbG9ja1dpZHRoUGVyY2VudExhcmdlID0gMC41ODtcbiAgICAgICAgdGhpcy5fY292ZXJCbG9ja1dpZHRoUGVyY2VudGFnZVNtYWxsID0gMTtcblxuICAgICAgICB0aGlzLl9zbWFsbEdyaWRNYXhXaWR0aFB4ID0gNTU1O1xuICAgICAgICB0aGlzLl9tZWRpdW1HcmlkTWF4V2lkdGhQeCA9IDY2NztcbiAgICAgICAgdGhpcy5fbGFyZ2VHcmlkTWF4V2lkdGhQeCA9IDEyODA7XG4gICAgICAgIHRoaXMuX2NvdmVyUGxhY2Vob2xkZXJIdG1sID0gJzxkaXYgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwiQ292ZXJJbWFnZUNvbnRhaW5lciBwbGFjZWhvbGRlclwiPjwvZGl2Pic7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICBsZXQgY29sb3JzID0gdGhpcy5nZXRUaXRsZVBhbmVsQ29sb3JzKCk7XG5cbiAgICAgICAgbGV0IHNpemVJbmZvID0gdGhpcy5nZXRHcmlkU2l6ZSgpO1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZChcbiAgICAgICAgICAgICQodGhpcy50ZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgY292ZXJHcmlkU2l6ZUNsYXNzOiBzaXplSW5mby5jbGFzcyxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVGl0bGU6IHRoaXMubW9kZWwuZ2V0KCduYW1lJyksXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbkRlc2NyaXB0aW9uOiB0aGlzLm1vZGVsLmdldCgnZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSWQ6IHRoaXMubW9kZWwuZ2V0KCdpZCcpLFxuICAgICAgICAgICAgICAgIGNvdmVyc0h0bWw6IHRoaXMuZ2V0Q292ZXJzSHRtbCgpLFxuICAgICAgICAgICAgICAgIGJhbm5lckJhY2tncm91bmRDb2xvcjogY29sb3JzLmJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgYmFubmVyVGV4dENvbG9yOiBjb2xvcnMuZm9yZWdyb3VuZCxcbiAgICAgICAgICAgICAgICBpc0hlcm86IHRoaXMuaXNIZXJvLFxuICAgICAgICAgICAgICAgIHVzZUZhbGxiYWNrRGlzcGxheTogdGhpcy51c2VGYWxsYmFja0Rpc3BsYXksXG4gICAgICAgICAgICAgICAgZmFsbEJhY2tHcmlkV2lkdGg6IHNpemVJbmZvLmdyaWRXaWR0aEZhbGxiYWNrXG4gICAgICAgICAgICB9KSkpO1xuXG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcudGV4dEJsb2NrSW5uZXIgYScpLm9uKCdtb3VzZW92ZXInLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZ0LmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3IgPSBjb2xvcnMuZm9yZWdyb3VuZEhvdmVyO1xuICAgICAgICAgICAgfSkub24oJ21vdXNlb3V0JywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yID0gY29sb3JzLmZvcmVncm91bmQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBnZXQgZGVzaXJlZFRpdGxlQ291bnQoKXtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVDb3VudE92ZXJyaWRlKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpdGxlQ291bnRPdmVycmlkZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzaXplSW5mbyA9IHRoaXMuZ2V0R3JpZFNpemUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlRmFsbGJhY2tEaXNwbGF5ID8gc2l6ZUluZm8ubnVtQ292ZXJzRmFsbGJhY2sgOiBzaXplSW5mby5udW1Db3ZlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHVzZUZhbGxiYWNrRGlzcGxheSgpe1xuICAgICAgICByZXR1cm4gd2luZG93Lk1vZGVybml6ciAmJiAhd2luZG93Lk1vZGVybml6ci5jc3NncmlkO1xuICAgIH1cblxuICAgIGdldEdyaWRTaXplKCl7XG5cbiAgICAgICAgY29uc3QgeGxhcmdlID0ge1xuICAgICAgICAgICAgY2xhc3M6ICdleHRyYUxhcmdlJyxcbiAgICAgICAgICAgIG51bUNvdmVyczogMzksXG4gICAgICAgICAgICBudW1Db3ZlcnNGYWxsYmFjazogNDcsXG4gICAgICAgICAgICBudW1UaWxlc0ZhbGxiYWNrOiAxMTcsXG4gICAgICAgICAgICBncmlkV2lkdGhGYWxsYmFjazogMTMsXG4gICAgICAgICAgICBwbGFjZWhvbGRlckluZGV4ZXM6IFs0LDUsNiw3LDgsOSwxMCwxMSwxMiwxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMl1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBsYXJnZSA9IHtcbiAgICAgICAgICAgIGNsYXNzOiAnbGFyZ2UnLFxuICAgICAgICAgICAgbnVtQ292ZXJzOiAyNSxcbiAgICAgICAgICAgIG51bUNvdmVyc0ZhbGxiYWNrOiAyNSxcbiAgICAgICAgICAgIG51bVRpbGVzRmFsbGJhY2s6IDU0LFxuICAgICAgICAgICAgZ3JpZFdpZHRoRmFsbGJhY2s6IDksXG4gICAgICAgICAgICBwbGFjZWhvbGRlckluZGV4ZXM6IFswLDQsNSw2LDcsOCwxNCwxNSwxNiwxNywxOCwyNSwyNiwyNywyOCwzNSwzNiwzNywzOCwzOSw0NCw0NSw0Niw0Nyw0OCw0OSw1Miw1M11cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtZWRpdW0gPSB7XG4gICAgICAgICAgICBjbGFzczogJ21lZGl1bScsXG4gICAgICAgICAgICBudW1Db3ZlcnM6IDE3LFxuICAgICAgICAgICAgbnVtQ292ZXJzRmFsbGJhY2s6IDIxLFxuICAgICAgICAgICAgbnVtVGlsZXNGYWxsYmFjazogMzUsXG4gICAgICAgICAgICBncmlkV2lkdGhGYWxsYmFjazogNyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVySW5kZXhlczogWzAsNCw1LDYsMTIsMTMsMTQsMjEsMjIsMjgsMjksMzAsMzFdXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc21hbGwgPSB7XG4gICAgICAgICAgICBjbGFzczogJ3NtYWxsJyxcbiAgICAgICAgICAgIG51bUNvdmVyczogMTIsXG4gICAgICAgICAgICBudW1Db3ZlcnNGYWxsYmFjazogMjAsXG4gICAgICAgICAgICBudW1UaWxlc0ZhbGxiYWNrOiAyMCxcbiAgICAgICAgICAgIGdyaWRXaWR0aEZhbGxiYWNrOiA1LFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJJbmRleGVzOiBbMCwxMCwxNSwxNl1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyB0YWtlIHRoZSBtYXggb2YgdGhlIGF2YWlsYWJsZSB3aWR0aCBhbmQgaGVpZ2h0IHNvIHdlIGRvbid0IG5lZWQgdG8gcmVyZW5kZXIgd2hlbiB0aGUgZGV2aWNlIHJvdGF0ZXNcbiAgICAgICAgbGV0IGxhcmdlRGltZW5zaW9uID0gTWF0aC5tYXgod2luZG93LnNjcmVlbi5hdmFpbFdpZHRoLCB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0KTtcbiAgICAgICAgbGV0IHNtYWxsRGltZW5zaW9uID0gTWF0aC5taW4od2luZG93LnNjcmVlbi5hdmFpbFdpZHRoLCB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0KTtcblxuICAgICAgICBsZXQgbGFuZHNjYXBlTWF4R3JpZFdpZHRoID0gKGxhcmdlRGltZW5zaW9uIDwgdGhpcy5fdmVydFRvSG9yaXpCcmVha3BvaW50UHgpXG4gICAgICAgICAgICA/IGxhcmdlRGltZW5zaW9uICogdGhpcy5fY292ZXJCbG9ja1dpZHRoUGVyY2VudGFnZVNtYWxsXG4gICAgICAgICAgICA6IGxhcmdlRGltZW5zaW9uICogdGhpcy5fY292ZXJCbG9ja1dpZHRoUGVyY2VudExhcmdlO1xuXG4gICAgICAgIGxldCBwb3J0cmFpdE1heEdyaWRXaWR0aCA9IChzbWFsbERpbWVuc2lvbiA8IHRoaXMuX3ZlcnRUb0hvcml6QnJlYWtwb2ludFB4KVxuICAgICAgICAgICAgPyBzbWFsbERpbWVuc2lvbiAqIHRoaXMuX2NvdmVyQmxvY2tXaWR0aFBlcmNlbnRhZ2VTbWFsbFxuICAgICAgICAgICAgOiBzbWFsbERpbWVuc2lvbiAqIHRoaXMuX2NvdmVyQmxvY2tXaWR0aFBlcmNlbnRMYXJnZTtcblxuICAgICAgICBsZXQgbWF4Q292ZXJHcmlkV2lkdGggPSBNYXRoLm1heChsYW5kc2NhcGVNYXhHcmlkV2lkdGgsIHBvcnRyYWl0TWF4R3JpZFdpZHRoKTtcblxuICAgICAgICBpZiAobWF4Q292ZXJHcmlkV2lkdGggPD0gdGhpcy5fc21hbGxHcmlkTWF4V2lkdGhQeCl7XG4gICAgICAgICAgICByZXR1cm4gc21hbGw7XG4gICAgICAgIH0gZWxzZSBpZiAobWF4Q292ZXJHcmlkV2lkdGggPD0gdGhpcy5fbWVkaXVtR3JpZE1heFdpZHRoUHgpe1xuICAgICAgICAgICAgcmV0dXJuIG1lZGl1bTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXhDb3ZlckdyaWRXaWR0aCA8PSB0aGlzLl9sYXJnZUdyaWRNYXhXaWR0aFB4KXtcbiAgICAgICAgICAgIHJldHVybiBsYXJnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB4bGFyZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRUaXRsZVBhbmVsQ29sb3JzKCl7XG5cbiAgICAgICAgbGV0IGJhY2tncm91bmRDb2xvcjtcblxuICAgICAgICBpZiAodGhpcy5oaWdoQ29udHJhc3RNb2RlKXtcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yVXRpbGl0eS5oaWdoQ29udHJhc3RCbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY2hvb3NlIGEgZGlmZmVyZW50IGNvdmVyIGZvciB0aGUgc291cmNlIGNvbG9yIHdoZW4gdGhlIHRpdGxlIGJsb2NrIGlzIHJlbmRlcmVkIGFib3ZlIHRoZSBjb3ZlciBncmlkLlxuICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBpcyBuaWNlciBpZiB0aGUgc291cmNlIGNvdmVyIGlzIGFidXRzIHRoZSBjb2xvcmVkIGFyZWEgdGhhdCBtYXRjaGVzIGl0LlxuICAgICAgICAgICAgbGV0IGNvbG9yU291cmNlVGl0bGUgPSB0aGlzLm1vZGVsLnRpdGxlQ29sbGVjdGlvbi5maXJzdCgpO1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgdGhpcy5fdmVydFRvSG9yaXpCcmVha3BvaW50UHggJiYgdGhpcy5tb2RlbC50aXRsZUNvbGxlY3Rpb24ubGVuZ3RoID4gMil7XG4gICAgICAgICAgICAgICAgY29sb3JTb3VyY2VUaXRsZSA9IHRoaXMubW9kZWwudGl0bGVDb2xsZWN0aW9uLmF0KDIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY292ZXIgPSBjb2xvclNvdXJjZVRpdGxlLmdldENvdmVyKDMwMCk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAnI2E3OWQ5OSc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0hlcm8gJiYgT3ZlckRyaXZlLmNvbG9ycy5wcmltYXJ5KXtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBPdmVyRHJpdmUuY29sb3JzLnByaW1hcnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghY29sb3JTb3VyY2VUaXRsZS5pc1BsYWNlaG9sZGVyICYmIGNvdmVyICYmIGNvdmVyLnByaW1hcnlDb2xvcil7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY292ZXIucHJpbWFyeUNvbG9yLmhleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNhNzlkOTknO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZvcmVncm91bmRDb2xvciA9IENvbG9yVXRpbGl0eS5nZXRUZXh0Q29sb3JGcm9tSGV4KGJhY2tncm91bmRDb2xvcik7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgIGZvcmVncm91bmQ6IGZvcmVncm91bmRDb2xvcixcbiAgICAgICAgICAgIGZvcmVncm91bmRIb3ZlcjogQ29sb3JVdGlsaXR5LnNoYWRlQ29sb3JIZXgoYmFja2dyb3VuZENvbG9yLCAwLjIpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIG9uZSBjb3ZlciBmb3IgZWFjaCBhdmFpbGFibGUgdGl0bGUgYW5kIHRoZW4gcmVwZWF0IHRoZW0gdG8gcmVhY2ggdGhlXG4gICAgLy8gZGVzaXJlZCBjb3ZlciBjb3VudFxuICAgIGdldENvdmVyc0h0bWwoKXtcbiAgICAgICAgdGhpcy5yZW5kZXJCYXNlQ292ZXJzKCk7XG4gICAgICAgIGxldCBzaXplSW5mbyA9IHRoaXMuZ2V0R3JpZFNpemUoKTtcblxuICAgICAgICBsZXQgbnVtUmVxdWlyZWQgPSAhdGhpcy51c2VGYWxsYmFja0Rpc3BsYXkgPyBzaXplSW5mby5udW1Db3ZlcnMgOiBzaXplSW5mby5udW1UaWxlc0ZhbGxiYWNrO1xuXG4gICAgICAgIGxldCByZXN1bHRzID0gW107XG4gICAgICAgIHdoaWxlIChyZXN1bHRzLmxlbmd0aCA8IG51bVJlcXVpcmVkKXtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY292ZXJNYXJrdXAubGVuZ3RoICYmIChyZXN1bHRzLmxlbmd0aCA8IG51bVJlcXVpcmVkKTspe1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy51c2VGYWxsYmFja0Rpc3BsYXkgfHwgIXNpemVJbmZvLnBsYWNlaG9sZGVySW5kZXhlcy5pbmNsdWRlcyhyZXN1bHRzLmxlbmd0aCkpe1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fY292ZXJNYXJrdXBbaV0pO1xuICAgICAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGRpc3BsYXkgbW9kZSB1c2VzIHBsYWNlaG9sZGVyIGNvdmVycyB0byBmaWxsIG91dCB0aGUgcGFydHMgb2YgdGhlIGdyaWRcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB3aWxsIGJlIGNsaXBwZWQgb2ZmIGJ5IHRoZSBwYXJlbnQgY29udGFpbmVyLlxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fY292ZXJQbGFjZWhvbGRlckh0bWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICByZW5kZXJCYXNlQ292ZXJzKCkge1xuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcbiAgICAgICAgdGhpcy5fY292ZXJNYXJrdXAgPSBbXTtcbiAgICAgICAgdGhpcy5tb2RlbC50aXRsZUNvbGxlY3Rpb24uZWFjaCgodGl0bGUpID0+IHtcblxuICAgICAgICAgICAgaWYgKHRpdGxlLmlzUGxhY2Vob2xkZXIpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyTWFya3VwLnB1c2godGhpcy5fY292ZXJQbGFjZWhvbGRlckh0bWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvdmVyID0gbmV3IENvdmVyKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBjb3ZlcldpZHRoczoge21vYmlsZTogMjAwLCB0YWJsZXQ6IDMwMCwgZGVza3RvcDogNDAwfSxcbiAgICAgICAgICAgICAgICAgICAgaXNJbkhlcm86IHRoaXMuaXNIZXJvXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY292ZXIucmVuZGVyKCk7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBhZGQgYSBoaWRkZW4gdGl0bGUgbmFtZSBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGVOYW1lID0gbmV3IFRpdGxlTmFtZSh7bW9kZWw6IHRpdGxlfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb3Zlck1hcmt1cC5wdXNoKGAke2NvdmVyLmVsLmlubmVySFRNTH0gPGgzIGNsYXNzPVwiaGlkZGVuVGl0bGVOYW1lXCI+JHt0aXRsZU5hbWUuZWwuaW5uZXJIVE1MfTwvaDM+YCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKGNvdmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKHRpdGxlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodikgPT4gdi5yZW1vdmUoKSk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIG1ha2VIZXJvKCkge1xuICAgICAgICB0aGlzLmlzSGVybyA9IHRydWU7XG4gICAgICAgIHRoaXMuJGVsLmZpbmQoJy5tYWluQm94JykuYWRkQ2xhc3MoJ2hlcm8nKTtcbiAgICAgICAgbGV0IGNvbG9ycyA9IHRoaXMuZ2V0VGl0bGVQYW5lbENvbG9ycygpO1xuICAgICAgICB0aGlzLiRlbC5maW5kKCcudGV4dEJsb2NrT3V0ZXInKS5hdHRyKCdzdHlsZScsIGBiYWNrZ3JvdW5kLWNvbG9yOiR7Y29sb3JzLmJhY2tncm91bmR9O2NvbG9yOiR7Y29sb3JzLmZvcmVncm91bmR9YCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlVGl0bGVWaXNpYmlsaXR5KGlzVmlzaWJsZSkge1xuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLiRlbC5maW5kKCcudGV4dEJsb2NrSW5uZXInKTtcbiAgICAgICAgaXNWaXNpYmxlID8gdGl0bGUucmVtb3ZlQ2xhc3MoJ2ludmlzaWJsZScpIDogdGl0bGUuYWRkQ2xhc3MoJ2ludmlzaWJsZScpO1xuICAgIH1cbn1cbiIsImltcG9ydCBRdWVyeVN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc2hNYW5hZ2VyIHtcblxuICAgIHN0YXRpYyBwYXJzZSgpIHtcbiAgICAgICAgbGV0IGhhc2hPYmplY3QgPSBRdWVyeVN0cmluZy5wYXJzZShsb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7XG5cbiAgICAgICAgXy5rZXlzKGhhc2hPYmplY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaGFzaE9iamVjdFtrZXldID0gXy5mbGF0dGVuKFtoYXNoT2JqZWN0W2tleV0gfHwgW11dKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGhhc2hPYmplY3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIHVwZGF0ZShvYmplY3QpIHtcbiAgICAgICAgbGV0IG5ld0hhc2ggPSBRdWVyeVN0cmluZy5zdHJpbmdpZnkob2JqZWN0KTtcbiAgICAgICAgaWYgKG5ld0hhc2ggIT09ICcmJyl7XG4gICAgICAgICAgICBsb2NhdGlvbi5oYXNoID0gbmV3SGFzaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQoa2V5KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXMucGFyc2UoKTtcblxuICAgICAgICBpZiAoXy5pc1N0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Vba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldID0gXy5mbGF0dGVuKFt2YWx1ZV0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKGhhc2gpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGtleSwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldID0gaGFzaFtrZXldIHx8IFtdO1xuICAgICAgICBoYXNoW2tleV0ucHVzaCh2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUoaGFzaCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZShrZXkpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldICYmIGRlbGV0ZSBoYXNoW2tleV07XG5cbiAgICAgICAgdGhpcy51cGRhdGUoaGFzaCk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgKCkgPT4gYFxuPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxhcmdlLTUgc21hbGwtOCBzbWFsbC1jZW50ZXJlZCBjb2x1bW5zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItY29udGFpbmVyIHRleHQtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjcwcHhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYWxlcnQgY2xhc3M9XCJhbGVydC1ib3ggYWxlcnQgcmFkaXVzXCI+XG4gICAgICAgICAgICAgICAgICAgICR7d2luZG93LnRleHQoJ2Vycm9yLmVycm9yQ29udGFjdFN1cHBvcnQnLCB7bGluazogYDxhIGNsYXNzPVwiYm9sZFwiIGhyZWY9XCIke3dpbmRvdy51cmwod2luZG93LnJvdXRlcy5zdXBwb3J0TWVtYmVycyl9XCIgdGFiaW5kZXg9XCIwXCI+JHt3aW5kb3cuaHRtbCgncGxlYXNlQ29udGFjdFN1cHBvcnQnKX08L2E+YH0pfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gO1xuIiwiY29uc3QgeyBMb2dnZXIsIGh0bWwgfSA9IHdpbmRvdztcbmNvbnN0IHsgaXNBdXRoZW50aWNhdGVkLCBoYXNMaW5rZWRDYXJkcyB9ID0gd2luZG93Lk92ZXJEcml2ZTtcblxuaW1wb3J0ICcuLi8uLi91dGlsL1Byb21pc2UnO1xuaW1wb3J0IEVycm9yVGVtcGxhdGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24vdGVtcGxhdGVzL0Vycm9yLmh0bWwnO1xuXG5pbXBvcnQgUHJvY2Vzc0ZvcndhcmRlZEFjdGlvbiBmcm9tICcuLi8uLi91dGlsL3RpdGxlLWFjdGlvbnMvcHJvY2Vzc0ZvcndhcmRlZEFjdGlvbic7XG5pbXBvcnQgSGFzaE1hbmFnZXIgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24vSGFzaE1hbmFnZXInO1xuaW1wb3J0IFRpdGxlQ29sbGVjdGlvbiBmcm9tICcuLi9tZWRpYS9tb2RlbHMvVGl0bGVDb2xsZWN0aW9uJztcblxuaW1wb3J0IFBhZ2VNYW5hZ2VyIGZyb20gJy4uL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9QYWdlTWFuYWdlcic7XG5pbXBvcnQgQ29sbGVjdGlvbk1hbmFnZXIgZnJvbSAnLi4vY29sbGVjdGlvbl9jYW1wYWlnbl9wYWdlL0NvbGxlY3Rpb25NYW5hZ2VyJztcbmltcG9ydCBDb2xsZWN0aW9uSGlnaGxpZ2h0VmlldyBmcm9tICcuLi9jb2xsZWN0aW9uX2hpZ2hsaWdodC92aWV3cy9Db2xsZWN0aW9uSGlnaGxpZ2h0JztcbmltcG9ydCBDb2xsZWN0aW9uSGlnaGxpZ2h0RmFjdG9yeSBmcm9tICcuLi9jb2xsZWN0aW9uX2NhbXBhaWduX3BhZ2UvQ29sbGVjdGlvbkhpZ2hsaWdodEZhY3RvcnknO1xuXG5pbXBvcnQgUGF0cm9uVGl0bGVTdGF0dXMgZnJvbSAnLi4vLi4vbW9kZWxzL1BhdHJvblRpdGxlU3RhdHVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZWRDb2xsZWN0aW9uVmlldyBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHsgdmlld05hbWUsIHJvb20sIGJ1cywgZmVhdHVyZU1hbmFnZXIsIHBhdHJvblNldHRpbmdzIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuICAgICAgICB0aGlzLnZpZXdOYW1lID0gXy51bmVzY2FwZSh2aWV3TmFtZS5yZXBsYWNlKC8mIzM5Oy9nLCBcIidcIikpO1xuICAgICAgICB0aGlzLnJvb20gPSByb29tO1xuICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICAgICAgdGhpcy5mZWF0dXJlTWFuYWdlciA9IGZlYXR1cmVNYW5hZ2VyO1xuICAgICAgICB0aGlzLnBhdHJvblNldHRpbmdzID0gcGF0cm9uU2V0dGluZ3M7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSAxMDtcblxuICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyID0gbmV3IFBhZ2VNYW5hZ2VyKCk7XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbk1hbmFnZXIgPSBuZXcgQ29sbGVjdGlvbk1hbmFnZXIoKTtcblxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25FcnJvcnMgPSBbXTtcblxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcblxuICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyXG4gICAgICAgICAgICAuZmV0Y2hSb29tQnlJZCgodGhpcy5yb29tICYmIHRoaXMucm9vbS5pZCkgfHwgJ2hvbWUnKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdzID0gdGhpcy5pbml0Vmlld3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVucmVuZGVyZWRWaWV3cyA9IHRoaXMuX3ZpZXdzLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyUGFnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlcmZvcm1Gb3J3YXJkZWRBY3Rpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9yZW5kZXJQYWdlKCkge1xuICAgICAgICB0aGlzLl9mZXRjaFJvd3ModGhpcy5wYWdlU2l6ZSkudGhlbigoY29sbGVjdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBhdHJvblRpdGxlU3RhdHVzKGNvbGxlY3Rpb25zKTtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkQ29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2ZldGNoUm93cyhyb3dDb3VudCwgY29sbGVjdGlvbnNEb25lID0gW10pIHtcbiAgICAgICAgbGV0IHZpZXdzID0gdGhpcy51bnJlbmRlcmVkVmlld3Muc3BsaWNlKDAsIHJvd0NvdW50KTtcbiAgICAgICAgdGhpcy5fcGFpbnRDb2xsZWN0aW9ucyh2aWV3cyk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jUm93cyh2aWV3cywgY29sbGVjdGlvbnNEb25lKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmZhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mZXRjaFJvd3MocmVzdWx0LmZhaWxlZCwgY29sbGVjdGlvbnNEb25lKS50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb2xsZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb2xsZWN0aW9uc0RvbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfc3luY1Jvd3Modmlld3MsIGNvbGxlY3Rpb25zKSB7XG4gICAgICAgIGxldCByZXF1ZXN0UXVldWUgPSB2aWV3cy5tYXAoKHZpZXcpID0+IHZpZXcuc3luYygpKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5zZXR0bGUocmVxdWVzdFF1ZXVlKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWNjZWVkZWQgPSByZXN1bHRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiByZXN1bHQuZnVsZmlsbGVkICYmIHJlc3VsdC52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChyZXN1bHQpID0+ICFyZXN1bHQuZnVsZmlsbGVkIHx8ICFyZXN1bHQudmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHN1Y2NlZWRlZC5tYXAoKHJlcXVlc3QpID0+IGNvbGxlY3Rpb25zLnB1c2gocmVxdWVzdC52YWx1ZSkpO1xuXG4gICAgICAgICAgICByZXR1cm4geyBmYWlsZWQ6IGZhaWxlZC5sZW5ndGggfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3BhaW50Q29sbGVjdGlvbnModmlld3MpIHtcbiAgICAgICAgbGV0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgICAgdmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuICAgICAgICAgICAgaWYgKCF2aWV3LmlzUGFpbnRlZCkge1xuICAgICAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQodmlldy5lbCk7XG4gICAgICAgICAgICAgICAgdmlldy5pc1BhaW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVsLmFwcGVuZENoaWxkKGZyYWcpO1xuICAgIH1cblxuICAgIF9wYWdlTG9hZENvbXBsZXRlKCkge1xuICAgICAgICBpZiAodGhpcy51bnJlbmRlcmVkVmlld3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0ICRsb2FkTW9yZSA9ICQoXG4gICAgICAgICAgICAgICAgYDxidXR0b24gY2xhc3M9XCJjZW50ZXIgdS1hbGxDYXBzIGJ1dHRvbiByYWRpdXMgbm8tb3V0bGluZVwiPiR7aHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2xvYWRNb3JlJ1xuICAgICAgICAgICAgICAgICl9PC9idXR0b24+YFxuICAgICAgICAgICAgKS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyUGFnZSgpO1xuICAgICAgICAgICAgICAgICRsb2FkTW9yZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLiRlbC5hcHBlbmQoJGxvYWRNb3JlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGFsbENvbGxlY3Rpb25zRmFpbGVkID0gdGhpcy5fdmlld3MubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgdGhpcy5fbG9nUGFnZUVycm9ycyh0aGlzLmNvbGxlY3Rpb25FcnJvcnMsIGFsbENvbGxlY3Rpb25zRmFpbGVkKTtcbiAgICAgICAgICAgIGlmIChhbGxDb2xsZWN0aW9uc0ZhaWxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKEVycm9yVGVtcGxhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25FcnJvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9sb2dQYWdlRXJyb3JzKGZhaWxlZCwgYWxsRmFpbGVkKSB7XG4gICAgICAgIGNvbnN0IGhvd01hbnkgPSBhbGxGYWlsZWQgPyAnVG90YWwnIDogJ1BhcnRpYWwnO1xuICAgICAgICBsZXQgZXJyb3JzID0gW107XG4gICAgICAgIGZvciAobGV0IGZhaWx1cmUgb2YgZmFpbGVkKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IGZhaWx1cmUuaWQsXG4gICAgICAgICAgICAgICAgdHlwZTogZmFpbHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IGZhaWx1cmUuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGZhaWx1cmUuc3RhdHVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvdW50cyA9IF8uY291bnRCeShcbiAgICAgICAgICAgIGVycm9ycyxcbiAgICAgICAgICAgIChlcnJvcikgPT4gZXJyb3IudHlwZSArICc6JyArIGVycm9yLnN0YXR1c1RleHRcbiAgICAgICAgKTtcbiAgICAgICAgTG9nZ2VyLmxvZygnZXJyb3InLCBgJHtob3dNYW55fSBGZWF0dXJlZCBQYWdlIEFqYXggRXJyb3JgLCB7XG4gICAgICAgICAgICBtZXNzYWdlOiAnSGlnaGxpZ2h0RXJyb3JSb2xsdXAnLFxuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgICAgICBjb3VudHM6IGNvdW50cyxcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMudmlld05hbWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRWaWV3cygpIHtcbiAgICAgICAgbGV0IHZpZXdzID0gW107XG4gICAgICAgIGxldCBtYWluVmlldyA9IHRoaXMucGFnZU1hbmFnZXIuZ2V0Vmlldyh0aGlzLnZpZXdOYW1lKTtcblxuICAgICAgICBpZiAodGhpcy5fc2hvdWxkVHJ1bmNhdGVDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgbWFpblZpZXcuY29sbGVjdGlvbkRlZmluaXRpb25zID1cbiAgICAgICAgICAgICAgICBtYWluVmlldy5jb2xsZWN0aW9uRGVmaW5pdGlvbnMuc2xpY2UoMCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uTWFuYWdlci5yZXNldChtYWluVmlldy5jb2xsZWN0aW9uRGVmaW5pdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbk1hbmFnZXIuZWFjaCgoY29sbGVjdGlvbkRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIFRpdGxlQ2FyZCB0ZW1wbGF0ZSB3aWxsIHJlbmRlciBpbiBcImR1bW15XCIgc3RhdGVcbiAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uLnRpdGxlQ29sbGVjdGlvbi5yZXNldChbXG4gICAgICAgICAgICAgICAgeyBwbGFjZWhvbGRlcjogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgcGxhY2Vob2xkZXI6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IHBsYWNlaG9sZGVyOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBwbGFjZWhvbGRlcjogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgcGxhY2Vob2xkZXI6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IHBsYWNlaG9sZGVyOiB0cnVlIH0sXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb25IaWdobGlnaHRWaWV3ID0gQ29sbGVjdGlvbkhpZ2hsaWdodEZhY3RvcnkuQnVpbGQoXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbkRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbDogY29sbGVjdGlvbkRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGJ1czogdGhpcy5idXMsXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyOiB0aGlzLmZlYXR1cmVNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICByb29tOiB0aGlzLnJvb20sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdmlld3MucHVzaChjb2xsZWN0aW9uSGlnaGxpZ2h0Vmlldy5yZW5kZXIoKSk7XG5cbiAgICAgICAgICAgIGNvbGxlY3Rpb25IaWdobGlnaHRWaWV3LnN5bmMgPSAoKSA9PlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgICAgIC5mZXRjaENvbGxlY3Rpb25UaXRsZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0cm9uU2V0dGluZ3M6IHRoaXMucGF0cm9uU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICByb29tOiB0aGlzLnJvb20sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uRGVmaW5pdGlvbi50aXRsZUNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25IaWdobGlnaHRWaWV3LnJlbmRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSGlnaGxpZ2h0Vmlldy50b2dnbGVUaXRsZVZpc2liaWxpdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIHRoZSBmYWlsZWQgcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25IaWdobGlnaHRWaWV3LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWV3cyA9IHRoaXMuX3ZpZXdzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2KSA9PiB2ICE9PSBjb2xsZWN0aW9uSGlnaGxpZ2h0Vmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gY29sbGVjdGlvbiBjb250ZW50cyByZXRyaWV2ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25IaWdobGlnaHRWaWV3LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdzID0gdGhpcy5fdmlld3MuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodikgPT4gdiAhPT0gY29sbGVjdGlvbkhpZ2hsaWdodFZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuaWQgPSBjb2xsZWN0aW9uRGVmaW5pdGlvbi5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gISFlcnJvci5zdGF0dXNUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3Iuc3RhdHVzVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdVbmtub3duU3RhdHVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci50eXBlID0gJ0FqYXggRXJyb3I6IENvbGxlY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uRXJyb3JzLnB1c2goZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aWV3cztcbiAgICB9XG5cbiAgICBfdXBkYXRlUGF0cm9uVGl0bGVTdGF0dXModmlld3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgd2luZG93Lk92ZXJEcml2ZS5pc0F1dGhlbnRpY2F0ZWQgJiZcbiAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuaGFzTGlua2VkQ2FyZHMgJiZcbiAgICAgICAgICAgIHZpZXdzICYmXG4gICAgICAgICAgICB2aWV3cy5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IHRpdGxlcyA9IFtdO1xuXG4gICAgICAgICAgICB2aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB7XG4gICAgICAgICAgICAgICAgdGl0bGVzLnB1c2goLi4udmlldy50aXRsZUNvbGxlY3Rpb24ubW9kZWxzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsZXQgcGF0cm9uVGl0bGVTdGF0dXMgPSBuZXcgUGF0cm9uVGl0bGVTdGF0dXMoKTtcblxuICAgICAgICAgICAgcGF0cm9uVGl0bGVTdGF0dXMuZmV0Y2hUaXRsZVN0YXR1cyh0aXRsZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBhdHJvblRpdGxlU3RhdHVzLnVwZGF0ZVRpdGxlQ29sbGVjdGlvblN0YXRlKF8odGl0bGVzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9wZXJmb3JtRm9yd2FyZGVkQWN0aW9uKCkge1xuICAgICAgICBpZiAoaXNBdXRoZW50aWNhdGVkICYmIGhhc0xpbmtlZENhcmRzICYmIEhhc2hNYW5hZ2VyLmdldCgnYWN0aW9uJykpIHtcbiAgICAgICAgICAgIGxldCB0aXRsZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbk1hbmFnZXIuZWFjaCgoY29sbGVjdGlvbkRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICB0aXRsZXMucHVzaCguLi5jb2xsZWN0aW9uRGVmaW5pdGlvbi50aXRsZUNvbGxlY3Rpb24ubW9kZWxzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkQWN0aW9uID0gbmV3IFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24oXG4gICAgICAgICAgICAgICAgbmV3IFRpdGxlQ29sbGVjdGlvbih0aXRsZXMpLFxuICAgICAgICAgICAgICAgIHRoaXMuYnVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yd2FyZGVkQWN0aW9uLmV4ZWN1dGVBY3Rpb24oKTtcbiAgICAgICAgICAgIHdpbmRvdy5mb3J3YXJkZWRBY3Rpb24gPSBmb3J3YXJkZWRBY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgX3Nob3VsZFRydW5jYXRlQ29sbGVjdGlvbnMoKSB7XG4gICAgICAgIC8vIFRoZSBPRCBhcHAgb24gaU9TIDggYW5kIDkgY3Jhc2hlcyBvbiB0aGUgZmVhdHVyZWQgY29sbGVjdGlvbiBwYWdlIGlmIHRoZXJlIGFyZSB0b28gbWFueSBjb2xsZWN0aW9ucy4gIExIVE5HLTIzODdcbiAgICAgICAgbGV0IGluQXBwID0gQ29va2llcy5nZXQoJ29tY2Jyb3dzZScpICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpbkFwcCAmJiBib3dzZXIuaW9zICYmIGJvd3Nlci5vc3ZlcnNpb24pIHtcbiAgICAgICAgICAgIGxldCB2ZXJzaW9uUGFydHMgPSBib3dzZXIub3N2ZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBpZiAodmVyc2lvblBhcnRzICYmIHZlcnNpb25QYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KHZlcnNpb25QYXJ0c1swXSwgMTApO1xuICAgICAgICAgICAgICAgIGlmIChtYWpvclZlcnNpb24gJiYgbWFqb3JWZXJzaW9uIDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgQ29udGV4dE1lbnVUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9Db250ZXh0TWVudS5odG1sJztcbmNvbnN0IHsgZmVhdHVyZU1hbmFnZXIsIHVybCwgcm91dGVzLCBPdmVyRHJpdmUsIHRleHQsIGh0bWwgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dE1lbnUgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICB0ZW1wbGF0ZSA9IENvbnRleHRNZW51VGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLnJpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6aXNJbkhpc3RvcnknLCAoKSA9PiB0aGlzLnJlbmRlcigpKTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGV2ZW50cygpIHtcbiAgICAgICAgbGV0IGV2ZW50cyA9IHtcbiAgICAgICAgICAgICdjbGljayAuanMtaGlzdG9yeUFjdGlvbic6ICdfaGFuZGxlQ2xpY2snLFxuICAgICAgICAgICAgJ2tleWRvd24gLmpzLWhpc3RvcnlBY3Rpb24nOiAnX2hhbmRsZUtleUhpc3RvcnknLFxuICAgICAgICAgICAgJ2tleWRvd24gLmpzLWNvbnRleHQtYnV0dG9uJzogJ3RvZ2dsZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY2xlYW51cENvbnRleHRNZW51VG9nZ2xlJykpIHtcbiAgICAgICAgICAgIGV2ZW50c1sna2V5dXAgLmpzLWNvbnRleHQtZHJvcCddID0gJ19oYW5kbGVLZXlVcENvbnRhaW5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICB9XG5cbiAgICBfaGFuZGxlS2V5VXBDb250YWluZXIoZSkge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNyAvKkVTQyovKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlQ2xpY2soKSB7XG4gICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywge1xuICAgICAgICAgICAgYWN0aW9uOiAnaGlzdG9yeScsXG4gICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUtleUhpc3RvcnkoZSkge1xuICAgICAgICBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NsZWFudXBDb250ZXh0TWVudVRvZ2dsZScpKSB7XG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgfHwgZS5rZXlDb2RlID09PSAzMikge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NsZWFudXBDb250ZXh0TWVudVRvZ2dsZScpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdmlld01vZGVsKCkge1xuICAgICAgICBsZXQgc2VyaWVzU2VhcmNoVXJsID0gJyc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pc01hZ2F6aW5lICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdtYWdhemluZS1yb2xsdXAnKVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2VuaGFuY2VkU2VyaWVzJykgJiZcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgnZGV0YWlsZWRTZXJpZXMnKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2VyaWVzU2VhcmNoVXJsID0gdXJsKHJvdXRlcy5zZWFyY2hCeVR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nlcmllc0lkJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpLnNlcmllc0lkLFxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICdyZWFkaW5nT3JkZXInLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGVsLmdldCgnc2VyaWVzJykpIHtcbiAgICAgICAgICAgICAgICBzZXJpZXNTZWFyY2hVcmwgPSB1cmwocm91dGVzLnNlYXJjaEJ5VHlwZSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VyaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5OiAnbmV3bHlhZGRlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGFzTWVkaWFEb0Zvcm1hdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1vZGVsLmdldCgnZm9ybWF0cycpLmZvckVhY2goKGZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1hdC5pZCA9PT0gJ2Vib29rLW1lZGlhLWRvJykge1xuICAgICAgICAgICAgICAgIGhhc01lZGlhRG9Gb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgbWF0dXJpdHlMZXZlbCA9IHRoaXMubW9kZWwuYXR0cmlidXRlcy5yYXRpbmdzLm1hdHVyaXR5TGV2ZWwuaWQ7XG5cbiAgICAgICAgY29uc3QgcmVsYXRlZFRpdGxlc1BhZ2VVcmwgPSBgJHt3aW5kb3cudXJsKFxuICAgICAgICAgICAgd2luZG93LnJvdXRlcy5tZWRpYVJlbGF0ZWRJZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5nZXQoJ2lkJyksXG4gICAgICAgICAgICB9XG4gICAgICAgICl9JHttYXR1cml0eUxldmVsID8gYD9tYXR1cml0eUxldmVsPSR7bWF0dXJpdHlMZXZlbH1gIDogJyd9YDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNPd25lZDogdGhpcy5tb2RlbC5nZXQoJ2lzT3duZWQnKSxcbiAgICAgICAgICAgIHJlbGF0ZWRUaXRsZXNQYWdlVXJsLFxuICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICByaWQ6IHRoaXMucmlkLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpLFxuICAgICAgICAgICAgdHlwZUlkOiB0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkLFxuICAgICAgICAgICAgc2FtcGxlSHJlZjogdGhpcy5tb2RlbC5nZXQoJ3NhbXBsZScpLmhyZWYgfHwgJycsXG4gICAgICAgICAgICBzYW1wbGVUZXh0OiB0aGlzLl9nZXRTYW1wbGVUZXh0KCksXG4gICAgICAgICAgICBhbGlnbm1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgICAgaGlzdG9yeUFjdGlvbkxhYmVsOiB0aGlzLl9nZXRIaXN0b3J5QWN0aW9uTGFiZWwoKSxcbiAgICAgICAgICAgIGhpc3RvcnlBY3Rpb25UZXh0OiB0aGlzLl9nZXRIaXN0b3J5QWN0aW9uVGV4dCgpLFxuICAgICAgICAgICAgaGlzdG9yeUVuYWJsZWQ6XG4gICAgICAgICAgICAgICAgT3ZlckRyaXZlLnNob3dIaXN0b3J5RmVhdHVyZSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSxcbiAgICAgICAgICAgIGdhSGlzdG9yeUFjdGlvbjogdGhpcy5tb2RlbC5nZXQoJ2lzSW5IaXN0b3J5JylcbiAgICAgICAgICAgICAgICA/ICdoaXN0b3J5LXJlbW92ZSdcbiAgICAgICAgICAgICAgICA6ICdoaXN0b3J5LWFkZCcsXG4gICAgICAgICAgICBzZXJpZXNTZWFyY2hVcmwsXG4gICAgICAgICAgICBoYXNNZWRpYURvRm9ybWF0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9nZXRTYW1wbGVUZXh0KCkge1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5pZDtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvYm9vaycgfHwgdHlwZSA9PT0gJ211c2ljJykge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQoJ3NhbXBsZUxpc3RlbicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0KCdzYW1wbGVXYXRjaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQoJ3NhbXBsZVJlYWQnKTtcbiAgICB9XG5cbiAgICBfZ2V0SGlzdG9yeUFjdGlvbkxhYmVsKCkge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpO1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ2lzSW5IaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5yZW1vdmVUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbCgncmVhZGluZ0hpc3RvcnkuYWRkVGl0bGUnLCB7IHRpdGxlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldEhpc3RvcnlBY3Rpb25UZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ2lzSW5IaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5yZW1vdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5hZGQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQodGhpcy50ZW1wbGF0ZSh0aGlzLnZpZXdNb2RlbCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzS2V5Ym9hcmRTZWxlY3RFdmVudCA9IChlKSA9PlxuICAgICAgICAoZS53aGljaCA9PT0gMTMgfHwgZS53aGljaCA9PT0gMzIpICYmIChlLnByZXZlbnREZWZhdWx0KCkgfHwgdHJ1ZSk7XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgd2luZG93LkZvdW5kYXRpb24ubGlicy5kcm9wZG93bi5jbG9zZShcbiAgICAgICAgICAgIHRoaXMuJGVsLmZpbmQoJy5qcy1jb250ZXh0LWRyb3AnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHRvZ2dsZShlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzS2V5Ym9hcmRTZWxlY3RFdmVudChlKSkge1xuICAgICAgICAgICAgd2luZG93LkZvdW5kYXRpb24ubGlicy5kcm9wZG93bi50b2dnbGUoXG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmpzLWNvbnRleHQtYnV0dG9uJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgQ292ZXJUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9Db3Zlci5odG1sJztcbmltcG9ydCBOb0NvdmVyVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvTm9Db3Zlci5odG1sJztcbmltcG9ydCB7IHRvU3RhdGljVXJsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbGliL2Fzc2V0TWFwcGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ292ZXIgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7IGNvdmVyV2lkdGhzLCBpc0luSGVybywgaXNUaXRsZUhpc3RvcnkgPSBmYWxzZSB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5jb3ZlcldpZHRocyA9IF8uZXh0ZW5kKFxuICAgICAgICAgICAgeyBtb2JpbGU6IDE0NSwgdGFibGV0OiAxNjAsIGRlc2t0b3A6IDE5MCB9LFxuICAgICAgICAgICAgY292ZXJXaWR0aHNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc0luSGVybyA9IGlzSW5IZXJvO1xuICAgICAgICB0aGlzLmlzVGl0bGVIaXN0b3J5ID0gaXNUaXRsZUhpc3Rvcnk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlJywgdGhpcy5fcmVuZGVyKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICAkKHdpbmRvdykub2ZmKGByZXNpemUuJHt0aGlzLm1vZGVsLmlkfWApO1xuICAgIH1cblxuICAgIF9yZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhID0gdGhpcy5tb2RlbC50b0pTT04oKTtcbiAgICAgICAgY29uc3QgY292ZXJXaWR0aCA9IGJvd3Nlci5tb2JpbGVcbiAgICAgICAgICAgID8gdGhpcy5jb3ZlcldpZHRocy5tb2JpbGVcbiAgICAgICAgICAgIDogYm93c2VyLnRhYmxldFxuICAgICAgICAgICAgPyB0aGlzLmNvdmVyV2lkdGhzLnRhYmxldFxuICAgICAgICAgICAgOiB0aGlzLmNvdmVyV2lkdGhzLmRlc2t0b3A7XG4gICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy5tb2RlbC5nZXRDb3Zlcihjb3ZlcldpZHRoKTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBsZXQgJGNvdmVyID0gYDxkaXYgY2xhc3M9XCJDb3ZlckltYWdlQ29udGFpbmVyXCI+PC9kaXY+YDtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKCRjb3Zlcik7XG4gICAgICAgIH0gZWxzZSBpZiAoY292ZXIgJiYgY292ZXIuaHJlZikge1xuICAgICAgICAgICAgbGV0ICRjb3ZlciA9ICQoXG4gICAgICAgICAgICAgICAgQ292ZXJUZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhLFxuICAgICAgICAgICAgICAgICAgICBjb3ZlckNvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvdmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIucHJpbWFyeUNvbG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY292ZXIucHJpbWFyeUNvbG9yLmhleCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbmhlcml0JyxcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBjb3ZlciAmJiBjb3Zlci5ocmVmLFxuICAgICAgICAgICAgICAgICAgICBocmVmOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHdpbmRvdy50ZXh0KCdjb3Zlci5jb3ZlckltYWdlTGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbWVkaWEudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBtZWRpYS5maXJzdENyZWF0b3JOYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbm9TYW1wbGVDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLnNhbXBsZS5ocmVmID09IG51bGwgPyAnaXMtbm9TYW1wbGUnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHNyY3NldDogY292ZXIgJiYgY292ZXIuc3Jjc2V0LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMSFRORy0yMTA1OiBJbiB0aGUgZXZlbnQgdGhhdCBhbiBpbWFnZSBmYWlscyB0byBsb2FkLCB3aXBlIG91dCB0aGUgaHJlZidzIGFuZCB1cGRhdGUgdGhlIG1vZGVsIHRvIHRyaWdnZXIgYSByZW5kZXIoKVxuICAgICAgICAgICAgJGNvdmVyLmZpbmQoJ2ltZycpLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzUmVtb3ZlZCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwuYXR0cmlidXRlcy5jb3ZlcnMpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIF8oaW1hZ2VzUmVtb3ZlZCkuZWFjaCgoaW1hZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGltYWdlLmhyZWY7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNldCh7IGNvdmVyczogaW1hZ2VzUmVtb3ZlZCB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCgkY292ZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNUaXRsZUhpc3RvcnkpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKFxuICAgICAgICAgICAgICAgIGA8YSBocmVmPVwiJHt0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCIke3dpbmRvdy5odG1sKCdjb3ZlckltYWdlRm9yVGl0bGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbWVkaWEudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVwiIGNsYXNzPVwiaGlzdG9yeS1ub0NvdmVyXCIgc3JjPVwiJHt0b1N0YXRpY1VybChcbiAgICAgICAgICAgICAgICAgICAgJ2ltZy9uby1jb3Zlcl9lbl9VUy5qcGcnXG4gICAgICAgICAgICAgICAgKX1cIj5cbiAgICAgICAgICAgICAgICA8L2E+YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjcmVhdG9yVGV4dCA9IHRoaXMubW9kZWwuaXNNYWdhemluZVxuICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5nZXQoJ2VkaXRpb24nKVxuICAgICAgICAgICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ2ZpcnN0Q3JlYXRvck5hbWUnKTtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKFxuICAgICAgICAgICAgICAgIE5vQ292ZXJUZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhLFxuICAgICAgICAgICAgICAgICAgICBocmVmOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgICAgICAgICAgaXNJbkhlcm86IHRoaXMuaXNJbkhlcm8sXG4gICAgICAgICAgICAgICAgICAgIGNvdmVyV2lkdGg6IGNvdmVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGNvdmVySGVpZ2h0OiAoY292ZXJXaWR0aCAqIDI5MykgLyAyMjAsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0b3JUZXh0OiBjcmVhdG9yVGV4dCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihcbiAgICAgICAgICAgICAgICBgcmVzaXplLiR7dGhpcy5tb2RlbC5pZH1gLFxuICAgICAgICAgICAgICAgIF8uYmluZChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlT3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICcuQ292ZXJJbWFnZUNvbnRhaW5lciAubm9Db3ZlckF2YWlsYWJsZSAudGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgndGl0bGUnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oXG4gICAgICAgICAgICAgICAgYHJlc2l6ZS4ke3RoaXMubW9kZWwuaWR9YCxcbiAgICAgICAgICAgICAgICBfLmJpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZU92ZXJmbG93LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAnLkNvdmVySW1hZ2VDb250YWluZXIgLm5vQ292ZXJBdmFpbGFibGUgLmF1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0b3JUZXh0XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihcbiAgICAgICAgICAgICAgICBgcmVzaXplLiR7dGhpcy5tb2RlbC5pZH1gLFxuICAgICAgICAgICAgICAgIF8uYmluZCh0aGlzLl9yZXNpemVDbGVhckltYWdlLCB0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gdGltZW91dCBnaXZlcyBicm93c2VyIGNoYW5jZSB0byBkcmF3IGFuZCBzZXQgaW5uZXJIVE1MIHZhbHVlcyB1c2VkXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VPdmVyZmxvdyhcbiAgICAgICAgICAgICAgICAgICAgJy5Db3ZlckltYWdlQ29udGFpbmVyIC5ub0NvdmVyQXZhaWxhYmxlIC50aXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VPdmVyZmxvdyhcbiAgICAgICAgICAgICAgICAgICAgJy5Db3ZlckltYWdlQ29udGFpbmVyIC5ub0NvdmVyQXZhaWxhYmxlIC5hdXRob3InLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdG9yVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplQ2xlYXJJbWFnZSgpO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfcmVzaXplQ2xlYXJJbWFnZSgpIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICQoaW1hZ2UpLmhlaWdodCgoJChpbWFnZSkucGFyZW50KCkud2lkdGgoKSAqIDI5MykgLyAyMjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9tYW5hZ2VPdmVyZmxvdyhzZWxlY3RvciwgcmVzZXRUZXh0KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSByZXNldFRleHQ7XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3IuaW5kZXhPZignLnRpdGxlJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA8IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE0cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxMjUgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDEwMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE2cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxNTAgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDEyNVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE4cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA+PSAxNTApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcyMHB4Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pbmRleE9mKCcuYXV0aG9yJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA8IDExMCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzEwcHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxMzUgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDExMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzEycHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPCAxNjAgJiZcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpID49IDEzNVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE0cHgnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQoZWxlbWVudCkud2lkdGgoKSA+PSAxNjApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxNnB4Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCAmJlxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gZWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGAke3RleHQucmVwbGFjZSgvXFxXKyQvZywgJycpfS4uLmA7IC8vIHJlbW92ZSB0cmFpbGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIGFkZCBlbGxpcHNpc1xuICAgICAgICAgICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICAgICAgICAgdGV4dCAhPT0gJy4uLicgJiZcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFcqXFx3XFxXKihcXC57M30pJC9nLCAnJDEnKTsgLy8gcmVtb3ZlIGEgbm9uLWVsbGlwc2lzIGNoYXJhY3RlciBhbmQgdW53YW50ZWQgY2hhcmFjdGVycyBhcm91bmQgaXTOqVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHRvZG86IHB1dCBhIG1pbiB3aWR0aCBhbiBoZWlnaHQgb24gdGhpcyEgV2Uga25vdyB3aGF0IHRoZSBoZWlnaHRzIGFyZSBmb3IgcGFydGljdWxhciBzY3JlZW4gd2lkdGhzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgTWVkaWFQYXJhbWV0ZXJzIGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9kYW8vTWVkaWFQYXJhbWV0ZXJzJztcbmltcG9ydCBUaXRsZUNvbGxlY3Rpb24gZnJvbSAnLi9tb2RlbHMvVGl0bGVDb2xsZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWFJbnRlcmZhY2Uge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIF8uZXh0ZW5kKHRoaXMsIEJhY2tib25lLkV2ZW50cyk7XG5cbiAgICAgICAgdGhpcy5pdGVtcyAgICAgICAgICA9IG5ldyBUaXRsZUNvbGxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5mYWNldHMgICAgICAgICA9IHt9O1xuICAgICAgICB0aGlzLnNvcnRPcHRpb25zICAgID0gW107XG4gICAgfVxuXG4gICAgcXVpY2tTZWFyY2godGVybSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2goXy5leHRlbmQoe30sIHsgcXVlcnk6IHRlcm0gfSwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHNlYXJjaChwYXJhbWV0ZXJzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaChfLmV4dGVuZCh7fSwgcGFyYW1ldGVycywgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvbkJ5SWQoaWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoKF8uZXh0ZW5kKHt9LCB7IGNvbGxlY3Rpb25JZDogaWQgfSwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvbkJ5UGFyYW1ldGVycyhjb2xsZWN0aW9uRmlsdGVycywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2goXy5leHRlbmQoe30sIGNvbGxlY3Rpb25GaWx0ZXJzLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgLyoqIFV0aWxpdHkgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYSBkYXRhIGNhbGwsIGJ1dCBkZWxpYmVyYXRsZXkgcmV0dXJuIGFuIGVtcHR5IHJlc3VsdCBzZXQgKi9cbiAgICBmZXRjaEVtcHR5UmVzcG9uc2UoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzpzdGFydCcsIHRoaXMsIHsgbWVkaWFQYXJhbWV0ZXJzOiBudWxsIH0pO1xuXG4gICAgICAgIGxldCBlbXB0eVJlc3BvbnNlID0ge1xuICAgICAgICAgICAgaXRlbXMgICAgICAgOiBbXSxcbiAgICAgICAgICAgIGZhY2V0cyAgICAgIDoge30sXG4gICAgICAgICAgICBzb3J0T3B0aW9ucyA6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZmV0Y2hEb25lKGVtcHR5UmVzcG9uc2UsICdzeW50aGV0aWMnKTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6ZW5kJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbXB0eVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge01lZGlhUGFyYW1ldGVyc30gcGFyYW1ldGVyc1xuICAgICAqIEBtZW1iZXJvZiBNZWRpYUludGVyZmFjZVxuICAgICAqL1xuICAgIF9mZXRjaChwYXJhbWV0ZXJzKSB7XG5cbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGEgdGl0bGUgaWQgaXMgc3BlY2lmaWNlZCB0aGVuIG5vIGZhY2V0cyB3aWxsIGJlIGNhbGN1bGF0ZWQgcmVnYXJkbGVzcyBvZiB0aGUgcGFyYW1zIHNlbnQuXG4gICAgICAgIGlmICghcGFyYW1ldGVycy5pbmNsdWRlZEZhY2V0cyAmJiAhcGFyYW1ldGVycy50aXRsZUlkKXtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuaW5jbHVkZWRGYWNldHMgPSB3aW5kb3cuT3ZlckRyaXZlLnN1cHBvcnRlZEZhY2V0cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmIHBhcmFtZXRlcnMuc2h1ZmZsZSl7XG4gICAgICAgICAgICBjb25zdCBzb3J0cyA9IFsnbW9zdHBvcHVsYXInLCAncmVsZWFzZWRhdGUnLCAndGl0bGUnLCAnYXV0aG9yJywgJ25ld2x5YWRkZWQnLCAnbG93Y2lyY3VsYXRpbmcnLCAnbW9zdHBvcHVsYXItc2l0ZSddO1xuICAgICAgICAgICAgcGFyYW1ldGVycy5zb3J0QnkgPSBzb3J0c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzb3J0cy5sZW5ndGgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYVBhcmFtZXRlcnMgPSBuZXcgTWVkaWFQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGlmICghIXdpbmRvdy5PdmVyRHJpdmUuc2hvd09ubHlBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIG1lZGlhUGFyYW1ldGVycy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6c3RhcnQnLCB0aGlzLCB7IG1lZGlhUGFyYW1ldGVycyB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5yZXN0Lm1lZGlhLmluZGV4KSxcbiAgICAgICAgICAgICAgICBtZXRob2QgIDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JyxcbiAgICAgICAgICAgICAgICBkYXRhICAgIDogSlNPTi5zdHJpbmdpZnkobWVkaWFQYXJhbWV0ZXJzLnNlcmlhbGl6ZSgpKSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMDAwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kb25lKChkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmIHBhcmFtZXRlcnMuc2h1ZmZsZSl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuaXRlbXMgPSBkYXRhLml0ZW1zICYmIF8uc2h1ZmZsZShkYXRhLml0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ29ubHktc2hvdy1vd25lZC1jb250ZW50JykgJiYgZGF0YS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLml0ZW1zID0gZGF0YS5pdGVtcy5maWx0ZXIoKHgpID0+IHguaXNPd25lZCA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZldGNoRG9uZShkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUik7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOmVuZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZldGNoRmFpbChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignc3luYzplbmQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZWplY3QoanFYSFIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9mZXRjaERvbmUoZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5yZXNldChkYXRhLml0ZW1zKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOnN1Y2Nlc3MnLCB0aGlzLCB7IGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSIH0pO1xuICAgIH1cblxuICAgIF9mZXRjaEZhaWwoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzpmYWlsJywgdGhpcywgeyBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gfSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVBY3Rpb25CdXR0b24gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7IHR5cGUgPSAnbGluaycsIGFjdGlvbiwgc3R5bGUgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgICAgICAgdGhpcy5oYXNDdXN0b21BY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKCEhYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgICAgIHRoaXMuaGFzQ3VzdG9tQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcblxuICAgICAgICB0aGlzLiRidXR0b24gPSAkKCc8YSAvPicpO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTp0aXRsZVN0YXRlJywgdGhpcy5yZW5kZXIpO1xuXG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKHRoaXMuJGJ1dHRvbik7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQnV0dG9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnYnV0dG9uJztcbiAgICB9XG5cbiAgICBnZXQgaXNMaW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbGluayc7XG4gICAgfVxuXG4gICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuJGJ1dHRvbi5vZmYoKTtcbiAgICAgICAgdGhpcy4kZWwub2ZmKCk7XG5cbiAgICAgICAgY29uc3QgYnV0dG9uUHJvcHMgPSB0aGlzLmdldEJ1dHRvblByb3BzKCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBidXR0b25Qcm9wcy5hdHRyaWJ1dGVzO1xuICAgICAgICBpZiAoXyhhdHRyaWJ1dGVzLmhyZWYpLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnJvbGUgPSAnbGluayc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRidXR0b24uYXR0cihhdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy4kYnV0dG9uLmh0bWwoYnV0dG9uUHJvcHMuaHRtbCk7XG5cbiAgICAgICAgLy8gQXR0YWNoIGV2ZW50IGhhbmRsZXJzIGlmIGVpdGhlciBpcyB0cnVlXG4gICAgICAgIC8vIC0gQnV0dG9uIGlzIG5vdCBhIGxpbmtcbiAgICAgICAgLy8gLSBDdXN0b20gYWN0aW9uIGhhcyBiZWVuIHByb3ZpZGVkXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLnJvbGUgIT09ICdsaW5rJyB8fCB0aGlzLmhhc0N1c3RvbUFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fYXR0YWNoRXZlbnRIYW5kbGVycyh0aGlzLiRidXR0b24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2FpdGluZyhpc1dhaXRpbmcgPSB0cnVlKSB7XG4gICAgICAgIGlmIChpc1dhaXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuJGJ1dHRvblxuICAgICAgICAgICAgICAgIC5vZmYoJy50aXRsZUFjdGlvbkJ1dHRvbicpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCd3YWl0aW5nJylcbiAgICAgICAgICAgICAgICAuYXR0cignZGlzYWJsZWQnLCBpc1dhaXRpbmcpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCgnPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJGJ1dHRvblxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnd2FpdGluZycpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2Rpc2FibGVkJywgaXNXYWl0aW5nKVxuICAgICAgICAgICAgICAgIC5maW5kKCcuc3Bpbm5lcicpXG4gICAgICAgICAgICAgICAgLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICB0aGlzLl9hdHRhY2hFdmVudEhhbmRsZXJzKHRoaXMuJGJ1dHRvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc1NlbGVjdEV2ZW50ID0gKGUpID0+XG4gICAgICAgIChlLnR5cGUgPT09ICdjbGljaycgfHwgZS53aGljaCA9PT0gMTMgfHwgZS53aGljaCA9PT0gMzIpICYmXG4gICAgICAgIChlLnByZXZlbnREZWZhdWx0KCkgfHwgdHJ1ZSk7XG5cbiAgICBfYXR0YWNoRXZlbnRIYW5kbGVycygkZWwpIHtcbiAgICAgICAgJGVsLm9mZignLnRpdGxlQWN0aW9uQnV0dG9uJyk7XG5cbiAgICAgICAgJGVsLm9uKCdjbGljay50aXRsZUFjdGlvbkJ1dHRvbicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0RXZlbnQoZSkgJiYgdGhpcy5hY3Rpb24oZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAkZWwub24oJ2tleWRvd24udGl0bGVBY3Rpb25CdXR0b24nLCAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEV2ZW50KGUpICYmIHRoaXMuYWN0aW9uKGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdEV2ZW50KGV2ZW50KSAmJiB0aGlzLl90cmlnZ2VyVGl0bGVBY3Rpb24oKTtcbiAgICB9XG5cbiAgICBfdHJpZ2dlclRpdGxlQWN0aW9uKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ3RpdGxlOmFjdGlvbicsIHtcbiAgICAgICAgICAgIGFjdGlvbjogdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfZ2V0Qm9ycm93QnV0dG9uVGV4dCgpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkID09PSAnYXVkaW9ib29rJ1xuICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2xpc3RlbicpXG4gICAgICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgncmVhZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aW5kb3cuaHRtbCgnYm9ycm93Jyk7XG4gICAgfVxuXG4gICAgX2dldEJvcnJvd0J1dHRvbkFyaWFMYWJlbCh0aXRsZSkge1xuICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGUuaWQgPT09ICdhdWRpb2Jvb2snXG4gICAgICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnbGlzdGVuVG9UaXRsZScsIHsgdGl0bGUgfSlcbiAgICAgICAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZWFkVGl0bGUnLCB7IHRpdGxlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aW5kb3cuaHRtbCgnYm9ycm93VGl0bGUnLCB7IHRpdGxlIH0pO1xuICAgIH1cblxuICAgIGdldEJ1dHRvblByb3BzKCkge1xuICAgICAgICBsZXQgYnV0dG9uQXR0cnMgPSB7XG4gICAgICAgICAgICAnZGF0YS1tZWRpYS1pZCc6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAnZGF0YS10eXBlJzogdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGUuaWQsXG4gICAgICAgICAgICAnZGF0YS10eXBlLW5hbWUnOlxuICAgICAgICAgICAgICAgICh0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCAmJlxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaHRtbCh0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCkpIHx8XG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICB0YWJpbmRleDogMCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGh0bWwgPSAodGhpcy4kYnV0dG9uLmh0bWwgJiYgdGhpcy4kYnV0dG9uLmh0bWwoKSkgfHwgJyc7XG5cbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnRpdGxlO1xuXG4gICAgICAgIGxldCBjbGFzc2VzID0gWydUaXRsZUFjdGlvbkJ1dHRvbicsICd1LWFsbENhcHMnXTtcblxuICAgICAgICBpZiAodGhpcy5pc0J1dHRvbikge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLlsnYnV0dG9uJywgJ3JhZGl1cycsICdpcy1idXR0b24nLCAnc2Vjb25kYXJ5J10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgPT09ICdmaWxsJykge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdmaWxsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3VuYXZhaWxhYmxlJzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXVuYXZhaWxhYmxlIGpzLXVuYXZhaWxhYmxlIGRpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3Zpc2libGUtdW5hdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlVbmF2YWlsYWJsZScpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9vayc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1ub29rIGpzLW5vb2snKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ3NlbmRUb05vb2snKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ByZXZpZXcnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGluaykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NlY29uZGFyeS1jb2xvcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcHJldmlldyBqcy1wcmV2aWV3IHNlY29uZGFyeScpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnZGVtb01vZGUucHJldmlldycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzWydhcmlhLWxhYmVsJ10gPSB3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2RlbW9Nb2RlLnByZXZpZXdUaXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGUgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3Jyb3cnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGluaykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NlY29uZGFyeS1jb2xvcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtYm9ycm93IGpzLWJvcnJvdyBzZWNvbmRhcnknKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7dGhpcy5fZ2V0Qm9ycm93QnV0dG9uVGV4dCgpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzWydhcmlhLWxhYmVsJ10gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRCb3Jyb3dCdXR0b25BcmlhTGFiZWwodGl0bGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9ycm93ZWQnOlxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1vcGVuQm9vayBiaWcnKTtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdvcGVuQm9vaycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhRG93bmxvYWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLmZvcm1hdHNbMF0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uQXR0cnNbJ2FyaWEtbGFiZWwnXSA9IHdpbmRvdy5odG1sKCdvcGVuQm9va0xhYmVsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVOYW1lOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy5yZWwgPSAnbm9yZWZlcnJlcic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1ib3Jyb3dlZCBqcy1ib3Jyb3dlZCcpO1xuICAgICAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ2dvVG9Mb2FucycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLmFjY291bnRMb2Fucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9sZCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2Vjb25kYXJ5LWNvbG9yLWhvdmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1ob2xkIGpzLWhvbGQnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ3BsYWNlQUhvbGQnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRyc1snYXJpYS1sYWJlbCddID0gd2luZG93Lmh0bWwoJ3BsYWNlQUhvbGRPblRpdGxlJywge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29uSG9sZCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdwcmltYXJ5Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1vbkhvbGQganMtb25Ib2xkJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdnb1RvSG9sZHMnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLmFjY291bnRIb2xkcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZW5ldyc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1yZW5ldyByZW5ld2FsQnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKChjKSA9PiBjICE9PSAndS1hbGxDYXBzJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj48aSBjbGFzcz1cImljb24gaWNvbi1yZW5ld1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ke3dpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAncmVuZXdhbC5yZW5ld1RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgeyB0aXRsZTogJycgfVxuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXF1ZXN0QWdhaW4nOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcmVxdWVzdEFnYWluIHJlbmV3YWxCdXR0b24nKTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoKGMpID0+IGMgIT09ICd1LWFsbENhcHMnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPjxpIGNsYXNzPVwiaWNvbiBpY29uLXJlbmV3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiR7d2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICdhY2NvdW50TG9hbnMucmVxdWVzdEFnYWluJ1xuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXF1ZXN0ZWQnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcmVxdWVzdGVkIHJlbmV3YWxCdXR0b24nKTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoKGMpID0+IGMgIT09ICd1LWFsbENhcHMnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPjxpIGNsYXNzPVwiaWNvbiBpY29uLXJlbmV3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiR7d2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICdhY2NvdW50TG9hbnMucmVxdWVzdGVkJ1xuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZW5ld2VkJzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXJlbmV3ZWQgcmVuZXdhbEJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcigoYykgPT4gYyAhPT0gJ3UtYWxsQ2FwcycpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+PGkgY2xhc3M9XCJpY29uIGljb24tcmVuZXdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+JHt3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2FjY291bnRMb2Fucy5yZW5ld2VkJ1xuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsaXN0ZW5Ob3cnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtbGlzdGVuTm93Jyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdsaXN0ZW5Ob3cnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhRG93bmxvYWQsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnYXVkaW9ib29rLW92ZXJkcml2ZScsXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMucmVsID0gJ25vcmVmZXJyZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVhZE5vdyc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1yZWFkTm93Jyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdyZWFkTm93Jyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYURvd25sb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2Vib29rLW92ZXJkcml2ZScsXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMucmVsID0gJ25vcmVmZXJyZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWRkVG9BcHAnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGluaykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NlY29uZGFyeS1jb2xvci1ob3ZlcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtYWRkVG9BcHAnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ2FkZFRvQXBwJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYURvd25sb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGhpcy5tb2RlbC5nZXQoJ2FkZFRvQXBwRm9ybWF0JyksXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3YWl0aW5nJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvdFNwaW5uZXIgPSAkKHdpbmRvdy5wcmltYXJ5QWN0aW9uTG9hZGluZ0dpZik7XG4gICAgICAgICAgICAgICAgICAgIGRvdFNwaW5uZXIuY3NzKCd3aWR0aCcsICdpbmhlcml0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBkb3RTcGlubmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3dhaXRpbmcgc2Vjb25kYXJ5Jyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGh0bWwgPSAnPHNwYW4+d29ya2luZzwvc3Bhbj48ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBidXR0b25BdHRycy5jbGFzcyA9IGNsYXNzZXMuam9pbignICcpO1xuXG4gICAgICAgIHJldHVybiB7IGF0dHJpYnV0ZXM6IGJ1dHRvbkF0dHJzLCBodG1sIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IFRpdGxlQ2FyZFRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGVzL1RpdGxlQ2FyZC5odG1sJztcblxuaW1wb3J0IFRpdGxlSW5mbyBmcm9tICcuL3ZpZXdzL1RpdGxlSW5mbyc7XG5pbXBvcnQgVGl0bGVBY3Rpb25CdXR0b24gZnJvbSAnLi9UaXRsZUFjdGlvbkJ1dHRvbic7XG5pbXBvcnQgV2lzaExpc3RCdXR0b24gZnJvbSAnLi9XaXNoTGlzdEJ1dHRvbic7XG5pbXBvcnQgVGl0bGVIZWFkZXJCYXIgZnJvbSAnLi9UaXRsZUhlYWRlckJhcic7XG5pbXBvcnQgQ292ZXIgZnJvbSAnLi9Db3Zlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQ2FyZCBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAndGl0bGUtY29udGFpbmVyIHRpdGxlJztcbiAgICB9XG5cbiAgICB0ZW1wbGF0ZSA9IFRpdGxlQ2FyZFRlbXBsYXRlO1xuXG4gICAgY29uc3RydWN0b3IoeyBjb3ZlcldpZHRocywgaXNJbkhlcm8gPSBmYWxzZSB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5jb3ZlcldpZHRocyA9IGNvdmVyV2lkdGhzO1xuICAgICAgICB0aGlzLmlzSW5IZXJvID0gaXNJbkhlcm87XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgbW9kZWwsIGNvdmVyV2lkdGhzLCBpc0luSGVybyB9ID0gdGhpcztcblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuXG4gICAgICAgIGNvbnN0ICR0bXAgPSAkKFxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgZ2VvSWRjQ2xhc3M6IHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKVxuICAgICAgICAgICAgICAgICAgICA/ICdnZW9JZGMnXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBub3Qgd29yayAgd2l0aCBDU1MgdHJhbnNpdGlvbiBhbmltYXRpb25zXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLmFkZENsYXNzKCdwbGFjZWhvbGRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMudGl0bGVIZWFkZXJCYXIgPSBuZXcgVGl0bGVIZWFkZXJCYXIoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLlRpdGxlSGVhZGVyQmFyJyksXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLmNvdmVyID0gbmV3IENvdmVyKHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBlbDogJHRtcC5maW5kKCcuQ292ZXJJbWFnZScpLFxuICAgICAgICAgICAgICAgIGNvdmVyV2lkdGhzLFxuICAgICAgICAgICAgICAgIGlzSW5IZXJvLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlSW5mbyA9IG5ldyBUaXRsZUluZm8oe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZUluZm8nKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZUFjdGlvbkJ1dHRvbiA9IG5ldyBUaXRsZUFjdGlvbkJ1dHRvbih7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLlRpdGxlQWN0aW9uJyksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc2FtcGxlT25seU1vZGUnKSAmJlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdtYWdhemluZS1yb2xsdXAnKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaXNNYWdhemluZVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2Rpc2FibGVXaXNobGlzdCcpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy53aXNobGlzdEJ1dHRvbiA9IG5ldyBXaXNoTGlzdEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBlbDogJHRtcC5maW5kKCcuVGl0bGVXaXNobGlzdCcpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaWNvbi1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KS5yZW5kZXIoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlbC5hcHBlbmQoJHRtcCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24gZnJvbSAnLi4vLi4vdXRpbC90aXRsZS1hY3Rpb25zL3Byb2Nlc3NGb3J3YXJkZWRBY3Rpb24nO1xuaW1wb3J0IEhhc2hNYW5hZ2VyIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29tbW9uL0hhc2hNYW5hZ2VyJztcblxuaW1wb3J0IFRpdGxlQ2FyZCBmcm9tICcuL1RpdGxlQ2FyZCc7XG5pbXBvcnQgVGl0bGVBY3Rpb25zIGZyb20gJy4uLy4uL3RpdGxlLWFjdGlvbnMvVGl0bGVBY3Rpb25zJztcbmNvbnN0IGhlID0gcmVxdWlyZSgnaGUnKTtcbi8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBjYWxsaW5nIGNvZGUgcGFzc2VzIGEgQmFja2JvbmUuQ29sbGVjdGlvbiB3aXRoIGEgbW9kZWwgdHlwZSBvZiBUaXRsZVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVDb2xsZWN0aW9uVmlldyBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgYnVzLFxuICAgICAgICBwYXRyb25NZWRpYUl0ZW1zTW9kZWwsXG4gICAgICAgIFZpZXcsXG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIGNvdmVyV2lkdGhzLFxuICAgICAgICBpc0luSGVybyxcbiAgICAgICAgY29udGV4dCxcbiAgICB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcblxuICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICAgICAgdGhpcy5WaWV3ID0gVmlldyB8fCBUaXRsZUNhcmQ7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IF8uZXh0ZW5kKHt9LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy5jb3ZlcldpZHRocyA9IGNvdmVyV2lkdGhzO1xuICAgICAgICB0aGlzLmlzSW5IZXJvID0gaXNJbkhlcm87XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAgICAgdGhpcy50aXRsZUFjdGlvbnMgPSBuZXcgVGl0bGVBY3Rpb25zKHsgYnVzOiB0aGlzLmJ1cywgY29udGV4dCB9KTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMuY29sbGVjdGlvbiwgJ3RpdGxlOmFjdGlvbicsIHRoaXMuX2hhbmRsZVRpdGxlQWN0aW9uKTtcblxuICAgICAgICAvLyBUT0RPOiA+Pj4gUmVtb3ZlIHRoaXMgY2FsbCBhbmQgX3VwZGF0ZU1lZGlhU3RhdGVzKCkgbG9naWMgYW5kIHVwZGF0ZSBkZXBlbmRhbnQgY29uc3VtZXJzIHRvIHVzZSBQYXRyb25UaXRsZVN0YXR1c1xuICAgICAgICAvLyBGZXRjaCBwYXRyb24gZGF0YSBhbmQgdHJpZ2dlciBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAvLyBPbmx5IGZldGNoIHBhdHJvbiBkYXRhIGlmIGF1dGhlZCBhbmQgaGFzIGxpbmtlZCBjYXJkcy5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0cm9uTWVkaWFJdGVtc01vZGVsICYmXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmlzQXV0aGVudGljYXRlZCAmJlxuICAgICAgICAgICAgd2luZG93Lk92ZXJEcml2ZS5oYXNMaW5rZWRDYXJkc1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHBhdHJvbk1lZGlhSXRlbXNNb2RlbC5pbml0aWFsRmV0Y2goKS50aGVuKChwYXRyb25EYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWVkaWFTdGF0ZXMocGF0cm9uRGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICAgIGdldCB0YWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3VsJztcbiAgICB9XG5cbiAgICBfaGFuZGxlVGl0bGVBY3Rpb24oeyBhY3Rpb24sIG1vZGVsIH0pIHtcbiAgICAgICAgdGhpcy50aXRsZUFjdGlvbnMucGVyZm9ybShhY3Rpb24sIG1vZGVsKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWVkaWFTdGF0ZXMocGF0cm9uRGF0YSkge1xuICAgICAgICBsZXQgaWRzID0gW107XG4gICAgICAgIF8oXy52YWx1ZXMocGF0cm9uRGF0YSkpLmVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBpZHMucHVzaCguLi5pdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKC4uLl8ua2V5cyhpdGVtKS5tYXAoTnVtYmVyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWRzID0gXy51bmlxKGlkcyk7XG5cbiAgICAgICAgaWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuY29sbGVjdGlvbi5nZXQoaWQpO1xuXG4gICAgICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICAgICAgICBtb2RlbC51cGRhdGVQYXRyb25TdGF0ZShwYXRyb25EYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcGVyZm9ybUZvcndhcmRlZEFjdGlvbigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHRpdGxlKSA9PiB7XG4gICAgICAgICAgICB0aXRsZS5zZXQoJ3RpdGxlJywgaGUuZGVjb2RlKHRpdGxlLmdldCgndGl0bGUnKSkpO1xuXG4gICAgICAgICAgICB0aXRsZS5zZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XG5cbiAgICAgICAgICAgIGxldCB2aWV3ID0gbmV3IHRoaXMuVmlldyh7XG4gICAgICAgICAgICAgICAgbW9kZWw6IHRpdGxlLFxuICAgICAgICAgICAgICAgIGJ1czogdGhpcy5idXMsXG4gICAgICAgICAgICAgICAgY292ZXJXaWR0aHM6IHRoaXMuY292ZXJXaWR0aHMsXG4gICAgICAgICAgICAgICAgaXNJbkhlcm86IHRoaXMuaXNJbkhlcm8sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgICAgICAkKCc8bGkgLz4nLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiAnanMtdGl0bGVDYXJkIEl0ZW0nLFxuICAgICAgICAgICAgICAgIH0pLmFwcGVuZCh2aWV3LiRlbClbMF1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2godmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJGVsLmF0dHIodGhpcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoZnJhZyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgX3BlcmZvcm1Gb3J3YXJkZWRBY3Rpb24oKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuaXNBdXRoZW50aWNhdGVkICYmXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzICYmXG4gICAgICAgICAgICBIYXNoTWFuYWdlci5nZXQoJ2FjdGlvbicpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkQWN0aW9uID0gbmV3IFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgIHRoaXMuYnVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yd2FyZGVkQWN0aW9uLmV4ZWN1dGVBY3Rpb24oKTtcbiAgICAgICAgICAgIHdpbmRvdy5mb3J3YXJkZWRBY3Rpb24gPSBmb3J3YXJkZWRBY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJjb25zdCBCYWNrYm9uZSA9IHdpbmRvdy5CYWNrYm9uZTtcblxuY29uc3QgVGl0bGVIZWFkZXJCYXIgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlJywgdGhpcy5yZW5kZXIpO1xuXG4gICAgICAgIHRoaXMuJHRpdGxlSGVhZGVyQmFyID0gJCgnPGRpdiAvPicpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSxcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMucmV0dXJuU3RhdGUoKTtcblxuICAgICAgICB0aGlzLiR0aXRsZUhlYWRlckJhciA9ICQoJzxkaXYgLz4nLCBhLmNvbnRhaW5lcikuYXBwZW5kKFxuICAgICAgICAgICAgJCgnPGEgLz4nLCBhLmxpbmspXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuJGVsLmh0bWwodGhpcy4kdGl0bGVIZWFkZXJCYXIpO1xuICAgICAgICB0aGlzLiRlbC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHJldHVyblN0YXRlKCkge1xuICAgICAgICBsZXQgYmFubmVyID0ge1xuICAgICAgICAgICAgY29udGFpbmVyOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NlczogWyd0aXRsZS1oZWFkZXItYmFyJywgJ3UtYWxsQ2FwcyddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbms6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBocmVmOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgICAgICB0YWJpbmRleDogLTEsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWN0aW9uID0gdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlICd1bmF2YWlsYWJsZSc6XG4gICAgICAgICAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICdpcy11bmF2YWlsYWJsZSB1bmF2YWlsYWJsZS10aXRsZSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJhbm5lci5saW5rLnRleHQgPSB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5VW5hdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vb2snOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAnaXMtbm9vayBhdmFpbGFibGUtdGl0bGUgc2Vjb25kYXJ5LWJhY2tncm91bmQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBiYW5uZXIubGluay50ZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9ycm93JzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ2F2YWlsYWJsZS10aXRsZSBzZWNvbmRhcnktYmFja2dyb3VuZCBpcy1ib3Jyb3cnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBiYW5uZXIubGluay50ZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9ycm93ZWQnOlxuICAgICAgICAgICAgY2FzZSAnYWRkVG9BcHAnOlxuICAgICAgICAgICAgY2FzZSAnbGlzdGVuTm93JzpcbiAgICAgICAgICAgIGNhc2UgJ3JlYWROb3cnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAnaXMtYm9ycm93ZWQgYXZhaWxhYmxlLXRpdGxlIHNlY29uZGFyeS1iYWNrZ3JvdW5kJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdib3Jyb3dlZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9sZCc6XG4gICAgICAgICAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzc2VzLnB1c2goJ2lzLWhvbGQgdW5hdmFpbGFibGUtdGl0bGUnKTtcbiAgICAgICAgICAgICAgICBiYW5uZXIubGluay50ZXh0ID0gdGhpcy5tb2RlbC5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5Q29taW5nU29vbicpXG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93LnRleHQoJ2F2YWlsYWJpbGl0eVdhaXRMaXN0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbkhvbGQnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKCdpcy1vbkhvbGQgdW5hdmFpbGFibGUtdGl0bGUnKTtcbiAgICAgICAgICAgICAgICBiYW5uZXIubGluay50ZXh0ID0gd2luZG93Lmh0bWwoJ29uSG9sZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2FpdGluZyc6XG4gICAgICAgICAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzc2VzID0gdGhpcy4kdGl0bGVIZWFkZXJCYXJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJylcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHRoaXMuJHRpdGxlSGVhZGVyQmFyLmZpbmQoJ2E6Zmlyc3QnKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzID0gYmFubmVyLmNvbnRhaW5lci5jbGFzc2VzLmpvaW4oJyAnKTtcblxuICAgICAgICByZXR1cm4gYmFubmVyO1xuICAgIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVIZWFkZXJCYXI7XG4iLCJpbXBvcnQgV2lzaExpc3RCdXR0b25UZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9XaXNoTGlzdEJ1dHRvbi5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lzaExpc3RCdXR0b24gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgY29udHJhc3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJhc3QgPT09ICdkZWZhdWx0JyA/ICcnIDogJ2NvbnRyYXN0LWFsdGVybmF0ZSc7XG4gICAgfVxuXG4gICAgZ2V0QXJpYUxhYmVsKGlzUmVyZW5kZXIpIHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudGl0bGU7XG4gICAgICAgIGlmIChpc1JlcmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJ1xuICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ3RpdGxlUmVtb3ZlZEZyb21XaXNoTGlzdCcsIHsgdGl0bGUgfSlcbiAgICAgICAgICAgICAgICA6IHdpbmRvdy5odG1sKCd0aXRsZUFkZGVkVG9XaXNoTGlzdCcsIHsgdGl0bGUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJ1xuICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2FkZFRpdGxlVG9XaXNoTGlzdCcsIHsgdGl0bGUgfSlcbiAgICAgICAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZW1vdmVUaXRsZUZyb21XaXNoTGlzdCcsIHsgdGl0bGUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgaWNvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJ1xuICAgICAgICAgICAgPyAnaWNvbi13aXNoLWxpc3QnXG4gICAgICAgICAgICA6ICdpY29uLXdpc2gtbGlzdC1hZGRlZCc7XG4gICAgfVxuXG4gICAgZ2V0IHRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdpY29uLW9ubHknKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCd3aXNobGlzdFN0YXRlJykgPT09ICd3aXNobGlzdEFkZCdcbiAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2FkZFRvV2lzaExpc3QnKVxuICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgncmVtb3ZlRnJvbVdpc2hMaXN0Jyk7XG4gICAgfVxuXG4gICAgZ2V0IGdhKCkge1xuICAgICAgICBjb25zdCBpc0FkZCA9IHRoaXMubW9kZWwuZ2V0KCd3aXNobGlzdFN0YXRlJykgPT09ICd3aXNobGlzdEFkZCc7XG4gICAgICAgIGlmIChpc0FkZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZWRpYUlkOiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgICAgICAgICAgZm9ybWF0VHlwZTogdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGUuaWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHsgdHlwZSwgY29udHJhc3QgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlIHx8ICdpY29uLW9ubHknO1xuICAgICAgICB0aGlzLmNvbnRyYXN0ID0gY29udHJhc3QgfHwgJ2RlZmF1bHQnO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTp3aXNobGlzdFN0YXRlJywgdGhpcy5yZW5kZXIpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlIHx8ICdpY29uLW9ubHknO1xuICAgIH1cblxuICAgIGV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHsgY2xpY2s6ICdfaGFuZGxlQ2xpY2snIH07XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWwgfHwgdGhpcy4kZWwubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyB3ZSBoYXZlIG5vIHRhcmdldCB0byByZW5kZXIgYW55dGhpbmcgaW50b1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmV0YWluIGZvY3VzIG9uIHJlcmVuZGVyXG4gICAgICAgIGNvbnN0IGlzUmVyZW5kZXIgPVxuICAgICAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuV2lzaExpc3RCdXR0b24nKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuXG4gICAgICAgIGNvbnN0IGJ1dHRvbkh0bWwgPSBXaXNoTGlzdEJ1dHRvblRlbXBsYXRlKHtcbiAgICAgICAgICAgIGdhOiB0aGlzLmdhLFxuICAgICAgICAgICAgY29udHJhc3RDbGFzczogdGhpcy5jb250cmFzdENsYXNzLFxuICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmdldEFyaWFMYWJlbChpc1JlcmVuZGVyKSxcbiAgICAgICAgICAgIGljb25DbGFzczogdGhpcy5pY29uQ2xhc3MsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICBpY29uQW5pbWF0aW9uQ2xhc3Nlczogd2luZG93Lk92ZXJEcml2ZS5pc1RvbGlub0RldmljZVxuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6ICdhbmltYXRlZCBib3VuY2VJbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJGVsLmFwcGVuZChidXR0b25IdG1sKTtcblxuICAgICAgICBpZiAoaXNSZXJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuV2lzaExpc3RCdXR0b24nKS5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNsaWNrKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ3RpdGxlOmFjdGlvbicsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3dpc2gnLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXdpbmRvdy5PdmVyRHJpdmUuaXNUb2xpbm9EZXZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hbmltYXRlKCkge1xuICAgICAgICB0aGlzLiRlbFxuICAgICAgICAgICAgLmZpbmQoJ2knKVxuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdhbmltYXRlZCBib3VuY2VJbiBib3VuY2VPdXQnKVxuICAgICAgICAgICAgLmFkZENsYXNzKCdhbmltYXRlZCBib3VuY2VPdXQnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgVGl0bGVTdGF0ZSBmcm9tICcuLi8uLi8uLi90aXRsZS1hY3Rpb25zL1RpdGxlU3RhdGUnO1xuaW1wb3J0IE1lZGlhSW50ZXJmYWNlIGZyb20gJy4uL01lZGlhSW50ZXJmYWNlJztcbmltcG9ydCB7IHRvU3RhdGljVXJsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGliL2Fzc2V0TWFwcGVyJztcbmltcG9ydCB7IGdldE9wdGltaXplZENvdmVycyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xpYi9nZXRPcHRpbWl6ZWRDb3Zlci10cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlIGV4dGVuZHMgQmFja2JvbmUuTW9kZWwge1xuICAgIGdldCBpZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuICdpZCc7XG4gICAgfVxuXG4gICAgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgIGZpcnN0Q3JlYXRvck5hbWU6IG51bGwsXG4gICAgICAgICAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICAgICAgICAgIGZpcnN0Q3JlYXRvcklkOiAwLFxuICAgICAgICAgICAgZm9ybWF0czogW10sXG4gICAgICAgICAgICBpc093bmVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzSG9sZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgaXNQcmVSZWxlYXNlVGl0bGU6IGZhbHNlLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgc3RhclJhdGluZzogMC4wLFxuICAgICAgICAgICAgdXNlclN0YXJSYXRpbmc6IDAsXG4gICAgICAgICAgICBzdGFyUmF0aW5nQ291bnQ6IDAsXG4gICAgICAgICAgICBob2xkc1JhdGlvOiAwLFxuICAgICAgICAgICAgaG9sZHNDb3VudDogMCxcbiAgICAgICAgICAgIG93bmVkQ29waWVzOiAwLFxuICAgICAgICAgICAgYXZhaWxhYmxlQ29waWVzOiAwLFxuICAgICAgICAgICAgbHVja3lEYXlPd25lZENvcGllczogMCxcbiAgICAgICAgICAgIGx1Y2t5RGF5QXZhaWxhYmxlQ29waWVzOiAwLFxuICAgICAgICAgICAgZXN0aW1hdGVkUmVsZWFzZURhdGU6ICcnLFxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5VHlwZTogJycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICBzYW1wbGU6IHt9LCAvLyBTYW1wbGVcbiAgICAgICAgICAgIHB1Ymxpc2hlcjoge30sIC8vIFB1Ymxpc2hlclxuICAgICAgICAgICAgdHlwZTogeyBpZDogJ2Vib29rJyB9LCAvLyBUeXBlXG4gICAgICAgICAgICBjb3ZlcnM6IHt9LCAvLyBDb3ZlcnNcbiAgICAgICAgICAgIHBhcmVudE1hZ2F6aW5lVGl0bGVJZDogMCxcbiAgICAgICAgICAgIHJhdGluZ3M6IHtcbiAgICAgICAgICAgICAgICBtYXR1cml0eUxldmVsOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBDdXN0b20gTGlnaHRuaW5nIFByb3BlcnRpZXNcbiAgICAgICAgICAgIHRpdGxlU3RhdGU6ICd3YWl0aW5nJyxcbiAgICAgICAgICAgIHdpc2hsaXN0U3RhdGU6ICd3aXNobGlzdEFkZCcsXG4gICAgICAgICAgICBpc0luSGlzdG9yeTogZmFsc2UsXG4gICAgICAgICAgICBhZGRUb0FwcEZvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIGlzT25Ib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUmVsZWFzZWRIb2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQm9ycm93ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNNb3N0UmVjZW50TWFnYXppbmU6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBpc1BsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3BsYWNlaG9sZGVyJyk7XG4gICAgfVxuXG4gICAgc2V0Q29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IobW9kZWwsIG9wdGlvbnMsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHsgcGF0cm9uSXRlbXMgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgc3VwZXIobW9kZWwsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuc2V0Q29udGV4dChjb250ZXh0KTtcblxuICAgICAgICB0aGlzLnNldChcbiAgICAgICAgICAgIF8uZXh0ZW5kKHt9LCBtb2RlbCwgeyB0aXRsZVN0YXRlOiB0aGlzLl9nZXRTdGF0ZShwYXRyb25JdGVtcykgfSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMubGluayh3aW5kb3cuZ2xvYmFsRXZlbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpbmsoYnVzKSB7XG4gICAgICAgIC8vIFVubGluayB0aGUgb2xkIGJ1cyBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgaWYgKHRoaXMuYnVzKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcodGhpcy5idXMsICd0aXRsZTp1cGRhdGUnKTtcbiAgICAgICAgICAgIHRoaXMuYnVzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEF0dGFjaCBuZXcgYnVzIGlmIHBhc3NlZFxuICAgICAgICBpZiAoYnVzKSB7XG4gICAgICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICAgICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5idXMsICd0aXRsZTp1cGRhdGUnLCAodGl0bGVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VXBkYXRlcyh0aXRsZU1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2FwcGx5VXBkYXRlcyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIGlmICh0aXRsZU1vZGVsICE9PSB0aGlzICYmIHRpdGxlTW9kZWwuaWQgPT09IHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHN1cGVyLnNldCh0aXRsZU1vZGVsLmNoYW5nZWRBdHRyaWJ1dGVzKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0KCkge1xuICAgICAgICBzdXBlci5zZXQoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5idXMgJiYgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6dXBkYXRlJywgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gQW4gZXhhbXBsZSBvZiB0aGlzIGNhbiBiZSBzZWVuIGluIENvbGxlY3Rpb25IaWdodGxpZ2h0LmpzOjYxICh3aGVyZSBUaXRsZUNvbGxlY3Rpb25WaWV3IGdldHMgbmV3J2VkIHVwKVxuICAgIGdldCBjb250ZXh0Q29sbGVjdGlvbklkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0ICYmIHRoaXMuY29udGV4dC5jb2xsZWN0aW9uRGVmaW5pdGlvblxuICAgICAgICAgICAgPyB0aGlzLmNvbnRleHQuY29sbGVjdGlvbkRlZmluaXRpb24uaWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCB0aXRsZURldGFpbHNVcmwoKSB7XG4gICAgICAgIC8vIExIVE5HLTMwMTggUmVmZXJlbmNlIG9wdGlvbmFsIGNvbnRleHRDb2xsZWN0aW9uSWQgdmFsdWUgd2hlbiBjcmVhdGluZyBhIHRpdGxlIGRldGFpbHMgbGlua1xuICAgICAgICBsZXQgcHJvcHMgPSB7IGlkOiB0aGlzLmlkIH07XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGV4dENvbGxlY3Rpb25JZCkge1xuICAgICAgICAgICAgcHJvcHMuY2lkID0gdGhpcy5jb250ZXh0Q29sbGVjdGlvbklkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUlkLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0x1Y2t5RGF5Q29waWVzKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSAmJlxuICAgICAgICAgICAgdGhpcy5nZXQoJ2x1Y2t5RGF5T3duZWRDb3BpZXMnKSA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgYWxsQ29waWVzQXJlTHVja3lEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0x1Y2t5RGF5Q29waWVzICYmIHRoaXMuZ2V0KCdvd25lZENvcGllcycpID09PSAwO1xuICAgIH1cblxuICAgIGdldCBpc0x1Y2t5RGF5Q2hlY2tvdXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmhhc0F2YWlsYWJsZUx1Y2t5RGF5Q29waWVzICYmXG4gICAgICAgICAgICB0aGlzLmdldCgnYXZhaWxhYmxlQ29waWVzJykgPT09IDAgJiZcbiAgICAgICAgICAgICF0aGlzLmdldCgnaXNSZWxlYXNlZEhvbGQnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBjYW5QbGFjZUhvbGQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldCgnaXNIb2xkYWJsZScpICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ2lzT25Ib2xkJykgJiZcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NvbnRlbnQtaG9sZHMnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBpc0F2YWlsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdpc0F2YWlsYWJsZScpIHx8IHRoaXMuaGFzQXZhaWxhYmxlTHVja3lEYXlDb3BpZXM7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0F2YWlsYWJsZUx1Y2t5RGF5Q29waWVzKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5oYXNMdWNreURheUNvcGllcyAmJiB0aGlzLmdldCgnbHVja3lEYXlBdmFpbGFibGVDb3BpZXMnKSA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgaXNFeHBpcmVkKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5nZXQoJ2lzT3duZWQnKSAmJlxuICAgICAgICAgICAgKHRoaXMuaXNFeHBpcmVkU3VUaXRsZSB8fCB0aGlzLmlzRXhwaXJlZE5vblN1VGl0bGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGlzRXhwaXJlZFN1VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldCgnYXZhaWxhYmlsaXR5VHlwZScpID09PSAnYWx3YXlzJyAmJlxuICAgICAgICAgICAgIXRoaXMuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ2lzQXZhaWxhYmxlJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgaXNFeHBpcmVkTm9uU3VUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlUeXBlJykgIT09ICdhbHdheXMnICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ293bmVkQ29waWVzJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYXRyb25TdGF0ZShwYXRyb25JdGVtcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc2V0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlU3RhdGU6IHRoaXMuX2dldFN0YXRlKHBhdHJvbkl0ZW1zKSxcbiAgICAgICAgICAgICAgICB3aXNobGlzdFN0YXRlOiBUaXRsZVN0YXRlLmlzT25XaXNobGlzdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBwYXRyb25JdGVtc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgPyAnd2lzaGxpc3RSZW1vdmUnXG4gICAgICAgICAgICAgICAgICAgIDogJ3dpc2hsaXN0QWRkJyxcbiAgICAgICAgICAgICAgICB1c2VyU3RhclJhdGluZzogVGl0bGVTdGF0ZS5zdGFyUmF0aW5nKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zXG4gICAgICAgICAgICAgICAgKSwgLy8gMCBpZiBub3QgcmF0ZWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlYWRpbmdIaXN0b3J5U3RhdGUgPSBUaXRsZVN0YXRlLmlzT25SZWFkaW5nSGlzdG9yeShcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHBhdHJvbkl0ZW1zXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0KCdpc0luSGlzdG9yeScsIHJlYWRpbmdIaXN0b3J5U3RhdGUsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgICAgIGNvbnN0IHVzZXJTdGFyUmF0aW5nID0gVGl0bGVTdGF0ZS5zdGFyUmF0aW5nKFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcGF0cm9uSXRlbXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXQoJ3VzZXJTdGFyUmF0aW5nJywgdXNlclN0YXJSYXRpbmcsIG9wdGlvbnMgfHwge30pOyAvLyAwIGlmIG5vdCByYXRlZFxuICAgIH1cblxuICAgIGdldENvdmVyKGRlc2lyZWRTaXplKSB7XG4gICAgICAgIGNvbnN0IGNvdmVycyA9IF8ubWFwKHRoaXMuZ2V0KCdjb3ZlcnMnKSwgKGNvdmVyKSA9PiBjb3Zlcik7IC8vIG1hcHMgdG8gY29sbGVjdGlvbiBvZiBjb3ZlcnNcbiAgICAgICAgcmV0dXJuIGdldE9wdGltaXplZENvdmVycyhjb3ZlcnMsIGRlc2lyZWRTaXplKTtcbiAgICB9XG5cbiAgICBnZXRDb3ZlclNyYyhkZXNpcmVkU2l6ZSkge1xuICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMuZ2V0Q292ZXIoZGVzaXJlZFNpemUpO1xuICAgICAgICByZXR1cm4gKGNvdmVyICYmIGNvdmVyLmhyZWYpIHx8IHRvU3RhdGljVXJsKCdpbWcvbm8tY292ZXJfZW5fVVMuanBnJyk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEF2YWlsYWJpbGl0eSgpIHtcbiAgICAgICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUF2YWlsYWJpbGl0eUlkLCB7IGlkOiB0aGlzLmlkIH0pLFxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICB0aW1lb3V0OiAwLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRNaXNzaW5nQXR0cmlidXRlKGF0dHJpYnV0ZSkge1xuICAgICAgICBpZiAoIXRoaXMuX21lZGlhSW50ZXJmYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tZWRpYUludGVyZmFjZSA9IG5ldyBNZWRpYUludGVyZmFjZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUludGVyZmFjZVxuICAgICAgICAgICAgLnNlYXJjaCh7IHRpdGxlSWQ6IHRoaXMuZ2V0KCdpZCcpIH0pXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChhdHRyaWJ1dGUsIHJlc3BvbnNlW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGF2YWlsYWJpbGl0eVRleHQoKSB7XG4gICAgICAgIGxldCBhY3Rpb24gPSB0aGlzLmdldCgndGl0bGVTdGF0ZScpO1xuICAgICAgICBsZXQgYXZhaWxhYmlsaXR5VGV4dCA9ICcnO1xuXG4gICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlICd1bmF2YWlsYWJsZSc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlVbmF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9vayc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvdycgfHwgJ3ByZXZpZXcnOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5QXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3Jyb3dlZCc6XG4gICAgICAgICAgICBjYXNlICdhZGRUb0FwcCc6XG4gICAgICAgICAgICBjYXNlICdsaXN0ZW5Ob3cnOlxuICAgICAgICAgICAgY2FzZSAncmVhZE5vdyc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdib3Jyb3dlZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9sZCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5Q29taW5nU29vbicpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gdGhpcy5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5Q29taW5nU29vbicpXG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eVdhaXRMaXN0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbkhvbGQnOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnb25Ib2xkJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3YWl0aW5nJzpcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdmFpbGFiaWxpdHlUZXh0O1xuICAgIH1cblxuICAgIF9nZXRTdGF0ZShwYXRyb25JdGVtcykge1xuICAgICAgICB0aGlzLnNldFBhdHJvblN0YXRlKHBhdHJvbkl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIFRpdGxlU3RhdGUuZ2V0U3RhdGUodGhpcy5hdHRyaWJ1dGVzLCBwYXRyb25JdGVtcyk7XG4gICAgfVxuXG4gICAgc2V0UGF0cm9uU3RhdGUocGF0cm9uSXRlbXMpIHtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgaXNPbkhvbGQ6IHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uSG9sZHMuaW5kZXhPZih0aGlzLmlkKSA+IC0xLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgaXNCb3Jyb3dlZDpcbiAgICAgICAgICAgICAgICBwYXRyb25JdGVtcyAmJiBwYXRyb25JdGVtcy5vbkNoZWNrb3V0cy5pbmRleE9mKHRoaXMuaWQpID4gLTEsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhbml0aXplZERlc2MoKSB7XG4gICAgICAgIGxldCBkZXNjID0gdGhpcy5nZXQoJ2Rlc2NyaXB0aW9uJykucmVwbGFjZShcbiAgICAgICAgICAgIC8oPGJyXFxzKltcXC9dPz4pfChcXHI/XFxufFxccikvZ2ltLFxuICAgICAgICAgICAgJyAnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiAkKGA8ZGl2PiR7ZGVzY308L2Rpdj5gKS50ZXh0KCk7XG4gICAgfVxuXG4gICAgZ2V0VGl0bGVBc3luYyhtZWRpYUlkLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhSW5mb0lkLCB7IGlkOiBtZWRpYUlkIH0pLFxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoJ3RpdGxlU3RhdGUnLCB0aGlzLl9nZXRTdGF0ZShudWxsKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBpc01hZ2F6aW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3R5cGUnKS5pZCA9PT0gJ21hZ2F6aW5lJztcbiAgICB9XG59XG4iLCJcbmltcG9ydCBUaXRsZSBmcm9tICcuL1RpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVDb2xsZWN0aW9uIGV4dGVuZHMgQmFja2JvbmUuQ29sbGVjdGlvbiB7XG4gICAgZ2V0IG1vZGVsKCkgeyByZXR1cm4gVGl0bGU7IH1cbn1cblxuIiwiY29uc3QgeyBmZWF0dXJlTWFuYWdlciwgaHRtbCwgdXJsLCByb3V0ZXMgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgKHtcbiAgICBpc093bmVkLFxuICAgIHJlbGF0ZWRUaXRsZXNQYWdlVXJsLFxuICAgIGlkLFxuICAgIHJpZCxcbiAgICB0eXBlSWQsXG4gICAgdGl0bGUsXG4gICAgYWxpZ25tZW50LFxuICAgIHNhbXBsZUhyZWYsXG4gICAgc2FtcGxlVGV4dCxcbiAgICBoaXN0b3J5QWN0aW9uTGFiZWwsXG4gICAgaGlzdG9yeUFjdGlvblRleHQsXG4gICAgaGlzdG9yeUVuYWJsZWQsXG4gICAgZ2FIaXN0b3J5QWN0aW9uLFxuICAgIHNlcmllc1NlYXJjaFVybCxcbiAgICBoYXNNZWRpYURvRm9ybWF0LFxufSkgPT4gYFxuPGRpdiBjbGFzcz1cIkNvbnRleHRNZW51XCI+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cIkNvbnRleHRNZW51LWJ1dHRvbiBqcy1jb250ZXh0LWJ1dHRvblwiIGRhdGEtbWVkaWEtaWQ9XCIke2lkfVwiXG4gICAgICAgICBkYXRhLXRpdGxlPVwiJHt0aXRsZX1cIlxuICAgICAgICAgZGF0YS1kcm9wZG93bj1cImNvbnRleHQtbWVudS0ke2lkfS0ke3JpZH1cIlxuICAgICAgICAgZGF0YS1vcHRpb25zPVwiYWxpZ246JHthbGlnbm1lbnR9XCJcbiAgICAgICAgIGFyaWEtY29udHJvbHM9XCJtb3JlLWFjdGlvbnMtZHJvcC0ke2lkfVwiXG4gICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgYXJpYS1sYWJlbD1cIiR7aHRtbCgnY292ZXIudGl0bGVJbmZvJywgeyB0aXRsZSB9KX1cIlxuICAgICAgICAgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb24gaWNvbi1tb3JlXCIgdGFiaW5kZXg9XCItMVwiPjwvaT5cbiAgICA8L2Rpdj5cblxuICAgIDx1bCBpZD1cImNvbnRleHQtbWVudS0ke2lkfS0ke3JpZH1cIiBjbGFzcz1cIkNvbnRleHRNZW51LWRyb3AganMtY29udGV4dC1kcm9wIGYtZHJvcGRvd24gdGV4dC1sZWZ0XCIgZGF0YS1kcm9wZG93bi1jb250ZW50IGFyaWEtaGlkZGVuPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImxpc3RcIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiPlxuICAgICAgICAke1xuICAgICAgICAgICAgKCF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdoaWRlLXVub3duZWQtc2FtcGxlcycpIHx8XG4gICAgICAgICAgICAgICAgaXNPd25lZCkgJiZcbiAgICAgICAgICAgIHNhbXBsZUhyZWYgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJyZWFkLXNhbXBsZSBDb250ZXh0TWVudS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGEgZGF0YS1ocmVmPVwiJHtzYW1wbGVIcmVmfVwiIGRhdGEtbWVkaWEtaWQ9XCIke2lkfVwiIGRhdGEtdGl0bGU9XCIke3RpdGxlfVwiXG4gICAgICAgICAgICAgICAgZGF0YS1vZi1kcm9wZG93bj1cIm1vcmUtYWN0aW9ucy1kcm9wLSR7aWR9XCIgZGF0YS10eXBlPVwiJHt0eXBlSWR9XCIgbWVkaWEtZG8tZm9ybWF0PVwiJHtoYXNNZWRpYURvRm9ybWF0fVwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBhcmlhLWxhYmVsPVwiJHtodG1sKFxuICAgICAgICAgICAgICAgICAgICAnY292ZXIuc2FtcGxlTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICB7IHNhbXBsZTogc2FtcGxlVGV4dCwgdGl0bGUgfVxuICAgICAgICAgICAgICAgICl9XCI+XG4gICAgICAgICAgICAgICAgICAgICR7c2FtcGxlVGV4dH1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xpPmBcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgPGxpIGNsYXNzPVwiQ29udGV4dE1lbnUtaXRlbVwiPlxuICAgICAgICAgICAgPGEgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCIke3VybChyb3V0ZXMubWVkaWFJZCwge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgfSl9XCIgYXJpYS1sYWJlbD1cIiR7aHRtbCgndmlld0RldGFpbHNBYm91dFRpdGxlJywge1xuICAgIHRpdGxlLFxufSl9XCI+JHtodG1sKCd2aWV3RGV0YWlscycpfTwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICAgJHtcbiAgICAgICAgICAgIHNlcmllc1NlYXJjaFVybCAmJiBzZXJpZXNTZWFyY2hVcmwgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJDb250ZXh0TWVudS1pdGVtXCI+PGEgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCIke3Nlcmllc1NlYXJjaFVybH1cIj4ke2h0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgJ3ZpZXdTZXJpZXMnXG4gICAgICAgICAgICAgICAgICApfTwvYT48L2xpPmBcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtcbiAgICAgICAgICAgIGhpc3RvcnlFbmFibGVkXG4gICAgICAgICAgICAgICAgPyBgPGxpIGNsYXNzPVwiQ29udGV4dE1lbnUtaXRlbSBqcy1oaXN0b3J5QWN0aW9uXCIgZGF0YS1nYS1hY3Rpb249XCIke2dhSGlzdG9yeUFjdGlvbn1cIiBkYXRhLW1lZGlhLWlkPVwiJHtpZH1cIj48YSB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCIke2hpc3RvcnlBY3Rpb25MYWJlbH1cIj4ke2hpc3RvcnlBY3Rpb25UZXh0fTwvYT48L2xpPmBcbiAgICAgICAgICAgICAgICA6IGBgXG4gICAgICAgIH1cbiAgICAgICAgPGxpIGNsYXNzPVwiQ29udGV4dE1lbnUtaXRlbVwiPjxhIHRhYmluZGV4PVwiLTFcIiBocmVmPVwiJHtyZWxhdGVkVGl0bGVzUGFnZVVybH1cIiBhcmlhLWxhYmVsPVwiJHtodG1sKFxuICAgICd2aWV3UmVsYXRlZFRvVGl0bGUnLFxuICAgIHsgdGl0bGUgfVxuKX1cIj4ke2h0bWwoJ3lvdU1heUFsc29MaWtlJyl9PC9hPjwvbGk+XG4gICAgPC91bD5cbjwvZGl2PmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoeyBtZWRpYSwgc3JjLCBocmVmLCBjb3ZlckNvbG9yLCBub1NhbXBsZUNsYXNzLCBzcmNzZXQgfSkgPT4gYFxuPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7Y292ZXJDb2xvcn1cIj5cbiAgICA8YSBocmVmPVwiJHtocmVmfVwiXG4gICAgICAgICAgIGRhdGEtaHJlZiAgICA9XCIke2hyZWZ9XCJcbiAgICAgICAgICAgZGF0YS1tZWRpYS1pZD1cIiR7bWVkaWEuaWR9XCJcbiAgICAgICAgICAgZGF0YS10aXRsZSAgID1cIiR7bWVkaWEudGl0bGV9XCJcbiAgICAgICAgICAgZGF0YS10eXBlICAgID1cIiR7bWVkaWEudHlwZS5pZH1cIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJsYXJnZS10aXRsZSBqcy1kZXRhaWxzLWNvdmVyLWltYWdlICR7bm9TYW1wbGVDbGFzc30gXCJcbiAgICAgICAgICAgIHNyYz1cIiR7c3JjfVwiXG4gICAgICAgICAgICAke3NyY3NldCAmJiBgc3Jjc2V0PVwiJHtzcmNzZXR9XCJgfVxuICAgICAgICAgICAgYWx0PVwiJHttZWRpYS50aXRsZX0gLSAke2h0bWwobWVkaWEudHlwZS5pZCl9XCJcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogJHtjb3ZlckNvbG9yfTsgbWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50O1wiLz5cbiAgICA8L2E+XG48L2Rpdj5gO1xuIiwiaW1wb3J0IHsgdG9TdGF0aWNVcmwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9saWIvYXNzZXRNYXBwZXInO1xuXG5leHBvcnQgZGVmYXVsdCAoeyBtZWRpYSwgaHJlZiwgaXNJbkhlcm8sIGNvdmVyV2lkdGgsIGNvdmVySGVpZ2h0LCBjcmVhdG9yVGV4dCB9KSA9PiBgXG48ZGl2IGNsYXNzPVwiQ292ZXJJbWFnZUNvbnRhaW5lclwiPlxuPGEgY2xhc3M9XCJDb3ZlckltYWdlQ29udGFpbmVyIG5vQ292ZXJBdmFpbGFibGUgJHsgaXNJbkhlcm8gPyAnc2Vjb25kYXJ5LWJhY2tncm91bmQnIDogJ3ByaW1hcnktYmFja2dyb3VuZCcgfVwiXG4gICAgaHJlZj1cIiR7IGhyZWYgfVwiXG4gICAgZGF0YS1ocmVmICAgID1cIiR7IGhyZWYgfVwiXG4gICAgZGF0YS1tZWRpYS1pZD1cIiR7IG1lZGlhLmlkIH1cIlxuICAgIGRhdGEtdGl0bGUgICA9XCIkeyBtZWRpYS50aXRsZSB9XCJcbiAgICBkYXRhLXR5cGUgICAgPVwiJHsgbWVkaWEudHlwZS5pZCB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZSAkeyBpc0luSGVybyA/ICdzZWNvbmRhcnktZm9udC1oaWdobGlnaHQtYm94JyA6ICdwcmltYXJ5LWZvbnQgcHJpbWFyeS1mb250LWhpZ2hsaWdodC1ib3gnIH1cIj4keyBtZWRpYS50aXRsZSB9PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdXRob3IgJHsgaXNJbkhlcm8gPyAnJyA6ICdwcmltYXJ5LWZvbnQnIH1cIj4keyBjcmVhdG9yVGV4dCB9PC9kaXY+XG5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJsYXJnZS10aXRsZSBqcy1kZXRhaWxzLWNvdmVyLWltYWdlXCJcbiAgICAgICAgICAgIHNyYz1cIiR7IHRvU3RhdGljVXJsKCdpbWcvY2xlYXIuZ2lmJykgfVwiXG4gICAgICAgICAgICBhbHQ9XCIkeyBtZWRpYS50aXRsZSB9IC0gJHsgaHRtbChtZWRpYS50eXBlLmlkKSB9XCJcbiAgICAgICAgICAgIC8+XG5cbjwvYT5cbjwvZGl2PlxuXG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgdGV4dCwgaHJlZiwgbGFiZWwgfSkgPT4gYFxuPGEgdGl0bGU9XCIke3RleHR9XCIgY2xhc3M9XCJzZWNvbmRhcnktdW5kZXJsaW5lXCIgaHJlZj1cIiR7aHJlZn1cIiBhcmlhLWxhYmVsPVwiJHtsYWJlbH1cIj4ke3RleHR9PC9hPlxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7IGdlb0lkY0NsYXNzIH0pID0+IGBcbjxkaXYgY2xhc3M9XCJ0aXRsZS1jb250ZW50cyBjYXJkIFRpdGxlQ2FyZCAke2dlb0lkY0NsYXNzfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJUaXRsZUhlYWRlckJhclwiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VcIj48L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJJbmZvUGFuZWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlSW5mb1wiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZUFjdGlvbiBpcy1ncmlkXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlV2lzaGxpc3QgaXMtZ3JpZFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyXCIgLz5cbjwvZGl2PmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe3R5cGVJZH0pID0+IGBcbiR7dHlwZUlkID8gYFxuICAgIDxzcGFuIGNsYXNzPVwidGl0bGUtZm9ybWF0LWJhZGdlIGNvbnRyYXN0IHUtYWxsQ2Fwc1wiPjxpIGNsYXNzPVwiaWNvbi0ke3R5cGVJZH1cIj48L2k+JHt3aW5kb3cuaHRtbCh0eXBlSWQpfTwvc3Bhbj5cbmAgOiAnJyB9XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgdGl0bGVJZCwgdGl0bGUsIGhyZWYsIGFyaWFMYWJlbCB9KSA9PiBgPGgzIHRpdGxlPVwiJHsgdGl0bGUgfVwiIGNsYXNzPVwidGl0bGUtbmFtZVwiIGRhdGEtbWVkaWEtaWQ9XCIkeyB0aXRsZUlkIH1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgPGEgdGFiaW5kZXg9XCIwXCIgaHJlZj1cIiR7IGhyZWYgfVwiIHJvbGU9XCJsaW5rXCIgYXJpYS1sYWJlbD1cIiR7IGFyaWFMYWJlbCB9XCI+XG4gICAgICAgICR7IHRpdGxlIH1cbiAgICA8L2E+XG48L2gzPmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe2dhLCBjb250cmFzdENsYXNzLCBhcmlhTGFiZWwsIGljb25DbGFzcywgdGV4dCwgaWNvbkFuaW1hdGlvbkNsYXNzZXN9KSA9PiBgXG48YnV0dG9uICR7Z2EgPyBgZGF0YS1nYS10cmFjaz1cIndpc2hsaXN0XCIgZGF0YS1nYS1tZWRpYUlEPVwiJHtnYS5tZWRpYUlkfVwiIGRhdGEtZ2EtdHlwZT0ke2dhLmZvcm1hdFR5cGV9YCA6ICcnfVxuY2xhc3M9XCJXaXNoTGlzdEJ1dHRvbiAke2NvbnRyYXN0Q2xhc3N9XCIgXG50eXBlPVwiYnV0dG9uXCIgXG5hcmlhLWxhYmVsPVwiJHthcmlhTGFiZWx9XCI+XG4gICAgPGkgY2xhc3M9XCIke2ljb25DbGFzc30gaWNvbiAke2ljb25BbmltYXRpb25DbGFzc2VzfVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAke3RleHQgPyBgPHNwYW4gY2xhc3M9XCJ1LWFsbENhcHMgV2lzaExpc3RCdXR0b24tdGV4dFwiPiR7dGV4dH08L3NwYW4+YCA6ICcnfVxuPC9idXR0b24+YDtcbiIsImltcG9ydCBDb250ZXh0TWVudSBmcm9tICcuLi9Db250ZXh0TWVudSc7XG5pbXBvcnQgVGl0bGVBdXRob3IgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVBdXRob3InO1xuaW1wb3J0IFRpdGxlRWRpdGlvbiBmcm9tICcuL1RpdGxlSW5mby9UaXRsZUVkaXRpb24nO1xuaW1wb3J0IFRpdGxlTmFtZSBmcm9tICcuL1RpdGxlSW5mby9UaXRsZU5hbWUnO1xuaW1wb3J0IFRpdGxlRm9ybWF0QmFkZ2UgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVGb3JtYXRCYWRnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlSW5mbyBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAndGl0bGUtaW5mbyc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBfcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLl9yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZU5hbWUgPSBuZXcgVGl0bGVOYW1lKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMuY29udGV4dE1lbnUgPSBuZXcgQ29udGV4dE1lbnUoeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51LiRlbC5hZGRDbGFzcygndGV4dC1yaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmlzTWFnYXppbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMudGl0bGVFZGl0aW9uID0gbmV3IFRpdGxlRWRpdGlvbih7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLnRpdGxlQXV0aG9yID0gbmV3IFRpdGxlQXV0aG9yKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlRm9ybWF0QmFkZ2UgPSBuZXcgVGl0bGVGb3JtYXRCYWRnZSh7XG4gICAgICAgICAgICAgICAgdHlwZUlkOiB0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcbiAgICAgICAgdGhpcy4kZWwuYXBwZW5kKC4uLnRoaXMuX3ZpZXdzLm1hcCgodmlldykgPT4gdmlldy4kZWwpKTtcbiAgICB9XG59XG4iLCJjb25zdCBCYWNrYm9uZSA9IHdpbmRvdy5CYWNrYm9uZTtcbmNvbnN0IGZlYXR1cmVNYW5hZ2VyID0gd2luZG93LmZlYXR1cmVNYW5hZ2VyO1xuXG5pbXBvcnQgVGl0bGVBdXRob3JUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvVGl0bGVBdXRob3IuaHRtbCc7XG5cbmNvbnN0IFRpdGxlQXV0aG9yID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIHRlbXBsYXRlOiBUaXRsZUF1dGhvclRlbXBsYXRlLFxuXG4gICAgY2xhc3NOYW1lOiAndGl0bGUtYXV0aG9yJyxcblxuICAgIHRhZ05hbWU6ICdwJyxcblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkICE9PSAncGVyaW9kaWNhbHMnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5tb2RlbC50b0pTT04oKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aXRsZS5maXJzdENyZWF0b3JOYW1lICE9IG51bGwgJiZcbiAgICAgICAgICAgICFfLmlzRW1wdHkodGl0bGUuZmlyc3RDcmVhdG9yTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgY3JlYXRvck5hbWUgPSBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2ZpeEh0bWxUYWdzSW5Db3B5JylcbiAgICAgICAgICAgICAgICA/IHRpdGxlLmZpcnN0Q3JlYXRvck5hbWVcbiAgICAgICAgICAgICAgICA6IF8uZXNjYXBlKHRpdGxlLmZpcnN0Q3JlYXRvck5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCB2aWV3RGF0YSA9IHtcbiAgICAgICAgICAgICAgICBocmVmOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuc2VhcmNoQnlUeXBlLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjcmVhdG9ySWQnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGl0bGUuZmlyc3RDcmVhdG9ySWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRCeTogJ25ld2x5YWRkZWQnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB3aW5kb3cudGV4dCgnY292ZXIuc2VhcmNoQnlBdXRob3InLCB7XG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcjogY3JlYXRvck5hbWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGV4dDogY3JlYXRvck5hbWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLiRlbC5odG1sKFxuICAgICAgICAgICAgICAgIHdpbmRvdy50ZXh0KCdieUxpbmUnLCB7IGNyZWF0b3I6IHRoaXMudGVtcGxhdGUodmlld0RhdGEpIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ25vLWF1dGhvci1maXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwod2luZG93Lmh0bWwoJ2NvdmVyLm5vQXV0aG9yQXZhaWxhYmxlJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUF1dGhvcjtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVFZGl0aW9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgbm9kZSA9ICQoYDxkaXYgY2xhc3M9XCJ0aXRsZS1lZGl0aW9uXCI+JHt0aGlzLm1vZGVsLmdldCgnZWRpdGlvbicpfTwvZGl2PmApO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnQobm9kZSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFRpdGxlRm9ybWF0QmFkZ2VUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvVGl0bGVGb3JtYXRCYWRnZS5odG1sJztcblxuY29uc3QgVGl0bGVGb3JtYXRCYWRnZSA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtcbiAgICBpbml0aWFsaXplKHt0eXBlSWR9KSB7XG4gICAgICAgIHRoaXMudHlwZUlkID0gdHlwZUlkO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudCgkKFRpdGxlRm9ybWF0QmFkZ2VUZW1wbGF0ZSh7dHlwZUlkOiB0aGlzLnR5cGVJZH0pKSk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlRm9ybWF0QmFkZ2U7XG4iLCJpbXBvcnQgVGl0bGVOYW1lVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL1RpdGxlTmFtZS5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVOYW1lIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IFRpdGxlTmFtZVRlbXBsYXRlO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIF9hc3NlbWJsZUxhYmVsKCkge1xuICAgICAgICBsZXQgbGFiZWxQYXJ0cyA9IFtdO1xuXG4gICAgICAgIGxhYmVsUGFydHMucHVzaCh0aGlzLm1vZGVsLmdldCgndGl0bGUnKSk7XG5cbiAgICAgICAgaWYgKCEhdGhpcy5tb2RlbC5nZXQoJ2ZpcnN0Q3JlYXRvck5hbWUnKSkge1xuICAgICAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHdpbmRvdy5odG1sKCdieUxpbmUnLCB7Y3JlYXRvcjogdGhpcy5tb2RlbC5pc01hZ2F6aW5lID8gdGhpcy5tb2RlbC5nZXQoJ3B1Ymxpc2hlcicpLm5hbWUgOiB0aGlzLm1vZGVsLmdldCgnZmlyc3RDcmVhdG9yTmFtZScpfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHRoaXMubW9kZWwuYXZhaWxhYmlsaXR5VGV4dCgpKTtcblxuICAgICAgICBsYWJlbFBhcnRzLnB1c2godGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5uYW1lKTtcblxuICAgICAgICByZXR1cm4gbGFiZWxQYXJ0cy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB2aWV3RGF0YSA9IHtcbiAgICAgICAgICAgIHRpdGxlSWQgICA6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICBocmVmICAgICAgOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgIGFyaWFMYWJlbCA6IF8uZXNjYXBlKHRoaXMuX2Fzc2VtYmxlTGFiZWwoKSksXG4gICAgICAgICAgICB0aXRsZSAgICAgOiB0aGlzLm1vZGVsLmdldCgndGl0bGUnKVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KCQodGhpcy50ZW1wbGF0ZSh2aWV3RGF0YSkpKTtcbiAgICB9XG59XG5cbiIsImltcG9ydCBUaXRsZSBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL21vZGVscy9UaXRsZSc7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlQ29sbGVjdGlvbic7XG5cbi8vIFRoaXMgaXMgYSByZXBsYWNlbWVudCBmb3IgUGF0cm9uTWVkaWFJdGVtc01vZGVsIChlY21hc2NyaXB0XFxtb2RlbHNcXHBhdHJvbl9tZWRpYV9pdGVtcy5qcylcbi8vIFdlIHNob3VsZCBncmFkdWFsbHkgdHJhbnNpdGlvbiB0byB1c2luZyB0aGlzIGFzIHRpbWUgcGVybWl0cyBhbmQgd2UgY2FuIHRha2UgdGhlIHRpbWUgdG8gdmFsaWRhdGUgZnVudGlvbmFsaXR5XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXRyb25UaXRsZVN0YXR1cyBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcbiAgICBnZXQgdXJsKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhSW5mbyk7XG4gICAgfVxuXG4gICAgZmV0Y2hUaXRsZVN0YXR1cyh0aXRsZUNvbGxlY3Rpb24sIHN0YXR1c1R5cGVzID0gbnVsbCkge1xuICAgICAgICBsZXQgdGl0bGVBcnJheSA9IHRpdGxlQ29sbGVjdGlvbi5tb2RlbHMgfHwgdGl0bGVDb2xsZWN0aW9uIHx8IFtdO1xuXG4gICAgICAgIGlmICh0aXRsZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpdGxlSWRzID0gXy5tYXAoXyh0aXRsZUFycmF5KS5wbHVjaygnaWQnKSwgTnVtYmVyKTtcblxuICAgICAgICB0aGlzLnJlcXVlc3QgPSB0aGlzLmZldGNoKHtcbiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdGl0bGVJZHMsIHN0YXR1c1R5cGVzIH0pLFxuICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdDtcbiAgICB9XG5cbiAgICAvKiogQHBhcmFtIHtUaXRsZX0gdGl0bGUgKi9cbiAgICB1cGRhdGVUaXRsZVN0YXRlKHRpdGxlKSB7XG4gICAgICAgIHRpdGxlLnVwZGF0ZVBhdHJvblN0YXRlKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgZ2V0IHRpdGxlSWRzKCkge1xuICAgICAgICByZXR1cm4gXy51bmlvbihcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdvblJlYWRpbmdIaXN0b3J5JyksXG4gICAgICAgICAgICBfLmtleXModGhpcy5nZXQoJ3N0YXJSYXRpbmdzJykpLFxuICAgICAgICAgICAgdGhpcy5nZXQoJ29uQ2hlY2tvdXRzJyksXG4gICAgICAgICAgICB0aGlzLmdldCgnb25Ib2xkcycpLFxuICAgICAgICAgICAgdGhpcy5nZXQoJ29uV2lzaGxpc3QnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0ge1RpdGxlQ29sbGVjdGlvbn0gdGl0bGVDb2xsZWN0aW9uICovXG4gICAgdXBkYXRlVGl0bGVDb2xsZWN0aW9uU3RhdGUodGl0bGVDb2xsZWN0aW9uKSB7XG4gICAgICAgIC8vIHdlIHByb3ZpZGUgYW4gZW1wdHkgYXJyYXkgZm9yIGFueSBzdGF0dXMgYXR0cmlidXRlcyB0aGF0IHdlcmUgbm90IGZldGNoZWRcbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgYW55dGhpbmcgZG93bnN0cmVhbVxuICAgICAgICB0aGlzLnN0dWJBdHRyaWJ1dGVzKCk7XG4gICAgICAgIHRoaXMudGl0bGVJZHMuZm9yRWFjaCgodGl0bGVJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aXRsZUNvbGxlY3Rpb24uZmluZFdoZXJlKHsgaWQ6IHRpdGxlSWQgfSk7XG5cbiAgICAgICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGl0bGVTdGF0ZShtb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0dWJBdHRyaWJ1dGVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvblJlYWRpbmdIaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdvblJlYWRpbmdIaXN0b3J5JywgW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXQoJ3N0YXJSYXRpbmdzJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdzdGFyUmF0aW5ncycsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvbkNoZWNrb3V0cycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25DaGVja291dHMnLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldCgnb25Ib2xkcycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25Ib2xkcycsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvbldpc2hsaXN0JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdvbldpc2hsaXN0JywgW10pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IEZlYXR1cmVkQ29sbGVjdGlvblZpZXcgZnJvbSAnLi4vY29tcG9uZW50cy9mZWF0dXJlZF9jb2xsZWN0aW9ucy9GZWF0dXJlZENvbGxlY3Rpb25WaWV3Jztcblxud2luZG93LmZlYXR1cmVkQ29sbGVjdGlvblZpZXcgPSBuZXcgRmVhdHVyZWRDb2xsZWN0aW9uVmlldyAoe1xuICAgIGVsICAgICAgICAgICAgICA6ICcuQ2Fyb3VzZWxzJyxcbiAgICB2aWV3TmFtZSAgICAgICAgOiB3aW5kb3cudmlld05hbWUsXG4gICAgYnVzICAgICAgICAgICAgIDogd2luZG93Lmdsb2JhbEV2ZW50cyxcbiAgICByb29tICAgICAgICAgICAgOiB3aW5kb3cuT3ZlckRyaXZlLmN1cnJlbnRSb29tLFxuICAgIHBhdHJvblNldHRpbmdzICA6IHdpbmRvdy5wYXRyb25TZXR0aW5nc1xufSk7XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUFjdGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKHsgYnVzLCBjb250ZXh0IH0pIHtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgICAgICAgcm9vbTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29sbGVjdGlvbkRlZmluaXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICBfLmV4dGVuZCh0aGlzLmNvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHBlcmZvcm0oYWN0aW9uLCB0aXRsZU1vZGVsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tgXyR7YWN0aW9ufWBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzW2BfJHthY3Rpb259YF0odGl0bGVNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYm9ycm93KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6Ym9ycm93JywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfaG9sZCh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOmhvbGQnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF93aXNoKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6d2lzaGxpc3QnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9ub29rKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6bm9vaycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3JhdGluZyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOnJhdGluZycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX2hpc3RvcnkodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpoaXN0b3J5JywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfZG93bmxvYWQodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpkb3dubG9hZCcsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3ByZXZpZXcodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpwcmV2aWV3JywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfcmVuZXcodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpyZW5ldycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3JlcXVlc3RBZ2Fpbih0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOnJlcXVlc3RBZ2FpbicsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgc2V0Q29udGV4dFJvb20ocm9vbSkge1xuICAgICAgICBpZiAoXyhyb29tKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHQucm9vbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yb29tID0gcm9vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNldENvbnRleHRDb2xsZWN0aW9uKHRpdGxlQ29sbGVjdGlvbikge1xuICAgICAgICBpZiAoXyh0aXRsZUNvbGxlY3Rpb24pLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGV4dC50aXRsZUNvbGxlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQudGl0bGVDb2xsZWN0aW9uID0gdGl0bGVDb2xsZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuIiwiY2xhc3MgVGl0bGVTdGF0ZSB7XG4gICAgc3RhdGljIGdldFN0YXRlKG1lZGlhLCBwYXRyb25JdGVtcykge1xuICAgICAgICBjb25zdCBmZWF0dXJlTWFuYWdlciA9IHdpbmRvdy5mZWF0dXJlTWFuYWdlcjtcblxuICAgICAgICBpZiAoZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzYW1wbGVPbmx5TW9kZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3ByZXZpZXcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lZGlhSWQgPSBtZWRpYS5pZDtcblxuICAgICAgICBsZXQgaXNPbkhvbGQgPSBwYXRyb25JdGVtcyAmJiBwYXRyb25JdGVtcy5vbkhvbGRzLmluZGV4T2YobWVkaWFJZCkgPiAtMTtcbiAgICAgICAgbGV0IGlzT25DaGVja291dHMgPVxuICAgICAgICAgICAgcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25DaGVja291dHMuaW5kZXhPZihtZWRpYUlkKSA+IC0xO1xuICAgICAgICBsZXQgaXNBdmFpbGFibGUgPVxuICAgICAgICAgICAgbWVkaWEuaXNBdmFpbGFibGUgfHxcbiAgICAgICAgICAgIChmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiZcbiAgICAgICAgICAgICAgICBtZWRpYS5sdWNreURheUF2YWlsYWJsZUNvcGllcyA+IDApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIC9hY2NvdW50XFwvbG9hbnMvLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYpICYmXG4gICAgICAgICAgICBtZWRpYS5pc1JlbmV3YWJsZSAmJlxuICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjb250ZW50LWhvbGRzJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaXNPbkhvbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3JlcXVlc3RlZCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIG1lZGlhLmhvbGRzQ291bnQgPD0gMCAmJlxuICAgICAgICAgICAgICAgIG1lZGlhLm93bmVkQ29waWVzID49IDAgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiZcbiAgICAgICAgICAgICAgICAgICAgbWVkaWEuaXNMdWNreURheUNoZWNrb3V0XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyZW5ldyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ3JlcXVlc3RBZ2Fpbic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPbkNoZWNrb3V0cykge1xuICAgICAgICAgICAgcmV0dXJuICdib3Jyb3dlZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPbkhvbGQgJiYgIWlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29uSG9sZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIGlmIChtZWRpYS50eXBlLmlkID09PSAncGVyaW9kaWNhbHMnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdub29rJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICdib3Jyb3cnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lZGlhLmlzSG9sZGFibGUgJiYgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjb250ZW50LWhvbGRzJykpIHtcbiAgICAgICAgICAgIHJldHVybiAnaG9sZCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPbldpc2hsaXN0KG1lZGlhLCBwYXRyb25JdGVtcykge1xuICAgICAgICByZXR1cm4gcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25XaXNobGlzdC5pbmRleE9mKG1lZGlhLmlkKSA+IC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc09uUmVhZGluZ0hpc3RvcnkobWVkaWEsIHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwYXRyb25JdGVtcyAmJiBwYXRyb25JdGVtcy5vblJlYWRpbmdIaXN0b3J5LmluZGV4T2YobWVkaWEuaWQpID4gLTFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3RhclJhdGluZyhtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgLy8gUmV0dXJucyAwIGlmIG5vdCByYXRlZFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBhdHJvbkl0ZW1zICYmXG4gICAgICAgICAgICAgICAgcGF0cm9uSXRlbXMuc3RhclJhdGluZ3MgJiZcbiAgICAgICAgICAgICAgICBwYXRyb25JdGVtcy5zdGFyUmF0aW5nc1ttZWRpYS5pZF0pIHx8XG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZVN0YXRlO1xuIiwiLy8gRVM2IHZlcnNpb24gb2Ygc2V0dGxlXG5Qcm9taXNlLnNldHRsZSA9IGZ1bmN0aW9uKHByb21pc2VzKSB7XG4gICAgY2xhc3MgUHJvbWlzZUluc3BlY3Rpb24ge1xuICAgICAgICBjb25zdHJ1Y3RvcihmdWxmaWxsZWQsIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bGZpbGxlZCA9IGZ1bGZpbGxlZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcy5tYXAoKHApID0+XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBhbnkgdmFsdWVzIGFyZSB3cmFwcGVkIGluIGEgcHJvbWlzZVxuICAgICAgICBQcm9taXNlLnJlc29sdmUocCkudGhlbigodmFsKSA9PiBuZXcgUHJvbWlzZUluc3BlY3Rpb24odHJ1ZSwgdmFsKSkuY2F0Y2goKGVycikgPT4gbmV3IFByb21pc2VJbnNwZWN0aW9uKGZhbHNlLCBlcnIpKSkpO1xufTtcblxuLy8gd3JhcHBpbmcgUHJvbWlzZSBub3RhdGlvbiBhcm91bmQgYW4gYWpheCBjYWxsXG5Qcm9taXNlLmFqYXggPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICAgICQuYWpheChvcHRpb25zKVxuICAgICAgICAgICAgLmRvbmUoKHJlc3BvbnNlKSA9PiByZXNvbHZlKHJlc3BvbnNlKSlcbiAgICAgICAgICAgIC5mYWlsKCh4aHIsIHN0YXR1cywgZXJyKSA9PiByZWplY3QoZXJyKSlcbiAgICApO1xufTtcbiIsImltcG9ydCBIYXNoTWFuYWdlciBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbi9IYXNoTWFuYWdlcic7XG5pbXBvcnQgVGl0bGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGUnO1xuaW1wb3J0IFRpdGxlQWN0aW9ucyBmcm9tICcuLi8uLi90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKGNvbGxlY3Rpb24sIGJ1cywgbW9kZWwpIHtcbiAgICAgICAgbGV0IGhhc2ggPSBIYXNoTWFuYWdlci5nZXQoJ2FjdGlvbicpWzBdO1xuICAgICAgICB0aGlzLmFjdGlvbkFyciA9IGhhc2ggPyBoYXNoLnNwbGl0KCd+JykgOiBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSB0aGlzLmFjdGlvbkFyclswXSB8fCBudWxsO1xuICAgICAgICB0aGlzLm1lZGlhSWQgPSB0aGlzLmFjdGlvbkFyclsxXSB8fCBudWxsO1xuICAgICAgICB0aGlzLnJhdGluZyA9IHRoaXMuYWN0aW9uQXJyWzJdIHx8IDA7XG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbCB8fCBudWxsO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uLm1vZGVscztcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB1c2VyIGZvcndhcmRlZCBhY3Rpb25cbiAgICBleGVjdXRlQWN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuYWN0aW9uIHx8ICF0aGlzLm1lZGlhSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLm1vZGVsIHx8XG4gICAgICAgICAgICAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLmdldCgnaWQnKSAhPT0gdGhpcy5tZWRpYUlkKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBfLmZpbmQoXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgIChtb2RlbCkgPT4gbW9kZWwuaWQgPT09IHRoaXMubWVkaWFJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aXRsZUFjdGlvbnMgPSBuZXcgVGl0bGVBY3Rpb25zKHsgYnVzOiB0aGlzLmJ1cyB9KTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgLy8gVGl0bGUgbW9kZWwgaXMgb24gcGFnZVxuICAgICAgICAgICAgSGFzaE1hbmFnZXIucmVtb3ZlKCdhY3Rpb24nKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIHRoaXMucmF0aW5nKTtcbiAgICAgICAgICAgIHRpdGxlQWN0aW9ucy5wZXJmb3JtKHRoaXMuYWN0aW9uLCB0aGlzLm1vZGVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRpdGxlIG1vZGVsIGlzIG5vdCBvbiBwYWdlLCBmZXRjaCBhc3luY1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gbmV3IFRpdGxlKCk7XG4gICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aXRsZS5nZXRUaXRsZUFzeW5jKHRoaXMubWVkaWFJZCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5zZXQoJ3VzZXJTdGFyUmF0aW5nJywgdGhpcy5yYXRpbmcpO1xuICAgICAgICAgICAgICAgIHRpdGxlQWN0aW9ucy5wZXJmb3JtKHRoaXMuYWN0aW9uLCB0aXRsZSk7XG4gICAgICAgICAgICAgICAgSGFzaE1hbmFnZXIucmVtb3ZlKCdhY3Rpb24nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19"}