| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see multistore_header.bundle.js.LICENSE.txt */
(()=>{var t={57208:t=>{"use strict";t.exports=JSON.parse('{"base_url":"","routes":{"admin_common_notifications":{"tokens":[["text","/common/notifications"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_product_form":{"tokens":[["variable","/","\\\\d+","id"],["text","/sell/catalog/products"]],"defaults":[],"requirements":{"id":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_feature_get_feature_values":{"tokens":[["variable","/","\\\\d+","idFeature"],["text","/sell/catalog/products/features"]],"defaults":{"idFeature":0},"requirements":{"idFeature":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations":{"tokens":[["text","/combinations"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_ids":{"tokens":[["text","/combinations/ids"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_update_combination_from_listing":{"tokens":[["text","/update-combination-from-listing"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_combinations_edit_combination":{"tokens":[["text","/edit"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_products_combinations_remove_combination":{"tokens":[["text","/remove"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["DELETE"],"schemes":[]},"admin_products_attribute_groups":{"tokens":[["text","/attribute-groups"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_all_attribute_groups":{"tokens":[["text","/sell/catalog/products-v2/all-attribute-groups"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_generate":{"tokens":[["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2/generate-combinations"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_get_images":{"tokens":[["text","/images"],["variable","/","\\\\d+","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":{"productId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_v2_add_image":{"tokens":[["text","/sell/catalog/products-v2/images/add"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_update_image":{"tokens":[["text","/update"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_v2_delete_image":{"tokens":[["text","/delete"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_categories_get_categories_tree":{"tokens":[["text","/sell/catalog/categories/tree"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_cart_rules_search":{"tokens":[["text","/sell/catalog/cart-rules/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_customers_search":{"tokens":[["text","/sell/customers/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_carts":{"tokens":[["text","/carts"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_orders":{"tokens":[["text","/orders"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_addresses_create":{"tokens":[["text","/sell/addresses/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_addresses_edit":{"tokens":[["text","/edit"],["variable","/","\\\\d+","addressId"],["text","/sell/addresses"]],"defaults":[],"requirements":{"addressId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_order_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","orderId"],["text","/sell/addresses/order"]],"defaults":[],"requirements":{"orderId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_cart_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","cartId"],["text","/sell/addresses/cart"]],"defaults":[],"requirements":{"cartId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_carts_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_info":{"tokens":[["text","/info"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_create":{"tokens":[["text","/sell/orders/carts/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_addresses":{"tokens":[["text","/addresses"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_carrier":{"tokens":[["text","/carrier"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_currency":{"tokens":[["text","/currency"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_language":{"tokens":[["text","/language"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_set_delivery_settings":{"tokens":[["text","/rules/delivery-settings"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_cart_rule":{"tokens":[["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_cart_rule":{"tokens":[["text","/delete"],["variable","/","[^/]++","cartRuleId"],["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_price":{"tokens":[["text","/price"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_quantity":{"tokens":[["text","/quantity"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_product":{"tokens":[["text","/delete-product"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_place":{"tokens":[["text","/sell/orders/place"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_orders_duplicate_cart":{"tokens":[["text","/duplicate-cart"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_update_product":{"tokens":[["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_partial_refund":{"tokens":[["text","/partial-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_standard_refund":{"tokens":[["text","/standard-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_return_product":{"tokens":[["text","/return-product"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_send_process_order_email":{"tokens":[["text","/sell/orders/process-order-email"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_delete_product":{"tokens":[["text","/delete"],["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_get_discounts":{"tokens":[["text","/discounts"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_prices":{"tokens":[["text","/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_payments":{"tokens":[["text","/payments"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_products":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_invoices":{"tokens":[["text","/invoices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_documents":{"tokens":[["text","/documents"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_shipping":{"tokens":[["text","/shipping"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_cancellation":{"tokens":[["text","/cancellation"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_configure_product_pagination":{"tokens":[["text","/sell/orders/configure-product-pagination"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_product_prices":{"tokens":[["text","/products/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_products_search":{"tokens":[["text","/sell/orders/products/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_shops_search":{"tokens":[["variable","/","[^/]++","searchTerm"],["text","/configure/advanced/shops/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]}},"prefix":"","host":"localhost","port":"","scheme":"http","locale":[]}')},73481:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=o(n(88239)),i=o(n(99663)),s=o(n(22600));function o(t){return t&&t.__esModule?t:{default:t}}var a=function(){function t(e,n){var s=this;(0,i.default)(this,t),this.$searchInput=e,this.searchInputId=this.$searchInput.prop("id");var o=n||{};this.config=(0,r.default)({minLength:2,highlight:!0,cache:!1,hint:!1},o),this.dataSetConfig=(0,r.default)({display:"name",value:"id",limit:20,dataLimit:0,onSelect:function(t,e){return!0},onClose:function(t){}},o);var a={suggestion:function(t){var e=t;return"function"==typeof s.dataSetConfig.display?s.dataSetConfig.display(t):Object.prototype.hasOwnProperty.call(t,s.dataSetConfig.display)&&(e=t[s.dataSetConfig.display]),'<div class="px-2">'+e+"</div>"},pending:function(t){return'<div class="px-2">Searching for "'+t.query+'"</div>'},notFound:function(t){return'<div class="px-2">No results found for "'+t.query+'"</div>'}};Object.prototype.hasOwnProperty.call(o,"templates")?this.dataSetConfig.templates=(0,r.default)({},a,o.templates):this.dataSetConfig.templates=a,this.buildTypeahead()}return(0,s.default)(t,[{key:"buildTypeahead",value:function(){var t=this;this.$searchInput.typeahead(this.config,this.dataSetConfig).bind("typeahead:select",(function(e,n){return t.config.onSelect(n,e,t.$searchInput)})).bind("typeahead:close",(function(e){t.config.onClose(e,t.$searchInput)}))}}]),t}();e.default=a},41941:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={multistoreDropdown:{searchInput:".js-multistore-dropdown-search",scrollbar:".js-multistore-scrollbar"},multistoreHeader:{modal:".js-multishop-modal",headerButton:".js-header-multishop-open-modal",searchInput:".js-multishop-modal-search",jsScrollbar:".js-multishop-scrollbar",setContextUrl:function(t,e,n){var r="setShopContext="+e+"-"+n,i=new URL(t);return""===i.search?i.search="?"+r:i.search+="&"+r,i.toString()}}}},95778:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=l(n(52945)),i=l(n(99663)),s=l(n(22600)),o=l(n(2564)),a=l(n(57208));function l(t){return t&&t.__esModule?t:{default:t}}var c=window.$,u=function(){function t(){return(0,i.default)(this,t),window.prestashop&&window.prestashop.customRoutes&&(0,r.default)(a.default.routes,window.prestashop.customRoutes),o.default.setData(a.default),o.default.setBaseUrl(c(document).find("body").data("base-url")),this}return(0,s.default)(t,[{key:"generate",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,r.default)(e,{_token:c(document).find("body").data("token")});return o.default.generate(t,n)}}]),t}();e.default=u},52945:(t,e,n)=>{t.exports={default:n(56981),__esModule:!0}},32242:(t,e,n)=>{t.exports={default:n(33391),__esModule:!0}},99663:(t,e)=>{"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},22600:(t,e,n)=>{"use strict";e.__esModule=!0;var r,i=(r=n(32242))&&r.__esModule?r:{default:r};e.default=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,i.default)(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}()},88239:(t,e,n)=>{"use strict";e.__esModule=!0;var r,i=(r=n(52945))&&r.__esModule?r:{default:r};e.default=i.default||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}},56981:(t,e,n)=>{n(72699),t.exports=n(34579).Object.assign},33391:(t,e,n)=>{n(31477);var r=n(34579).Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},85663:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},12159:(t,e,n)=>{var r=n(36727);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},57428:(t,e,n)=>{var r=n(7932),i=n(78728),s=n(16531);t.exports=function(t){return function(e,n,o){var a,l=r(e),c=i(l.length),u=s(o,c);if(t&&n!=n){for(;c>u;)if((a=l[u++])!=a)return!0}else for(;c>u;u++)if((t||u in l)&&l[u]===n)return t||u||0;return!t&&-1}}},32894:t=>{var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},34579:t=>{var e=t.exports={version:"2.6.11"};"number"==typeof __e&&(__e=e)},19216:(t,e,n)=>{var r=n(85663);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},8333:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},89666:(t,e,n)=>{t.exports=!n(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(t,e,n)=>{var r=n(36727),i=n(33938).document,s=r(i)&&r(i.createElement);t.exports=function(t){return s?i.createElement(t):{}}},73338:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(t,e,n)=>{var r=n(33938),i=n(34579),s=n(19216),o=n(41818),a=n(27069),l=function(t,e,n){var c,u,h,d=t&l.F,f=t&l.G,p=t&l.S,m=t&l.P,g=t&l.B,v=t&l.W,b=f?i:i[e]||(i[e]={}),y=b.prototype,_=f?r:p?r[e]:(r[e]||{}).prototype;for(c in f&&(n=e),n)(u=!d&&_&&void 0!==_[c])&&a(b,c)||(h=u?_[c]:n[c],b[c]=f&&"function"!=typeof _[c]?n[c]:g&&u?s(h,r):v&&_[c]==h?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(h):m&&"function"==typeof h?s(Function.call,h):h,m&&((b.virtual||(b.virtual={}))[c]=h,t&l.R&&y&&!y[c]&&o(y,c,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,t.exports=l},7929:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},33938:t=>{var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},27069:t=>{var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},41818:(t,e,n)=>{var r=n(4743),i=n(83101);t.exports=n(89666)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},33758:(t,e,n)=>{t.exports=!n(89666)&&!n(7929)((function(){return 7!=Object.defineProperty(n(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(t,e,n)=>{var r=n(32894);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},36727:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},16227:t=>{t.exports=!0},88082:(t,e,n)=>{"use strict";var r=n(89666),i=n(46162),s=n(48195),o=n(86274),a=n(66530),l=n(50799),c=Object.assign;t.exports=!c||n(7929)((function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=c({},t)[n]||Object.keys(c({},e)).join("")!=r}))?function(t,e){for(var n=a(t),c=arguments.length,u=1,h=s.f,d=o.f;c>u;)for(var f,p=l(arguments[u++]),m=h?i(p).concat(h(p)):i(p),g=m.length,v=0;g>v;)f=m[v++],r&&!d.call(p,f)||(n[f]=p[f]);return n}:c},4743:(t,e,n)=>{var r=n(12159),i=n(33758),s=n(33206),o=Object.defineProperty;e.f=n(89666)?Object.defineProperty:function(t,e,n){if(r(t),e=s(e,!0),r(n),i)try{return o(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},48195:(t,e)=>{e.f=Object.getOwnPropertySymbols},12963:(t,e,n)=>{var r=n(27069),i=n(7932),s=n(57428)(!1),o=n(58989)("IE_PROTO");t.exports=function(t,e){var n,a=i(t),l=0,c=[];for(n in a)n!=o&&r(a,n)&&c.push(n);for(;e.length>l;)r(a,n=e[l++])&&(~s(c,n)||c.push(n));return c}},46162:(t,e,n)=>{var r=n(12963),i=n(73338);t.exports=Object.keys||function(t){return r(t,i)}},86274:(t,e)=>{e.f={}.propertyIsEnumerable},83101:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},58989:(t,e,n)=>{var r=n(20250)("keys"),i=n(65730);t.exports=function(t){return r[t]||(r[t]=i(t))}},20250:(t,e,n)=>{var r=n(34579),i=n(33938),s="__core-js_shared__",o=i[s]||(i[s]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},16531:(t,e,n)=>{var r=n(11052),i=Math.max,s=Math.min;t.exports=function(t,e){return(t=r(t))<0?i(t+e,0):s(t,e)}},11052:t=>{var e=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:e)(t)}},7932:(t,e,n)=>{var r=n(50799),i=n(8333);t.exports=function(t){return r(i(t))}},78728:(t,e,n)=>{var r=n(11052),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},66530:(t,e,n)=>{var r=n(8333);t.exports=function(t){return Object(r(t))}},33206:(t,e,n)=>{var r=n(36727);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},65730:t=>{var e=0,n=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+n).toString(36))}},72699:(t,e,n)=>{var r=n(83856);r(r.S+r.F,"Object",{assign:n(88082)})},31477:(t,e,n)=>{var r=n(83856);r(r.S+r.F*!n(89666),"Object",{defineProperty:n(4743).f})},2564:t=>{"use strict";var e=Object.assign||function(t){for(var e,n=1;n<arguments.length;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};t.exports=new function t(){var r=this;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),this.setRoutes=function(t){r.routesRouting=t||[]},this.getRoutes=function(){return r.routesRouting},this.setBaseUrl=function(t){r.contextRouting.base_url=t},this.getBaseUrl=function(){return r.contextRouting.base_url},this.setPrefix=function(t){r.contextRouting.prefix=t},this.setScheme=function(t){r.contextRouting.scheme=t},this.getScheme=function(){return r.contextRouting.scheme},this.setHost=function(t){r.contextRouting.host=t},this.getHost=function(){return r.contextRouting.host},this.buildQueryParams=function(t,e,i){var s=new RegExp(/\[]$/);e instanceof Array?e.forEach((function(e,o){s.test(t)?i(t,e):r.buildQueryParams(t+"["+("object"===(void 0===e?"undefined":n(e))?o:"")+"]",e,i)})):"object"===(void 0===e?"undefined":n(e))?Object.keys(e).forEach((function(n){return r.buildQueryParams(t+"["+n+"]",e[n],i)})):i(t,e)},this.getRoute=function(t){var e=r.contextRouting.prefix+t;if(r.routesRouting[e])return r.routesRouting[e];if(!r.routesRouting[t])throw new Error('The route "'+t+'" does not exist.');return r.routesRouting[t]},this.generate=function(t,n,i){var s=r.getRoute(t),o=n||{},a=e({},o),l="_scheme",c="",u=!0,h="";if((s.tokens||[]).forEach((function(e){if("text"===e[0])return c=e[1]+c,void(u=!1);if("variable"!==e[0])throw new Error('The token type "'+e[0]+'" is not supported.');var n=(s.defaults||{})[e[3]];if(0==u||!n||(o||{})[e[3]]&&o[e[3]]!==s.defaults[e[3]]){var r;if((o||{})[e[3]])r=o[e[3]],delete a[e[3]];else{if(!n){if(u)return;throw new Error('The route "'+t+'" requires the parameter "'+e[3]+'".')}r=s.defaults[e[3]]}if(!0!==r&&!1!==r&&""!==r||!u){var i=encodeURIComponent(r).replace(/%2F/g,"/");"null"===i&&null===r&&(i=""),c=e[1]+i+c}u=!1}else n&&delete a[e[3]]})),""==c&&(c="/"),(s.hosttokens||[]).forEach((function(t){var e;return"text"===t[0]?void(h=t[1]+h):void("variable"===t[0]&&((o||{})[t[3]]?(e=o[t[3]],delete a[t[3]]):s.defaults[t[3]]&&(e=s.defaults[t[3]]),h=t[1]+e+h))})),c=r.contextRouting.base_url+c,s.requirements[l]&&r.getScheme()!==s.requirements[l]?c=s.requirements[l]+"://"+(h||r.getHost())+c:h&&r.getHost()!==h?c=r.getScheme()+"://"+h+c:!0===i&&(c=r.getScheme()+"://"+r.getHost()+c),0<Object.keys(a).length){var d=[],f=function(t,e){var n=e;n=null===(n="function"==typeof n?n():n)?"":n,d.push(encodeURIComponent(t)+"="+encodeURIComponent(n))};Object.keys(a).forEach((function(t){return r.buildQueryParams(t,a[t],f)})),c=c+"?"+d.join("&").replace(/%20/g,"+")}return c},this.setData=function(t){r.setBaseUrl(t.base_url),r.setRoutes(t.routes),"prefix"in t&&r.setPrefix(t.prefix),r.setHost(t.host),r.setScheme(t.scheme)},this.contextRouting={base_url:"",prefix:"",host:"",scheme:""}}},43345:(t,e,n)=>{"use strict";n.r(e)},84772:(t,e,n)=>{"use strict";function r(t){return getComputedStyle(t)}function i(t,e){for(var n in e){var r=e[n];"number"==typeof r&&(r+="px"),t.style[n]=r}return t}function s(t){var e=document.createElement("div");return e.className=t,e}n.r(e),n.d(e,{default:()=>O});var o="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector);function a(t,e){if(!o)throw new Error("No element matching method supported");return o.call(t,e)}function l(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}function c(t,e){return Array.prototype.filter.call(t.children,(function(t){return a(t,e)}))}var u=function(t){return"ps__thumb-"+t},h=function(t){return"ps__rail-"+t},d="ps__child--consume",f="ps--focus",p="ps--clicking",m=function(t){return"ps--active-"+t},g=function(t){return"ps--scrolling-"+t},v={x:null,y:null};function b(t,e){var n=t.element.classList,r=g(e);n.contains(r)?clearTimeout(v[e]):n.add(r)}function y(t,e){v[e]=setTimeout((function(){return t.isAlive&&t.element.classList.remove(g(e))}),t.settings.scrollingThreshold)}var _=function(t){this.element=t,this.handlers={}},x={isEmpty:{configurable:!0}};_.prototype.bind=function(t,e){void 0===this.handlers[t]&&(this.handlers[t]=[]),this.handlers[t].push(e),this.element.addEventListener(t,e,!1)},_.prototype.unbind=function(t,e){var n=this;this.handlers[t]=this.handlers[t].filter((function(r){return!(!e||r===e)||(n.element.removeEventListener(t,r,!1),!1)}))},_.prototype.unbindAll=function(){for(var t in this.handlers)this.unbind(t)},x.isEmpty.get=function(){var t=this;return Object.keys(this.handlers).every((function(e){return 0===t.handlers[e].length}))},Object.defineProperties(_.prototype,x);var w=function(){this.eventElements=[]};function k(t){if("function"==typeof window.CustomEvent)return new CustomEvent(t);var e=document.createEvent("CustomEvent");return e.initCustomEvent(t,!1,!1,void 0),e}function S(t,e,n,r,i){var s;if(void 0===r&&(r=!0),void 0===i&&(i=!1),"top"===e)s=["contentHeight","containerHeight","scrollTop","y","up","down"];else{if("left"!==e)throw new Error("A proper axis should be provided");s=["contentWidth","containerWidth","scrollLeft","x","left","right"]}!function(t,e,n,r,i){var s=n[0],o=n[1],a=n[2],l=n[3],c=n[4],u=n[5];void 0===r&&(r=!0),void 0===i&&(i=!1);var h=t.element;t.reach[l]=null,h[a]<1&&(t.reach[l]="start"),h[a]>t[s]-t[o]-1&&(t.reach[l]="end"),e&&(h.dispatchEvent(k("ps-scroll-"+l)),e<0?h.dispatchEvent(k("ps-scroll-"+c)):e>0&&h.dispatchEvent(k("ps-scroll-"+u)),r&&function(t,e){b(t,e),y(t,e)}(t,l)),t.reach[l]&&(e||i)&&h.dispatchEvent(k("ps-"+l+"-reach-"+t.reach[l]))}(t,n,s,r,i)}function T(t){return parseInt(t,10)||0}w.prototype.eventElement=function(t){var e=this.eventElements.filter((function(e){return e.element===t}))[0];return e||(e=new _(t),this.eventElements.push(e)),e},w.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},w.prototype.unbind=function(t,e,n){var r=this.eventElement(t);r.unbind(e,n),r.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(r),1)},w.prototype.unbindAll=function(){this.eventElements.forEach((function(t){return t.unbindAll()})),this.eventElements=[]},w.prototype.once=function(t,e,n){var r=this.eventElement(t),i=function(t){r.unbind(e,i),n(t)};r.bind(e,i)};var I={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&window.navigator.maxTouchPoints>0||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:"undefined"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:"undefined"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)};function E(t){var e=t.element,n=Math.floor(e.scrollTop),r=e.getBoundingClientRect();t.containerWidth=Math.ceil(r.width),t.containerHeight=Math.ceil(r.height),t.contentWidth=e.scrollWidth,t.contentHeight=e.scrollHeight,e.contains(t.scrollbarXRail)||(c(e,h("x")).forEach((function(t){return l(t)})),e.appendChild(t.scrollbarXRail)),e.contains(t.scrollbarYRail)||(c(e,h("y")).forEach((function(t){return l(t)})),e.appendChild(t.scrollbarYRail)),!t.settings.suppressScrollX&&t.containerWidth+t.settings.scrollXMarginOffset<t.contentWidth?(t.scrollbarXActive=!0,t.railXWidth=t.containerWidth-t.railXMarginWidth,t.railXRatio=t.containerWidth/t.railXWidth,t.scrollbarXWidth=R(t,T(t.railXWidth*t.containerWidth/t.contentWidth)),t.scrollbarXLeft=T((t.negativeScrollAdjustment+e.scrollLeft)*(t.railXWidth-t.scrollbarXWidth)/(t.contentWidth-t.containerWidth))):t.scrollbarXActive=!1,!t.settings.suppressScrollY&&t.containerHeight+t.settings.scrollYMarginOffset<t.contentHeight?(t.scrollbarYActive=!0,t.railYHeight=t.containerHeight-t.railYMarginHeight,t.railYRatio=t.containerHeight/t.railYHeight,t.scrollbarYHeight=R(t,T(t.railYHeight*t.containerHeight/t.contentHeight)),t.scrollbarYTop=T(n*(t.railYHeight-t.scrollbarYHeight)/(t.contentHeight-t.containerHeight))):t.scrollbarYActive=!1,t.scrollbarXLeft>=t.railXWidth-t.scrollbarXWidth&&(t.scrollbarXLeft=t.railXWidth-t.scrollbarXWidth),t.scrollbarYTop>=t.railYHeight-t.scrollbarYHeight&&(t.scrollbarYTop=t.railYHeight-t.scrollbarYHeight),function(t,e){var n={width:e.railXWidth},r=Math.floor(t.scrollTop);e.isRtl?n.left=e.negativeScrollAdjustment+t.scrollLeft+e.containerWidth-e.contentWidth:n.left=t.scrollLeft,e.isScrollbarXUsingBottom?n.bottom=e.scrollbarXBottom-r:n.top=e.scrollbarXTop+r,i(e.scrollbarXRail,n);var s={top:r,height:e.railYHeight};e.isScrollbarYUsingRight?e.isRtl?s.right=e.contentWidth-(e.negativeScrollAdjustment+t.scrollLeft)-e.scrollbarYRight-e.scrollbarYOuterWidth-9:s.right=e.scrollbarYRight-t.scrollLeft:e.isRtl?s.left=e.negativeScrollAdjustment+t.scrollLeft+2*e.containerWidth-e.contentWidth-e.scrollbarYLeft-e.scrollbarYOuterWidth:s.left=e.scrollbarYLeft+t.scrollLeft,i(e.scrollbarYRail,s),i(e.scrollbarX,{left:e.scrollbarXLeft,width:e.scrollbarXWidth-e.railBorderXWidth}),i(e.scrollbarY,{top:e.scrollbarYTop,height:e.scrollbarYHeight-e.railBorderYWidth})}(e,t),t.scrollbarXActive?e.classList.add(m("x")):(e.classList.remove(m("x")),t.scrollbarXWidth=0,t.scrollbarXLeft=0,e.scrollLeft=!0===t.isRtl?t.contentWidth:0),t.scrollbarYActive?e.classList.add(m("y")):(e.classList.remove(m("y")),t.scrollbarYHeight=0,t.scrollbarYTop=0,e.scrollTop=0)}function R(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function q(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],h=t.element,d=null,f=null,m=null;function g(e){e.touches&&e.touches[0]&&(e[i]=e.touches[0].pageY),h[l]=d+m*(e[i]-f),b(t,c),E(t),e.stopPropagation(),e.preventDefault()}function v(){y(t,c),t[u].classList.remove(p),t.event.unbind(t.ownerDocument,"mousemove",g)}function _(e,o){d=h[l],o&&e.touches&&(e[i]=e.touches[0].pageY),f=e[i],m=(t[r]-t[n])/(t[s]-t[a]),o?t.event.bind(t.ownerDocument,"touchmove",g):(t.event.bind(t.ownerDocument,"mousemove",g),t.event.once(t.ownerDocument,"mouseup",v),e.preventDefault()),t[u].classList.add(p),e.stopPropagation()}t.event.bind(t[o],"mousedown",(function(t){_(t)})),t.event.bind(t[o],"touchstart",(function(t){_(t,!0)}))}var A={"click-rail":function(t){t.element,t.event.bind(t.scrollbarY,"mousedown",(function(t){return t.stopPropagation()})),t.event.bind(t.scrollbarYRail,"mousedown",(function(e){var n=e.pageY-window.pageYOffset-t.scrollbarYRail.getBoundingClientRect().top>t.scrollbarYTop?1:-1;t.element.scrollTop+=n*t.containerHeight,E(t),e.stopPropagation()})),t.event.bind(t.scrollbarX,"mousedown",(function(t){return t.stopPropagation()})),t.event.bind(t.scrollbarXRail,"mousedown",(function(e){var n=e.pageX-window.pageXOffset-t.scrollbarXRail.getBoundingClientRect().left>t.scrollbarXLeft?1:-1;t.element.scrollLeft+=n*t.containerWidth,E(t),e.stopPropagation()}))},"drag-thumb":function(t){q(t,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),q(t,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(t){var e=t.element;t.event.bind(t.ownerDocument,"keydown",(function(n){if(!(n.isDefaultPrevented&&n.isDefaultPrevented()||n.defaultPrevented)&&(a(e,":hover")||a(t.scrollbarX,":focus")||a(t.scrollbarY,":focus"))){var r,i=document.activeElement?document.activeElement:t.ownerDocument.activeElement;if(i){if("IFRAME"===i.tagName)i=i.contentDocument.activeElement;else for(;i.shadowRoot;)i=i.shadowRoot.activeElement;if(a(r=i,"input,[contenteditable]")||a(r,"select,[contenteditable]")||a(r,"textarea,[contenteditable]")||a(r,"button,[contenteditable]"))return}var s=0,o=0;switch(n.which){case 37:s=n.metaKey?-t.contentWidth:n.altKey?-t.containerWidth:-30;break;case 38:o=n.metaKey?t.contentHeight:n.altKey?t.containerHeight:30;break;case 39:s=n.metaKey?t.contentWidth:n.altKey?t.containerWidth:30;break;case 40:o=n.metaKey?-t.contentHeight:n.altKey?-t.containerHeight:-30;break;case 32:o=n.shiftKey?t.containerHeight:-t.containerHeight;break;case 33:o=t.containerHeight;break;case 34:o=-t.containerHeight;break;case 36:o=t.contentHeight;break;case 35:o=-t.contentHeight;break;default:return}t.settings.suppressScrollX&&0!==s||t.settings.suppressScrollY&&0!==o||(e.scrollTop-=o,e.scrollLeft+=s,E(t),function(n,r){var i=Math.floor(e.scrollTop);if(0===n){if(!t.scrollbarYActive)return!1;if(0===i&&r>0||i>=t.contentHeight-t.containerHeight&&r<0)return!t.settings.wheelPropagation}var s=e.scrollLeft;if(0===r){if(!t.scrollbarXActive)return!1;if(0===s&&n<0||s>=t.contentWidth-t.containerWidth&&n>0)return!t.settings.wheelPropagation}return!0}(s,o)&&n.preventDefault())}}))},wheel:function(t){var e=t.element;function n(n){var i=function(t){var e=t.deltaX,n=-1*t.deltaY;return void 0!==e&&void 0!==n||(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!=e&&n!=n&&(e=0,n=t.wheelDelta),t.shiftKey?[-n,-e]:[e,n]}(n),s=i[0],o=i[1];if(!function(t,n,i){if(!I.isWebKit&&e.querySelector("select:focus"))return!0;if(!e.contains(t))return!1;for(var s=t;s&&s!==e;){if(s.classList.contains(d))return!0;var o=r(s);if(i&&o.overflowY.match(/(scroll|auto)/)){var a=s.scrollHeight-s.clientHeight;if(a>0&&(s.scrollTop>0&&i<0||s.scrollTop<a&&i>0))return!0}if(n&&o.overflowX.match(/(scroll|auto)/)){var l=s.scrollWidth-s.clientWidth;if(l>0&&(s.scrollLeft>0&&n<0||s.scrollLeft<l&&n>0))return!0}s=s.parentNode}return!1}(n.target,s,o)){var a=!1;t.settings.useBothWheelAxes?t.scrollbarYActive&&!t.scrollbarXActive?(o?e.scrollTop-=o*t.settings.wheelSpeed:e.scrollTop+=s*t.settings.wheelSpeed,a=!0):t.scrollbarXActive&&!t.scrollbarYActive&&(s?e.scrollLeft+=s*t.settings.wheelSpeed:e.scrollLeft-=o*t.settings.wheelSpeed,a=!0):(e.scrollTop-=o*t.settings.wheelSpeed,e.scrollLeft+=s*t.settings.wheelSpeed),E(t),(a=a||function(n,r){var i=Math.floor(e.scrollTop),s=0===e.scrollTop,o=i+e.offsetHeight===e.scrollHeight,a=0===e.scrollLeft,l=e.scrollLeft+e.offsetWidth===e.scrollWidth;return!(Math.abs(r)>Math.abs(n)?s||o:a||l)||!t.settings.wheelPropagation}(s,o))&&!n.ctrlKey&&(n.stopPropagation(),n.preventDefault())}}void 0!==window.onwheel?t.event.bind(e,"wheel",n):void 0!==window.onmousewheel&&t.event.bind(e,"mousewheel",n)},touch:function(t){if(I.supportsTouch||I.supportsIePointer){var e=t.element,n={},i=0,s={},o=null;I.supportsTouch?(t.event.bind(e,"touchstart",u),t.event.bind(e,"touchmove",h),t.event.bind(e,"touchend",f)):I.supportsIePointer&&(window.PointerEvent?(t.event.bind(e,"pointerdown",u),t.event.bind(e,"pointermove",h),t.event.bind(e,"pointerup",f)):window.MSPointerEvent&&(t.event.bind(e,"MSPointerDown",u),t.event.bind(e,"MSPointerMove",h),t.event.bind(e,"MSPointerUp",f)))}function a(n,r){e.scrollTop-=r,e.scrollLeft-=n,E(t)}function l(t){return t.targetTouches?t.targetTouches[0]:t}function c(t){return!(t.pointerType&&"pen"===t.pointerType&&0===t.buttons||(!t.targetTouches||1!==t.targetTouches.length)&&(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE))}function u(t){if(c(t)){var e=l(t);n.pageX=e.pageX,n.pageY=e.pageY,i=(new Date).getTime(),null!==o&&clearInterval(o)}}function h(o){if(c(o)){var u=l(o),h={pageX:u.pageX,pageY:u.pageY},f=h.pageX-n.pageX,p=h.pageY-n.pageY;if(function(t,n,i){if(!e.contains(t))return!1;for(var s=t;s&&s!==e;){if(s.classList.contains(d))return!0;var o=r(s);if(i&&o.overflowY.match(/(scroll|auto)/)){var a=s.scrollHeight-s.clientHeight;if(a>0&&(s.scrollTop>0&&i<0||s.scrollTop<a&&i>0))return!0}if(n&&o.overflowX.match(/(scroll|auto)/)){var l=s.scrollWidth-s.clientWidth;if(l>0&&(s.scrollLeft>0&&n<0||s.scrollLeft<l&&n>0))return!0}s=s.parentNode}return!1}(o.target,f,p))return;a(f,p),n=h;var m=(new Date).getTime(),g=m-i;g>0&&(s.x=f/g,s.y=p/g,i=m),function(n,r){var i=Math.floor(e.scrollTop),s=e.scrollLeft,o=Math.abs(n),a=Math.abs(r);if(a>o){if(r<0&&i===t.contentHeight-t.containerHeight||r>0&&0===i)return 0===window.scrollY&&r>0&&I.isChrome}else if(o>a&&(n<0&&s===t.contentWidth-t.containerWidth||n>0&&0===s))return!0;return!0}(f,p)&&o.preventDefault()}}function f(){t.settings.swipeEasing&&(clearInterval(o),o=setInterval((function(){t.isInitialized?clearInterval(o):s.x||s.y?Math.abs(s.x)<.01&&Math.abs(s.y)<.01?clearInterval(o):(a(30*s.x,30*s.y),s.x*=.8,s.y*=.8):clearInterval(o)}),10))}}},C=function(t,e){var n=this;if(void 0===e&&(e={}),"string"==typeof t&&(t=document.querySelector(t)),!t||!t.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");for(var o in this.element=t,t.classList.add("ps"),this.settings={handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1},e)this.settings[o]=e[o];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var a,l,c=function(){return t.classList.add(f)},d=function(){return t.classList.remove(f)};this.isRtl="rtl"===r(t).direction,!0===this.isRtl&&t.classList.add("ps__rtl"),this.isNegativeScroll=(l=t.scrollLeft,t.scrollLeft=-1,a=t.scrollLeft<0,t.scrollLeft=l,a),this.negativeScrollAdjustment=this.isNegativeScroll?t.scrollWidth-t.clientWidth:0,this.event=new w,this.ownerDocument=t.ownerDocument||document,this.scrollbarXRail=s(h("x")),t.appendChild(this.scrollbarXRail),this.scrollbarX=s(u("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",c),this.event.bind(this.scrollbarX,"blur",d),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var p=r(this.scrollbarXRail);this.scrollbarXBottom=parseInt(p.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=T(p.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=T(p.borderLeftWidth)+T(p.borderRightWidth),i(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=T(p.marginLeft)+T(p.marginRight),i(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=s(h("y")),t.appendChild(this.scrollbarYRail),this.scrollbarY=s(u("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",c),this.event.bind(this.scrollbarY,"blur",d),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var m=r(this.scrollbarYRail);this.scrollbarYRight=parseInt(m.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=T(m.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?function(t){var e=r(t);return T(e.width)+T(e.paddingLeft)+T(e.paddingRight)+T(e.borderLeftWidth)+T(e.borderRightWidth)}(this.scrollbarY):null,this.railBorderYWidth=T(m.borderTopWidth)+T(m.borderBottomWidth),i(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=T(m.marginTop)+T(m.marginBottom),i(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:t.scrollLeft<=0?"start":t.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:t.scrollTop<=0?"start":t.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach((function(t){return A[t](n)})),this.lastScrollTop=Math.floor(t.scrollTop),this.lastScrollLeft=t.scrollLeft,this.event.bind(this.element,"scroll",(function(t){return n.onScroll(t)})),E(this)};C.prototype.update=function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,i(this.scrollbarXRail,{display:"block"}),i(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=T(r(this.scrollbarXRail).marginLeft)+T(r(this.scrollbarXRail).marginRight),this.railYMarginHeight=T(r(this.scrollbarYRail).marginTop)+T(r(this.scrollbarYRail).marginBottom),i(this.scrollbarXRail,{display:"none"}),i(this.scrollbarYRail,{display:"none"}),E(this),S(this,"top",0,!1,!0),S(this,"left",0,!1,!0),i(this.scrollbarXRail,{display:""}),i(this.scrollbarYRail,{display:""}))},C.prototype.onScroll=function(t){this.isAlive&&(E(this),S(this,"top",this.element.scrollTop-this.lastScrollTop),S(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},C.prototype.destroy=function(){this.isAlive&&(this.event.unbindAll(),l(this.scrollbarX),l(this.scrollbarY),l(this.scrollbarXRail),l(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},C.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter((function(t){return!t.match(/^ps([-_].+|)$/)})).join(" ")};const O=C},53943:function(t,e,n){var r,i,s;s=this,r=[n(73609)],void 0===(i=function(t){return s.Bloodhound=(e=t,n=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:e.isArray,isFunction:e.isFunction,isObject:e.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(t){return t instanceof e},toStr:function(t){return n.isUndefined(t)||null===t?"":t+""},bind:e.proxy,each:function(t,n){e.each(t,(function(t,e){return n(e,t)}))},map:e.map,filter:e.grep,every:function(t,n){var r=!0;return t?(e.each(t,(function(e,i){if(!(r=n.call(null,i,e,t)))return!1})),!!r):r},some:function(t,n){var r=!1;return t?(e.each(t,(function(e,i){if(r=n.call(null,i,e,t))return!1})),!!r):r},mixin:e.extend,identity:function(t){return t},clone:function(t){return e.extend(!0,{},t)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(t){return e.isFunction(t)?t:function(){return String(t)}},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var r,i;return function(){var s,o,a=this,l=arguments;return s=function(){r=null,n||(i=t.apply(a,l))},o=n&&!r,clearTimeout(r),r=setTimeout(s,e),o&&(i=t.apply(a,l)),i}},throttle:function(t,e){var n,r,i,s,o,a;return o=0,a=function(){o=new Date,i=null,s=t.apply(n,r)},function(){var l=new Date,c=e-(l-o);return n=this,r=arguments,c<=0?(clearTimeout(i),i=null,o=l,s=t.apply(n,r)):i||(i=setTimeout(a,c)),s}},stringify:function(t){return n.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),r="0.11.1",i=function(){"use strict";return{nonword:e,whitespace:t,obj:{nonword:r(e),whitespace:r(t)}};function t(t){return(t=n.toStr(t))?t.split(/\s+/):[]}function e(t){return(t=n.toStr(t))?t.split(/\W+/):[]}function r(t){return function(e){return e=n.isArray(e)?e:[].slice.call(arguments,0),function(r){var i=[];return n.each(e,(function(e){i=i.concat(t(n.toStr(r[e])))})),i}}}}(),o=function(){"use strict";function t(t){this.maxSize=n.isNumber(t)?t:100,this.reset(),this.maxSize<=0&&(this.set=this.get=e.noop)}function r(){this.head=this.tail=null}function i(t,e){this.key=t,this.val=e,this.prev=this.next=null}return n.mixin(t.prototype,{set:function(t,e){var n,r=this.list.tail;this.size>=this.maxSize&&(this.list.remove(r),delete this.hash[r.key],this.size--),(n=this.hash[t])?(n.val=e,this.list.moveToFront(n)):(n=new i(t,e),this.list.add(n),this.hash[t]=n,this.size++)},get:function(t){var e=this.hash[t];if(e)return this.list.moveToFront(e),e.val},reset:function(){this.size=0,this.hash={},this.list=new r}}),n.mixin(r.prototype,{add:function(t){this.head&&(t.next=this.head,this.head.prev=t),this.head=t,this.tail=this.tail||t},remove:function(t){t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev},moveToFront:function(t){this.remove(t),this.add(t)}}),t}(),a=function(){"use strict";var t;try{(t=window.localStorage).setItem("~~~","!"),t.removeItem("~~~")}catch(e){t=null}function r(e,r){this.prefix=["__",e,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+n.escapeRegExChars(this.prefix)),this.ls=r||t,!this.ls&&this._noop()}return n.mixin(r.prototype,{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=n.noop},_safeSet:function(t,e){try{this.ls.setItem(t,e)}catch(t){"QuotaExceededError"===t.name&&(this.clear(),this._noop())}},get:function(t){return this.isExpired(t)&&this.remove(t),o(this.ls.getItem(this._prefix(t)))},set:function(t,e,r){return n.isNumber(r)?this._safeSet(this._ttlKey(t),s(i()+r)):this.ls.removeItem(this._ttlKey(t)),this._safeSet(this._prefix(t),s(e))},remove:function(t){return this.ls.removeItem(this._ttlKey(t)),this.ls.removeItem(this._prefix(t)),this},clear:function(){var e,n=function(e){var n,r,i=[],s=t.length;for(n=0;n<s;n++)(r=t.key(n)).match(e)&&i.push(r.replace(e,""));return i}(this.keyMatcher);for(e=n.length;e--;)this.remove(n[e]);return this},isExpired:function(t){var e=o(this.ls.getItem(this._ttlKey(t)));return!!(n.isNumber(e)&&i()>e)}}),r;function i(){return(new Date).getTime()}function s(t){return JSON.stringify(n.isUndefined(t)?null:t)}function o(t){return e.parseJSON(t)}}(),l=function(){"use strict";var t=0,r={},i=6,s=new o(10);function a(t){t=t||{},this.cancelled=!1,this.lastReq=null,this._send=t.transport,this._get=t.limiter?t.limiter(this._get):this._get,this._cache=!1===t.cache?new o(0):s}return a.setMaxPendingRequests=function(t){i=t},a.resetCache=function(){s.reset()},n.mixin(a.prototype,{_fingerprint:function(t){return(t=t||{}).url+t.type+e.param(t.data||{})},_get:function(e,n){var s,o,a=this;function l(t){n(null,t),a._cache.set(s,t)}function c(){n(!0)}function u(){t--,delete r[s],a.onDeckRequestArgs&&(a._get.apply(a,a.onDeckRequestArgs),a.onDeckRequestArgs=null)}s=this._fingerprint(e),this.cancelled||s!==this.lastReq||((o=r[s])?o.done(l).fail(c):t<i?(t++,r[s]=this._send(e).done(l).fail(c).always(u)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(t,r){var i,s;r=r||e.noop,t=n.isString(t)?{url:t}:t||{},s=this._fingerprint(t),this.cancelled=!1,this.lastReq=s,(i=this._cache.get(s))?r(null,i):this._get(t,r)},cancel:function(){this.cancelled=!0}}),a}(),c=window.SearchIndex=function(){"use strict";function t(t){(t=t||{}).datumTokenizer&&t.queryTokenizer||e.error("datumTokenizer and queryTokenizer are both required"),this.identify=t.identify||n.stringify,this.datumTokenizer=t.datumTokenizer,this.queryTokenizer=t.queryTokenizer,this.reset()}return n.mixin(t.prototype,{bootstrap:function(t){this.datums=t.datums,this.trie=t.trie},add:function(t){var e=this;t=n.isArray(t)?t:[t],n.each(t,(function(t){var s,o;e.datums[s=e.identify(t)]=t,o=r(e.datumTokenizer(t)),n.each(o,(function(t){var n,r,o;for(n=e.trie,r=t.split("");o=r.shift();)(n=n.c[o]||(n.c[o]=i())).i.push(s)}))}))},get:function(t){var e=this;return n.map(t,(function(t){return e.datums[t]}))},search:function(t){var e,i,s=this;return e=r(this.queryTokenizer(t)),n.each(e,(function(t){var e,n,r,o;if(i&&0===i.length)return!1;for(e=s.trie,n=t.split("");e&&(r=n.shift());)e=e.c[r];if(!e||0!==n.length)return i=[],!1;o=e.i.slice(0),i=i?function(t,e){var n=0,r=0,i=[];t=t.sort(),e=e.sort();for(var s=t.length,o=e.length;n<s&&r<o;)t[n]<e[r]?n++:(t[n]>e[r]||(i.push(t[n]),n++),r++);return i}(i,o):o})),i?n.map(function(t){for(var e={},n=[],r=0,i=t.length;r<i;r++)e[t[r]]||(e[t[r]]=!0,n.push(t[r]));return n}(i),(function(t){return s.datums[t]})):[]},all:function(){var t=[];for(var e in this.datums)t.push(this.datums[e]);return t},reset:function(){this.datums={},this.trie=i()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),t;function r(t){return t=n.filter(t,(function(t){return!!t})),n.map(t,(function(t){return t.toLowerCase()}))}function i(){var t={i:[],c:{}};return t}}(),u=function(){"use strict";var t;function e(t){this.url=t.url,this.ttl=t.ttl,this.cache=t.cache,this.prepare=t.prepare,this.transform=t.transform,this.transport=t.transport,this.thumbprint=t.thumbprint,this.storage=new a(t.cacheKey)}return t={data:"data",protocol:"protocol",thumbprint:"thumbprint"},n.mixin(e.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(e){this.cache&&(this.storage.set(t.data,e,this.ttl),this.storage.set(t.protocol,location.protocol,this.ttl),this.storage.set(t.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var e,n={};return this.cache?(n.data=this.storage.get(t.data),n.protocol=this.storage.get(t.protocol),n.thumbprint=this.storage.get(t.thumbprint),e=n.thumbprint!==this.thumbprint||n.protocol!==location.protocol,n.data&&!e?n.data:null):null},fromNetwork:function(t){var e,n=this;t&&(e=this.prepare(this._settings()),this.transport(e).fail((function(){t(!0)})).done((function(e){t(null,n.transform(e))})))},clear:function(){return this.storage.clear(),this}}),e}(),h=function(){"use strict";function t(t){this.url=t.url,this.prepare=t.prepare,this.transform=t.transform,this.transport=new l({cache:t.cache,limiter:t.limiter,transport:t.transport})}return n.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(t,e){var n,r=this;if(e)return t=t||"",n=this.prepare(t,this._settings()),this.transport.get(n,(function(t,n){e(t?[]:r.transform(n))}))},cancelLastRequest:function(){this.transport.cancel()}}),t}(),d=function(){"use strict";return function(i){var s,o;return s={initialize:!0,identify:n.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null},!(i=n.mixin(s,i||{})).datumTokenizer&&e.error("datumTokenizer is required"),!i.queryTokenizer&&e.error("queryTokenizer is required"),o=i.sorter,i.sorter=o?function(t){return t.sort(o)}:n.identity,i.local=n.isFunction(i.local)?i.local():i.local,i.prefetch=function(i){var s;return i?(s={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:n.identity,transform:n.identity,transport:null},i=n.isString(i)?{url:i}:i,!(i=n.mixin(s,i)).url&&e.error("prefetch requires url to be set"),i.transform=i.filter||i.transform,i.cacheKey=i.cacheKey||i.url,i.thumbprint=r+i.thumbprint,i.transport=i.transport?t(i.transport):e.ajax,i):null}(i.prefetch),i.remote=function(r){var i;if(r)return i={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:n.identity,transport:null},r=n.isString(r)?{url:r}:r,!(r=n.mixin(i,r)).url&&e.error("remote requires url to be set"),r.transform=r.filter||r.transform,r.prepare=function(t){var e,n,r;return e=t.prepare,n=t.replace,r=t.wildcard,e||(n?i:t.wildcard?s:o);function i(t,e){return e.url=n(e.url,t),e}function s(t,e){return e.url=e.url.replace(r,encodeURIComponent(t)),e}function o(t,e){return e}}(r),r.limiter=function(t){var e,r,i;return e=t.limiter,r=t.rateLimitBy,i=t.rateLimitWait,e||(e=/^throttle$/i.test(r)?o(i):s(i)),e;function s(t){return function(e){return n.debounce(e,t)}}function o(t){return function(e){return n.throttle(e,t)}}}(r),r.transport=r.transport?t(r.transport):e.ajax,delete r.replace,delete r.wildcard,delete r.rateLimitBy,delete r.rateLimitWait,r}(i.remote),i};function t(t){return function(r){var i=e.Deferred();return t(r,(function(t){n.defer((function(){i.resolve(t)}))}),(function(t){n.defer((function(){i.reject(t)}))})),i}}}(),function(){"use strict";var t;function r(t){t=d(t),this.sorter=t.sorter,this.identify=t.identify,this.sufficient=t.sufficient,this.local=t.local,this.remote=t.remote?new h(t.remote):null,this.prefetch=t.prefetch?new u(t.prefetch):null,this.index=new c({identify:this.identify,datumTokenizer:t.datumTokenizer,queryTokenizer:t.queryTokenizer}),!1!==t.initialize&&this.initialize()}return t=window&&window.Bloodhound,r.noConflict=function(){return window&&(window.Bloodhound=t),r},r.tokenizers=i,n.mixin(r.prototype,{__ttAdapter:function(){var t=this;return this.remote?function(e,n,r){return t.search(e,n,r)}:function(e,n){return t.search(e,n)}},_loadPrefetch:function(){var t,n,r=this;return t=e.Deferred(),this.prefetch?(n=this.prefetch.fromCache())?(this.index.bootstrap(n),t.resolve()):this.prefetch.fromNetwork((function(e,n){if(e)return t.reject();r.add(n),r.prefetch.store(r.index.serialize()),t.resolve()})):t.resolve(),t.promise()},_initialize:function(){var t=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done((function(){t.add(t.local)})),this.initPromise},initialize:function(t){return!this.initPromise||t?this._initialize():this.initPromise},add:function(t){return this.index.add(t),this},get:function(t){return t=n.isArray(t)?t:[].slice.call(arguments),this.index.get(t)},search:function(t,e,r){var i,s=this;return i=this.sorter(this.index.search(t)),e(this.remote?i.slice():i),this.remote&&i.length<this.sufficient?this.remote.get(t,(function(t){var e=[];n.each(t,(function(t){!n.some(i,(function(e){return s.identify(t)===s.identify(e)}))&&e.push(t)})),r&&r(e)})):this.remote&&this.remote.cancelLastRequest(),this},all:function(){return this.index.all()},clear:function(){return this.index.reset(),this},clearPrefetchCache:function(){return this.prefetch&&this.prefetch.clear(),this},clearRemoteCache:function(){return l.resetCache(),this},ttAdapter:function(){return this.__ttAdapter()}}),r}());var e,n,r,i,o,a,l,c,u,h,d}.apply(e,r))||(t.exports=i),r=[n(73609)],void 0===(i=function(t){return e=t,n=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:e.isArray,isFunction:e.isFunction,isObject:e.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(t){return t instanceof e},toStr:function(t){return n.isUndefined(t)||null===t?"":t+""},bind:e.proxy,each:function(t,n){e.each(t,(function(t,e){return n(e,t)}))},map:e.map,filter:e.grep,every:function(t,n){var r=!0;return t?(e.each(t,(function(e,i){if(!(r=n.call(null,i,e,t)))return!1})),!!r):r},some:function(t,n){var r=!1;return t?(e.each(t,(function(e,i){if(r=n.call(null,i,e,t))return!1})),!!r):r},mixin:e.extend,identity:function(t){return t},clone:function(t){return e.extend(!0,{},t)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(t){return e.isFunction(t)?t:function(){return String(t)}},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var r,i;return function(){var s,o,a=this,l=arguments;return s=function(){r=null,n||(i=t.apply(a,l))},o=n&&!r,clearTimeout(r),r=setTimeout(s,e),o&&(i=t.apply(a,l)),i}},throttle:function(t,e){var n,r,i,s,o,a;return o=0,a=function(){o=new Date,i=null,s=t.apply(n,r)},function(){var l=new Date,c=e-(l-o);return n=this,r=arguments,c<=0?(clearTimeout(i),i=null,o=l,s=t.apply(n,r)):i||(i=setTimeout(a,c)),s}},stringify:function(t){return n.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),r=function(){"use strict";var t={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return function(r){var i,s;return s=n.mixin({},t,r),{css:(i={css:(a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}},n.isMsie()&&n.mixin(a.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),a),classes:s,html:(o=s,{wrapper:'<span class="'+o.wrapper+'"></span>',menu:'<div class="'+o.menu+'"></div>'}),selectors:e(s)}).css,html:i.html,classes:i.classes,selectors:i.selectors,mixin:function(t){n.mixin(t,i)}};var o;var a};function e(t){var e={};return n.each(t,(function(t,n){e[n]="."+t})),e}}(),i=function(){"use strict";var t;function r(t){t&&t.el||e.error("EventBus initialized without el"),this.$el=e(t.el)}return"typeahead:",t={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},n.mixin(r.prototype,{_trigger:function(t,n){var r;return r=e.Event("typeahead:"+t),(n=n||[]).unshift(r),this.$el.trigger.apply(this.$el,n),r},before:function(t){var e;return e=[].slice.call(arguments,1),this._trigger("before"+t,e).isDefaultPrevented()},trigger:function(e){var n;this._trigger(e,[].slice.call(arguments,1)),(n=t[e])&&this._trigger(n,[].slice.call(arguments,1))}}),r}(),s=function(){"use strict";var t=/\s+/,e=window.setImmediate?function(t){setImmediate((function(){t()}))}:function(t){setTimeout((function(){t()}),0)};return{onSync:function(t,e,r){return n.call(this,"sync",t,e,r)},onAsync:function(t,e,r){return n.call(this,"async",t,e,r)},off:function(e){var n;if(!this._callbacks)return this;for(e=e.split(t);n=e.shift();)delete this._callbacks[n];return this},trigger:function(n){var i,s,o,a,l;if(!this._callbacks)return this;for(n=n.split(t),o=[].slice.call(arguments,1);(i=n.shift())&&(s=this._callbacks[i]);)a=r(s.sync,this,[i].concat(o)),l=r(s.async,this,[i].concat(o)),a()&&e(l);return this}};function n(e,n,r,i){var s;if(!r)return this;for(n=n.split(t),r=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(r,i):r,this._callbacks=this._callbacks||{};s=n.shift();)this._callbacks[s]=this._callbacks[s]||{sync:[],async:[]},this._callbacks[s][e].push(r);return this}function r(t,e,n){return function(){for(var r,i=0,s=t.length;!r&&i<s;i+=1)r=!1===t[i].apply(e,n);return!r}}}(),o=function(t){"use strict";var e={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(r){var i;(r=n.mixin({},e,r)).node&&r.pattern&&(r.pattern=n.isArray(r.pattern)?r.pattern:[r.pattern],i=function(t,e,r){for(var i,s=[],o=0,a=t.length;o<a;o++)s.push(n.escapeRegExChars(t[o]));return i=r?"\\b("+s.join("|")+")\\b":"("+s.join("|")+")",e?new RegExp(i):new RegExp(i,"i")}(r.pattern,r.caseSensitive,r.wordsOnly),function t(e,n){for(var r,i=0;i<e.childNodes.length;i++)3===(r=e.childNodes[i]).nodeType?i+=n(r)?1:0:t(r,n)}(r.node,(function(e){var n,s,o;return(n=i.exec(e.data))&&(o=t.createElement(r.tagName),r.className&&(o.className=r.className),(s=e.splitText(n.index)).splitText(n[0].length),o.appendChild(s.cloneNode(!0)),e.parentNode.replaceChild(o,s)),!!n})))}}(window.document),a=function(){"use strict";var t;function r(t,r){var i;(t=t||{}).input||e.error("input is missing"),r.mixin(this),this.$hint=e(t.hint),this.$input=e(t.input),this.query=this.$input.val(),this.queryWhenFocused=this.hasFocus()?this.query:null,this.$overflowHelper=(i=this.$input,e('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:i.css("font-family"),fontSize:i.css("font-size"),fontStyle:i.css("font-style"),fontVariant:i.css("font-variant"),fontWeight:i.css("font-weight"),wordSpacing:i.css("word-spacing"),letterSpacing:i.css("letter-spacing"),textIndent:i.css("text-indent"),textRendering:i.css("text-rendering"),textTransform:i.css("text-transform")}).insertAfter(i)),this._checkLanguageDirection(),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=n.noop)}return t={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},r.normalizeQuery=function(t){return n.toStr(t).replace(/^\s*/g,"").replace(/\s{2,}/g," ")},n.mixin(r.prototype,s,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.queryWhenFocused=this.query,this.trigger("focused")},_onKeydown:function(e){var n=t[e.which||e.keyCode];this._managePreventDefault(n,e),n&&this._shouldTrigger(n,e)&&this.trigger(n+"Keyed",e)},_onInput:function(){this._setQuery(this.getInputValue()),this.clearHintIfInvalid(),this._checkLanguageDirection()},_managePreventDefault:function(t,e){var n;switch(t){case"up":case"down":n=!i(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!i(e);break;default:n=!0}return n},_checkLanguageDirection:function(){var t=(this.$input.css("direction")||"ltr").toLowerCase();this.dir!==t&&(this.dir=t,this.$hint.attr("dir",t),this.trigger("langDirChanged",t))},_setQuery:function(t,e){var n,i,s,o;s=t,o=this.query,i=!!(n=r.normalizeQuery(s)===r.normalizeQuery(o))&&this.query.length!==t.length,this.query=t,e||n?!e&&i&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},bind:function(){var e,r,i,s,o=this;return e=n.bind(this._onBlur,this),r=n.bind(this._onFocus,this),i=n.bind(this._onKeydown,this),s=n.bind(this._onInput,this),this.$input.on("blur.tt",e).on("focus.tt",r).on("keydown.tt",i),!n.isMsie()||n.isMsie()>9?this.$input.on("input.tt",s):this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",(function(e){t[e.which||e.keyCode]||n.defer(n.bind(o._onInput,o,e))})),this},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getLangDir:function(){return this.dir},getQuery:function(){return this.query||""},setQuery:function(t,e){this.setInputValue(t),this._setQuery(t,e)},hasQueryChangedSinceLastFocus:function(){return this.query!==this.queryWhenFocused},getInputValue:function(){return this.$input.val()},setInputValue:function(t){this.$input.val(t),this.clearHintIfInvalid(),this._checkLanguageDirection()},resetInputValue:function(){this.setInputValue(this.query)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),(""===t||!n||this.hasOverflow())&&this.clearHint()},hasFocus:function(){return this.$input.is(":focus")},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,r;return t=this.$input.val().length,e=this.$input[0].selectionStart,n.isNumber(e)?e===t:!document.selection||((r=document.selection.createRange()).moveStart("character",-t),t===r.text.length)},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$overflowHelper.remove(),this.$hint=this.$input=this.$overflowHelper=e("<div>")}}),r;function i(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}}(),l=function(){"use strict";var t,r;function i(t,i){var s;(t=t||{}).templates=t.templates||{},t.templates.notFound=t.templates.notFound||t.templates.empty,t.source||e.error("missing source"),t.node||e.error("missing node"),t.name&&(s=t.name,!/^[_a-zA-Z0-9-]+$/.test(s))&&e.error("invalid dataset name: "+t.name),i.mixin(this),this.highlight=!!t.highlight,this.name=t.name||r(),this.limit=t.limit||5,this.displayFn=function(t){return t=t||n.stringify,n.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.templates=function(t,r){return{notFound:t.notFound&&n.templatify(t.notFound),pending:t.pending&&n.templatify(t.pending),header:t.header&&n.templatify(t.header),footer:t.footer&&n.templatify(t.footer),suggestion:t.suggestion||i};function i(t){return e("<div>").text(r(t))}}(t.templates,this.displayFn),this.source=t.source.__ttAdapter?t.source.__ttAdapter():t.source,this.async=n.isUndefined(t.async)?this.source.length>2:!!t.async,this._resetLastSuggestion(),this.$el=e(t.node).addClass(this.classes.dataset).addClass(this.classes.dataset+"-"+this.name)}return t={val:"tt-selectable-display",obj:"tt-selectable-object"},r=n.getIdGenerator(),i.extractData=function(n){var r=e(n);return r.data(t.obj)?{val:r.data(t.val)||"",obj:r.data(t.obj)||null}:null},n.mixin(i.prototype,s,{_overwrite:function(t,e){(e=e||[]).length?this._renderSuggestions(t,e):this.async&&this.templates.pending?this._renderPending(t):!this.async&&this.templates.notFound?this._renderNotFound(t):this._empty(),this.trigger("rendered",this.name,e,!1)},_append:function(t,e){(e=e||[]).length&&this.$lastSuggestion.length?this._appendSuggestions(t,e):e.length?this._renderSuggestions(t,e):!this.$lastSuggestion.length&&this.templates.notFound&&this._renderNotFound(t),this.trigger("rendered",this.name,e,!0)},_renderSuggestions:function(t,e){var n;n=this._getSuggestionsFragment(t,e),this.$lastSuggestion=n.children().last(),this.$el.html(n).prepend(this._getHeader(t,e)).append(this._getFooter(t,e))},_appendSuggestions:function(t,e){var n,r;r=(n=this._getSuggestionsFragment(t,e)).children().last(),this.$lastSuggestion.after(n),this.$lastSuggestion=r},_renderPending:function(t){var e=this.templates.pending;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_renderNotFound:function(t){var e=this.templates.notFound;this._resetLastSuggestion(),e&&this.$el.html(e({query:t,dataset:this.name}))},_empty:function(){this.$el.empty(),this._resetLastSuggestion()},_getSuggestionsFragment:function(r,i){var s,a=this;return s=document.createDocumentFragment(),n.each(i,(function(n){var i,o;o=a._injectQuery(r,n),i=e(a.templates.suggestion(o)).data(t.obj,n).data(t.val,a.displayFn(n)).addClass(a.classes.suggestion+" "+a.classes.selectable),s.appendChild(i[0])})),this.highlight&&o({className:this.classes.highlight,node:s,pattern:r}),e(s)},_getFooter:function(t,e){return this.templates.footer?this.templates.footer({query:t,suggestions:e,dataset:this.name}):null},_getHeader:function(t,e){return this.templates.header?this.templates.header({query:t,suggestions:e,dataset:this.name}):null},_resetLastSuggestion:function(){this.$lastSuggestion=e()},_injectQuery:function(t,e){return n.isObject(e)?n.mixin({_query:t},e):e},update:function(t){var n=this,r=!1,i=!1,s=0;function o(e){i||(i=!0,e=(e||[]).slice(0,n.limit),s=e.length,n._overwrite(t,e),s<n.limit&&n.async&&n.trigger("asyncRequested",t))}this.cancel(),this.cancel=function(){r=!0,n.cancel=e.noop,n.async&&n.trigger("asyncCanceled",t)},this.source(t,o,(function(i){i=i||[],!r&&s<n.limit&&(n.cancel=e.noop,s+=i.length,n._append(t,i.slice(0,n.limit-s)),n.async&&n.trigger("asyncReceived",t))})),!i&&o([])},cancel:e.noop,clear:function(){this._empty(),this.cancel(),this.trigger("cleared")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=e("<div>")}}),i}(),c=function(){"use strict";function t(t,r){var i=this;(t=t||{}).node||e.error("node is required"),r.mixin(this),this.$node=e(t.node),this.query=null,this.datasets=n.map(t.datasets,(function(t){var n=i.$node.find(t.node).first();return t.node=n.length?n:e("<div>").appendTo(i.$node),new l(t,r)}))}return n.mixin(t.prototype,s,{_onSelectableClick:function(t){this.trigger("selectableClicked",e(t.currentTarget))},_onRendered:function(t,e,n,r){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetRendered",e,n,r)},_onCleared:function(){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetCleared")},_propagate:function(){this.trigger.apply(this,arguments)},_allDatasetsEmpty:function(){return n.every(this.datasets,(function(t){return t.isEmpty()}))},_getSelectables:function(){return this.$node.find(this.selectors.selectable)},_removeCursor:function(){var t=this.getActiveSelectable();t&&t.removeClass(this.classes.cursor)},_ensureVisible:function(t){var e,n,r,i;n=(e=t.position().top)+t.outerHeight(!0),r=this.$node.scrollTop(),i=this.$node.height()+parseInt(this.$node.css("paddingTop"),10)+parseInt(this.$node.css("paddingBottom"),10),e<0?this.$node.scrollTop(r+e):i<n&&this.$node.scrollTop(r+(n-i))},bind:function(){var t,e=this;return t=n.bind(this._onSelectableClick,this),this.$node.on("click.tt",this.selectors.selectable,t),n.each(this.datasets,(function(t){t.onSync("asyncRequested",e._propagate,e).onSync("asyncCanceled",e._propagate,e).onSync("asyncReceived",e._propagate,e).onSync("rendered",e._onRendered,e).onSync("cleared",e._onCleared,e)})),this},isOpen:function(){return this.$node.hasClass(this.classes.open)},open:function(){this.$node.addClass(this.classes.open)},close:function(){this.$node.removeClass(this.classes.open),this._removeCursor()},setLanguageDirection:function(t){this.$node.attr("dir",t)},selectableRelativeToCursor:function(t){var e,n,r;return n=this.getActiveSelectable(),e=this._getSelectables(),-1===(r=(r=((r=(n?e.index(n):-1)+t)+1)%(e.length+1)-1)<-1?e.length-1:r)?null:e.eq(r)},setCursor:function(t){this._removeCursor(),(t=t&&t.first())&&(t.addClass(this.classes.cursor),this._ensureVisible(t))},getSelectableData:function(t){return t&&t.length?l.extractData(t):null},getActiveSelectable:function(){var t=this._getSelectables().filter(this.selectors.cursor).first();return t.length?t:null},getTopSelectable:function(){var t=this._getSelectables().first();return t.length?t:null},update:function(t){var e=t!==this.query;return e&&(this.query=t,n.each(this.datasets,(function(e){e.update(t)}))),e},empty:function(){n.each(this.datasets,(function(t){t.clear()})),this.query=null,this.$node.addClass(this.classes.empty)},destroy:function(){this.$node.off(".tt"),this.$node=e("<div>"),n.each(this.datasets,(function(t){t.destroy()}))}}),t}(),u=function(){"use strict";var t=c.prototype;function e(){c.apply(this,[].slice.call(arguments,0))}return n.mixin(e.prototype,c.prototype,{open:function(){return!this._allDatasetsEmpty()&&this._show(),t.open.apply(this,[].slice.call(arguments,0))},close:function(){return this._hide(),t.close.apply(this,[].slice.call(arguments,0))},_onRendered:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),t._onRendered.apply(this,[].slice.call(arguments,0))},_onCleared:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),t._onCleared.apply(this,[].slice.call(arguments,0))},setLanguageDirection:function(e){return this.$node.css("ltr"===e?this.css.ltr:this.css.rtl),t.setLanguageDirection.apply(this,[].slice.call(arguments,0))},_hide:function(){this.$node.hide()},_show:function(){this.$node.css("display","block")}}),e}(),h=function(){"use strict";function t(t,i){var s,o,a,l,c,u,h,d,f,p,m;(t=t||{}).input||e.error("missing input"),t.menu||e.error("missing menu"),t.eventBus||e.error("missing event bus"),i.mixin(this),this.eventBus=t.eventBus,this.minLength=n.isNumber(t.minLength)?t.minLength:1,this.input=t.input,this.menu=t.menu,this.enabled=!0,this.active=!1,this.input.hasFocus()&&this.activate(),this.dir=this.input.getLangDir(),this._hacks(),this.menu.bind().onSync("selectableClicked",this._onSelectableClicked,this).onSync("asyncRequested",this._onAsyncRequested,this).onSync("asyncCanceled",this._onAsyncCanceled,this).onSync("asyncReceived",this._onAsyncReceived,this).onSync("datasetRendered",this._onDatasetRendered,this).onSync("datasetCleared",this._onDatasetCleared,this),s=r(this,"activate","open","_onFocused"),o=r(this,"deactivate","_onBlurred"),a=r(this,"isActive","isOpen","_onEnterKeyed"),l=r(this,"isActive","isOpen","_onTabKeyed"),c=r(this,"isActive","_onEscKeyed"),u=r(this,"isActive","open","_onUpKeyed"),h=r(this,"isActive","open","_onDownKeyed"),d=r(this,"isActive","isOpen","_onLeftKeyed"),f=r(this,"isActive","isOpen","_onRightKeyed"),p=r(this,"_openIfActive","_onQueryChanged"),m=r(this,"_openIfActive","_onWhitespaceChanged"),this.input.bind().onSync("focused",s,this).onSync("blurred",o,this).onSync("enterKeyed",a,this).onSync("tabKeyed",l,this).onSync("escKeyed",c,this).onSync("upKeyed",u,this).onSync("downKeyed",h,this).onSync("leftKeyed",d,this).onSync("rightKeyed",f,this).onSync("queryChanged",p,this).onSync("whitespaceChanged",m,this).onSync("langDirChanged",this._onLangDirChanged,this)}return n.mixin(t.prototype,{_hacks:function(){var t,r;t=this.input.$input||e("<div>"),r=this.menu.$node||e("<div>"),t.on("blur.tt",(function(e){var i,s,o;i=document.activeElement,s=r.is(i),o=r.has(i).length>0,n.isMsie()&&(s||o)&&(e.preventDefault(),e.stopImmediatePropagation(),n.defer((function(){t.focus()})))})),r.on("mousedown.tt",(function(t){t.preventDefault()}))},_onSelectableClicked:function(t,e){this.select(e)},_onDatasetCleared:function(){this._updateHint()},_onDatasetRendered:function(t,e,n,r){this._updateHint(),this.eventBus.trigger("render",n,r,e)},_onAsyncRequested:function(t,e,n){this.eventBus.trigger("asyncrequest",n,e)},_onAsyncCanceled:function(t,e,n){this.eventBus.trigger("asynccancel",n,e)},_onAsyncReceived:function(t,e,n){this.eventBus.trigger("asyncreceive",n,e)},_onFocused:function(){this._minLengthMet()&&this.menu.update(this.input.getQuery())},_onBlurred:function(){this.input.hasQueryChangedSinceLastFocus()&&this.eventBus.trigger("change",this.input.getQuery())},_onEnterKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())&&this.select(n)&&e.preventDefault()},_onTabKeyed:function(t,e){var n;(n=this.menu.getActiveSelectable())?this.select(n)&&e.preventDefault():(n=this.menu.getTopSelectable())&&this.autocomplete(n)&&e.preventDefault()},_onEscKeyed:function(){this.close()},_onUpKeyed:function(){this.moveCursor(-1)},_onDownKeyed:function(){this.moveCursor(1)},_onLeftKeyed:function(){"rtl"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onRightKeyed:function(){"ltr"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onQueryChanged:function(t,e){this._minLengthMet(e)?this.menu.update(e):this.menu.empty()},_onWhitespaceChanged:function(){this._updateHint()},_onLangDirChanged:function(t,e){this.dir!==e&&(this.dir=e,this.menu.setLanguageDirection(e))},_openIfActive:function(){this.isActive()&&this.open()},_minLengthMet:function(t){return(t=n.isString(t)?t:this.input.getQuery()||"").length>=this.minLength},_updateHint:function(){var t,e,r,i,s,o;t=this.menu.getTopSelectable(),e=this.menu.getSelectableData(t),r=this.input.getInputValue(),!e||n.isBlankString(r)||this.input.hasOverflow()?this.input.clearHint():(i=a.normalizeQuery(r),s=n.escapeRegExChars(i),(o=new RegExp("^(?:"+s+")(.+$)","i").exec(e.val))&&this.input.setHint(r+o[1]))},isEnabled:function(){return this.enabled},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},isActive:function(){return this.active},activate:function(){return!!this.isActive()||!(!this.isEnabled()||this.eventBus.before("active"))&&(this.active=!0,this.eventBus.trigger("active"),!0)},deactivate:function(){return!this.isActive()||!this.eventBus.before("idle")&&(this.active=!1,this.close(),this.eventBus.trigger("idle"),!0)},isOpen:function(){return this.menu.isOpen()},open:function(){return this.isOpen()||this.eventBus.before("open")||(this.menu.open(),this._updateHint(),this.eventBus.trigger("open")),this.isOpen()},close:function(){return this.isOpen()&&!this.eventBus.before("close")&&(this.menu.close(),this.input.clearHint(),this.input.resetInputValue(),this.eventBus.trigger("close")),!this.isOpen()},setVal:function(t){this.input.setQuery(n.toStr(t))},getVal:function(){return this.input.getQuery()},select:function(t){var e=this.menu.getSelectableData(t);return!(!e||this.eventBus.before("select",e.obj)||(this.input.setQuery(e.val,!0),this.eventBus.trigger("select",e.obj),this.close(),0))},autocomplete:function(t){var e,n;return e=this.input.getQuery(),!(!(n=this.menu.getSelectableData(t))||e===n.val||this.eventBus.before("autocomplete",n.obj)||(this.input.setQuery(n.val),this.eventBus.trigger("autocomplete",n.obj),0))},moveCursor:function(t){var e,n,r,i;return e=this.input.getQuery(),n=this.menu.selectableRelativeToCursor(t),i=(r=this.menu.getSelectableData(n))?r.obj:null,!(this._minLengthMet()&&this.menu.update(e)||this.eventBus.before("cursorchange",i)||(this.menu.setCursor(n),r?this.input.setInputValue(r.val):(this.input.resetInputValue(),this._updateHint()),this.eventBus.trigger("cursorchange",i),0))},destroy:function(){this.input.destroy(),this.menu.destroy()}}),t;function r(t){var e=[].slice.call(arguments,1);return function(){var r=[].slice.call(arguments);n.each(e,(function(e){return t[e].apply(t,r)}))}}}(),void function(){"use strict";var t,s,o;function l(t,n){t.each((function(){var t,r=e(this);(t=r.data(s.typeahead))&&n(t,r)}))}function d(t,e){return t.clone().addClass(e.classes.hint).removeData().css(e.css.hint).css((n=t,{backgroundAttachment:n.css("background-attachment"),backgroundClip:n.css("background-clip"),backgroundColor:n.css("background-color"),backgroundImage:n.css("background-image"),backgroundOrigin:n.css("background-origin"),backgroundPosition:n.css("background-position"),backgroundRepeat:n.css("background-repeat"),backgroundSize:n.css("background-size")})).prop("readonly",!0).removeAttr("id name placeholder required").attr({autocomplete:"off",spellcheck:"false",tabindex:-1});var n}function f(t,e){t.data(s.attrs,{dir:t.attr("dir"),autocomplete:t.attr("autocomplete"),spellcheck:t.attr("spellcheck"),style:t.attr("style")}),t.addClass(e.classes.input).attr({autocomplete:"off",spellcheck:!1});try{!t.attr("dir")&&t.attr("dir","auto")}catch(t){}return t}function p(t){var r;return(r=n.isJQuery(t)||n.isElement(t)?e(t).first():[]).length?r:null}t=e.fn.typeahead,s={www:"tt-www",attrs:"tt-attrs",typeahead:"tt-typeahead"},o={initialize:function(t,o){var l;return o=n.isArray(o)?o:[].slice.call(arguments,1),l=r((t=t||{}).classNames),this.each(m);function m(){var r,m,g,v,b,y,_,x,w,k,S;n.each(o,(function(e){e.highlight=!!t.highlight})),r=e(this),m=e(l.html.wrapper),g=p(t.hint),v=p(t.menu),b=!1!==t.hint&&!g,y=!1!==t.menu&&!v,b&&(g=d(r,l)),y&&(v=e(l.html.menu).css(l.css.menu)),g&&g.val(""),r=f(r,l),(b||y)&&(m.css(l.css.wrapper),r.css(b?l.css.input:l.css.inputWithNoHint),r.wrap(m).parent().prepend(b?g:null).append(y?v:null)),S=y?u:c,_=new i({el:r}),x=new a({hint:g,input:r},l),w=new S({node:v,datasets:o},l),k=new h({input:x,menu:w,eventBus:_,minLength:t.minLength},l),r.data(s.www,l),r.data(s.typeahead,k)}},isEnabled:function(){var t;return l(this.first(),(function(e){t=e.isEnabled()})),t},enable:function(){return l(this,(function(t){t.enable()})),this},disable:function(){return l(this,(function(t){t.disable()})),this},isActive:function(){var t;return l(this.first(),(function(e){t=e.isActive()})),t},activate:function(){return l(this,(function(t){t.activate()})),this},deactivate:function(){return l(this,(function(t){t.deactivate()})),this},isOpen:function(){var t;return l(this.first(),(function(e){t=e.isOpen()})),t},open:function(){return l(this,(function(t){t.open()})),this},close:function(){return l(this,(function(t){t.close()})),this},select:function(t){var n=!1,r=e(t);return l(this.first(),(function(t){n=t.select(r)})),n},autocomplete:function(t){var n=!1,r=e(t);return l(this.first(),(function(t){n=t.autocomplete(r)})),n},moveCursor:function(t){var e=!1;return l(this.first(),(function(n){e=n.moveCursor(t)})),e},val:function(t){var e;return arguments.length?(l(this,(function(e){e.setVal(t)})),this):(l(this.first(),(function(t){e=t.getVal()})),e)},destroy:function(){return l(this,(function(t,e){(function(t){var e,r;e=t.data(s.www),r=t.parent().filter(e.selectors.wrapper),n.each(t.data(s.attrs),(function(e,r){n.isUndefined(e)?t.removeAttr(r):t.attr(r,e)})),t.removeData(s.typeahead).removeData(s.www).removeData(s.attr).removeClass(e.classes.input),r.length&&(t.detach().insertAfter(r),r.remove())})(e),t.destroy()})),this}},e.fn.typeahead=function(t){return o[t]?o[t].apply(this,[].slice.call(arguments,1)):o.initialize.apply(this,arguments)},e.fn.typeahead.noConflict=function(){return e.fn.typeahead=t,this}}();var e,n,r,i,s,o,a,l,c,u,h}.apply(e,r))||(t.exports=i)},73609:t=>{"use strict";t.exports=window.jQuery}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var s=e[r]={exports:{}};return t[r].call(s.exports,s,s.exports,n),s.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{"use strict";var t=o(n(53943)),e=o(n(95778)),r=o(n(73481)),i=o(n(84772)),s=o(n(41941));function o(t){return t&&t.__esModule?t:{default:t}}n(43345);var a=window.$;a((function(){!function(){var n=s.default.multistoreHeader,o=document.querySelector(n.headerButton),l=document.querySelector(n.modal),c=a(n.searchInput),u=(new e.default).generate("admin_shops_search",{searchTerm:"__QUERY__"});new i.default(n.jsScrollbar);var h={source:new t.default({datumTokenizer:t.default.tokenizers.obj.whitespace,queryTokenizer:t.default.tokenizers.whitespace,remote:{url:u,wildcard:"__QUERY__"}}),onSelect:function(t){var e=void 0!==t.groupName?"s":"g",r=n.setContextUrl(window.location.href,e,t.id);return window.location.href=r,!0}};new r.default(c,h),o.addEventListener("click",(function(){l.classList.toggle("multishop-modal-hidden"),o.classList.toggle("active")}))}()}))})(),window.multistore_header={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2F1dG8tY29tcGxldGUtc2VhcmNoLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvY29tcG9uZW50cy1tYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9yb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvZm9zLXJvdXRpbmcvZGlzdC9yb3V0aW5nLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9wZXJmZWN0LXNjcm9sbGJhci9kaXN0L3BlcmZlY3Qtc2Nyb2xsYmFyLmVzbS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdHlwZWFoZWFkLmpzL2Rpc3QvdHlwZWFoZWFkLmJ1bmRsZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vZXh0ZXJuYWwgXCJqUXVlcnlcIiIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vW25hbWVdL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL211bHRpc3RvcmUtaGVhZGVyLmpzIl0sIm5hbWVzIjpbIkF1dG9Db21wbGV0ZVNlYXJjaCIsIiRzZWFyY2hJbnB1dCIsImNvbmZpZyIsInRoaXMiLCJzZWFyY2hJbnB1dElkIiwicHJvcCIsImlucHV0Q29uZmlnIiwibWluTGVuZ3RoIiwiaGlnaGxpZ2h0IiwiY2FjaGUiLCJoaW50IiwiZGF0YVNldENvbmZpZyIsImRpc3BsYXkiLCJ2YWx1ZSIsImxpbWl0IiwiZGF0YUxpbWl0Iiwib25TZWxlY3QiLCJzZWxlY3RlZEl0ZW0iLCJldmVudCIsIm9uQ2xvc2UiLCJkZWZhdWx0VGVtcGxhdGVzIiwic3VnZ2VzdGlvbiIsIml0ZW0iLCJkaXNwbGF5U3VnZ2VzdGlvbiIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInBlbmRpbmciLCJxdWVyeSIsIm5vdEZvdW5kIiwidGVtcGxhdGVzIiwiYnVpbGRUeXBlYWhlYWQiLCJ0eXBlYWhlYWQiLCJiaW5kIiwiZSIsIm11bHRpc3RvcmVEcm9wZG93biIsInNlYXJjaElucHV0Iiwic2Nyb2xsYmFyIiwibXVsdGlzdG9yZUhlYWRlciIsIm1vZGFsIiwiaGVhZGVyQnV0dG9uIiwianNTY3JvbGxiYXIiLCJzZXRDb250ZXh0VXJsIiwibG9jYXRpb24iLCJ1cmxMZXR0ZXIiLCJpdGVtSWQiLCJzZXRDb250ZXh0UGFyYW1ldGVyIiwidXJsIiwiVVJMIiwic2VhcmNoIiwidG9TdHJpbmciLCIkIiwid2luZG93IiwiUm91dGVyIiwicHJlc3Rhc2hvcCIsImN1c3RvbVJvdXRlcyIsInJvdXRlcyIsIlJvdXRpbmciLCJzZXREYXRhIiwic2V0QmFzZVVybCIsImRvY3VtZW50IiwiZmluZCIsImRhdGEiLCJyb3V0ZSIsInBhcmFtcyIsInRva2VuaXplZFBhcmFtcyIsIl90b2tlbiIsImdlbmVyYXRlIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJpIiwibGVuZ3RoIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImtleSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9hc3NpZ24yIiwiYXJndW1lbnRzIiwic291cmNlIiwiJE9iamVjdCIsIml0IiwiZGVzYyIsImRlZmluZVByb3BlcnR5IiwiaXNPYmplY3QiLCJ0b0lPYmplY3QiLCJ0b0xlbmd0aCIsInRvQWJzb2x1dGVJbmRleCIsIklTX0lOQ0xVREVTIiwiJHRoaXMiLCJlbCIsImZyb21JbmRleCIsIk8iLCJpbmRleCIsInNsaWNlIiwiY29yZSIsInZlcnNpb24iLCJfX2UiLCJhRnVuY3Rpb24iLCJmbiIsInRoYXQiLCJ1bmRlZmluZWQiLCJhIiwiYiIsImMiLCJhcHBseSIsImdldCIsImlzIiwiY3JlYXRlRWxlbWVudCIsInNwbGl0IiwiZ2xvYmFsIiwiY3R4IiwiaGlkZSIsImhhcyIsIiRleHBvcnQiLCJ0eXBlIiwibmFtZSIsIm93biIsIm91dCIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiUCIsIklTX0JJTkQiLCJCIiwiSVNfV1JBUCIsIlciLCJleHBQcm90byIsIkMiLCJGdW5jdGlvbiIsInZpcnR1YWwiLCJSIiwiVSIsImV4ZWMiLCJNYXRoIiwic2VsZiIsIl9fZyIsImRQIiwiY3JlYXRlRGVzYyIsIm9iamVjdCIsImYiLCJjb2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkRFU0NSSVBUT1JTIiwiZ2V0S2V5cyIsImdPUFMiLCJwSUUiLCJ0b09iamVjdCIsIklPYmplY3QiLCIkYXNzaWduIiwiYXNzaWduIiwiQSIsIlN5bWJvbCIsIksiLCJmb3JFYWNoIiwiayIsImtleXMiLCJqb2luIiwiVCIsImFMZW4iLCJnZXRTeW1ib2xzIiwiaXNFbnVtIiwiY29uY2F0IiwiaiIsImFuT2JqZWN0IiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1ByaW1pdGl2ZSIsIkF0dHJpYnV0ZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJhcnJheUluZGV4T2YiLCJJRV9QUk9UTyIsIm5hbWVzIiwicmVzdWx0IiwicHVzaCIsIiRrZXlzIiwiZW51bUJ1Z0tleXMiLCJiaXRtYXAiLCJzaGFyZWQiLCJ1aWQiLCJTSEFSRUQiLCJzdG9yZSIsIm1vZGUiLCJjb3B5cmlnaHQiLCJ0b0ludGVnZXIiLCJtYXgiLCJtaW4iLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsImRlZmluZWQiLCJ2YWwiLCJ2YWx1ZU9mIiwiaWQiLCJweCIsInJhbmRvbSIsIl9leHRlbmRzIiwiZCIsIl90eXBlb2YiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwic2V0Um91dGVzIiwicm91dGVzUm91dGluZyIsImdldFJvdXRlcyIsImNvbnRleHRSb3V0aW5nIiwiYmFzZV91cmwiLCJnZXRCYXNlVXJsIiwic2V0UHJlZml4IiwicHJlZml4Iiwic2V0U2NoZW1lIiwic2NoZW1lIiwiZ2V0U2NoZW1lIiwic2V0SG9zdCIsImhvc3QiLCJnZXRIb3N0IiwiYnVpbGRRdWVyeVBhcmFtcyIsIlJlZ0V4cCIsIkFycmF5IiwidGVzdCIsImdldFJvdXRlIiwiRXJyb3IiLCJnIiwiaCIsInRva2VucyIsImRlZmF1bHRzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImhvc3R0b2tlbnMiLCJyZXF1aXJlbWVudHMiLCJsIiwibSIsImVsZW1lbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwic2V0Iiwic3R5bGUiLCJkaXYiLCJjbGFzc05hbWUiLCJlbE1hdGNoZXMiLCJFbGVtZW50IiwibWF0Y2hlcyIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwicmVtb3ZlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicXVlcnlDaGlsZHJlbiIsInNlbGVjdG9yIiwiZmlsdGVyIiwiY2hpbGRyZW4iLCJjaGlsZCIsImNscyIsIngiLCJzY3JvbGxpbmdDbGFzc1RpbWVvdXQiLCJ5IiwiYWRkU2Nyb2xsaW5nQ2xhc3MiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImNsZWFyVGltZW91dCIsImFkZCIsInJlbW92ZVNjcm9sbGluZ0NsYXNzIiwic2V0VGltZW91dCIsImlzQWxpdmUiLCJzZXR0aW5ncyIsInNjcm9sbGluZ1RocmVzaG9sZCIsIkV2ZW50RWxlbWVudCIsImhhbmRsZXJzIiwicHJvdG90eXBlQWNjZXNzb3JzIiwiaXNFbXB0eSIsImV2ZW50TmFtZSIsImhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwidW5iaW5kIiwidGhpcyQxIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVuYmluZEFsbCIsImV2ZXJ5IiwiRXZlbnRNYW5hZ2VyIiwiZXZlbnRFbGVtZW50cyIsImNyZWF0ZUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJldnQiLCJpbml0Q3VzdG9tRXZlbnQiLCJwcm9jZXNzU2Nyb2xsRGlmZiIsImF4aXMiLCJkaWZmIiwidXNlU2Nyb2xsaW5nQ2xhc3MiLCJmb3JjZUZpcmVSZWFjaEV2ZW50IiwiZmllbGRzIiwicmVmIiwiY29udGVudEhlaWdodCIsImNvbnRhaW5lckhlaWdodCIsInNjcm9sbFRvcCIsInVwIiwiZG93biIsInJlYWNoIiwiZGlzcGF0Y2hFdmVudCIsInNldFNjcm9sbGluZ0NsYXNzSW5zdGFudGx5IiwicHJvY2Vzc1Njcm9sbERpZmYkMSIsInRvSW50IiwicGFyc2VJbnQiLCJldmVudEVsZW1lbnQiLCJlZSIsInNwbGljZSIsImluZGV4T2YiLCJvbmNlIiwib25jZUhhbmRsZXIiLCJlbnYiLCJpc1dlYktpdCIsImRvY3VtZW50RWxlbWVudCIsInN1cHBvcnRzVG91Y2giLCJuYXZpZ2F0b3IiLCJtYXhUb3VjaFBvaW50cyIsIkRvY3VtZW50VG91Y2giLCJzdXBwb3J0c0llUG9pbnRlciIsIm1zTWF4VG91Y2hQb2ludHMiLCJpc0Nocm9tZSIsInVzZXJBZ2VudCIsInVwZGF0ZUdlb21ldHJ5Iiwicm91bmRlZFNjcm9sbFRvcCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjb250YWluZXJXaWR0aCIsIndpZHRoIiwiaGVpZ2h0IiwiY29udGVudFdpZHRoIiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxiYXJYUmFpbCIsImFwcGVuZENoaWxkIiwic2Nyb2xsYmFyWVJhaWwiLCJzdXBwcmVzc1Njcm9sbFgiLCJzY3JvbGxYTWFyZ2luT2Zmc2V0Iiwic2Nyb2xsYmFyWEFjdGl2ZSIsInJhaWxYV2lkdGgiLCJyYWlsWE1hcmdpbldpZHRoIiwicmFpbFhSYXRpbyIsInNjcm9sbGJhclhXaWR0aCIsImdldFRodW1iU2l6ZSIsInNjcm9sbGJhclhMZWZ0IiwibmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50Iiwic2Nyb2xsTGVmdCIsInN1cHByZXNzU2Nyb2xsWSIsInNjcm9sbFlNYXJnaW5PZmZzZXQiLCJzY3JvbGxiYXJZQWN0aXZlIiwicmFpbFlIZWlnaHQiLCJyYWlsWU1hcmdpbkhlaWdodCIsInJhaWxZUmF0aW8iLCJzY3JvbGxiYXJZSGVpZ2h0Iiwic2Nyb2xsYmFyWVRvcCIsInhSYWlsT2Zmc2V0IiwiaXNSdGwiLCJsZWZ0IiwiaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20iLCJib3R0b20iLCJzY3JvbGxiYXJYQm90dG9tIiwidG9wIiwic2Nyb2xsYmFyWFRvcCIsInlSYWlsT2Zmc2V0IiwiaXNTY3JvbGxiYXJZVXNpbmdSaWdodCIsInJpZ2h0Iiwic2Nyb2xsYmFyWVJpZ2h0Iiwic2Nyb2xsYmFyWU91dGVyV2lkdGgiLCJzY3JvbGxiYXJZTGVmdCIsInNjcm9sbGJhclgiLCJyYWlsQm9yZGVyWFdpZHRoIiwic2Nyb2xsYmFyWSIsInJhaWxCb3JkZXJZV2lkdGgiLCJ1cGRhdGVDc3MiLCJ0aHVtYlNpemUiLCJtaW5TY3JvbGxiYXJMZW5ndGgiLCJtYXhTY3JvbGxiYXJMZW5ndGgiLCJiaW5kTW91c2VTY3JvbGxIYW5kbGVyIiwicGFnZVkiLCJzdGFydGluZ1Njcm9sbFRvcCIsInN0YXJ0aW5nTW91c2VQYWdlWSIsInNjcm9sbEJ5IiwibW91c2VNb3ZlSGFuZGxlciIsInRvdWNoZXMiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsIm1vdXNlVXBIYW5kbGVyIiwib3duZXJEb2N1bWVudCIsImJpbmRNb3ZlcyIsInRvdWNoTW9kZSIsImRpcmVjdGlvbiIsInBhZ2VZT2Zmc2V0IiwicGFnZVgiLCJwYWdlWE9mZnNldCIsImtleWJvYXJkIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsImFjdGl2ZUVsZW1lbnQiLCJ0YWdOYW1lIiwiY29udGVudERvY3VtZW50Iiwic2hhZG93Um9vdCIsImRlbHRhWCIsImRlbHRhWSIsIndoaWNoIiwibWV0YUtleSIsImFsdEtleSIsInNoaWZ0S2V5Iiwid2hlZWxQcm9wYWdhdGlvbiIsInNob3VsZFByZXZlbnREZWZhdWx0Iiwid2hlZWwiLCJtb3VzZXdoZWVsSGFuZGxlciIsIndoZWVsRGVsdGFYIiwid2hlZWxEZWx0YVkiLCJkZWx0YU1vZGUiLCJ3aGVlbERlbHRhIiwiZ2V0RGVsdGFGcm9tRXZlbnQiLCJxdWVyeVNlbGVjdG9yIiwiY3Vyc29yIiwib3ZlcmZsb3dZIiwibWF0Y2giLCJtYXhTY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJvdmVyZmxvd1giLCJtYXhTY3JvbGxMZWZ0IiwiY2xpZW50V2lkdGgiLCJzaG91bGRCZUNvbnN1bWVkQnlDaGlsZCIsInNob3VsZFByZXZlbnQiLCJ1c2VCb3RoV2hlZWxBeGVzIiwid2hlZWxTcGVlZCIsImlzVG9wIiwiaXNCb3R0b20iLCJvZmZzZXRIZWlnaHQiLCJpc0xlZnQiLCJpc1JpZ2h0Iiwib2Zmc2V0V2lkdGgiLCJhYnMiLCJjdHJsS2V5Iiwib253aGVlbCIsIm9ubW91c2V3aGVlbCIsInRvdWNoIiwic3RhcnRPZmZzZXQiLCJzdGFydFRpbWUiLCJzcGVlZCIsImVhc2luZ0xvb3AiLCJ0b3VjaFN0YXJ0IiwidG91Y2hNb3ZlIiwidG91Y2hFbmQiLCJQb2ludGVyRXZlbnQiLCJNU1BvaW50ZXJFdmVudCIsImFwcGx5VG91Y2hNb3ZlIiwiZGlmZmVyZW5jZVgiLCJkaWZmZXJlbmNlWSIsImdldFRvdWNoIiwidGFyZ2V0VG91Y2hlcyIsInNob3VsZEhhbmRsZSIsInBvaW50ZXJUeXBlIiwiYnV0dG9ucyIsIk1TUE9JTlRFUl9UWVBFX01PVVNFIiwiRGF0ZSIsImdldFRpbWUiLCJjbGVhckludGVydmFsIiwiY3VycmVudE9mZnNldCIsImN1cnJlbnRUaW1lIiwidGltZUdhcCIsIm1hZ25pdHVkZVgiLCJtYWduaXR1ZGVZIiwic2Nyb2xsWSIsInN3aXBlRWFzaW5nIiwic2V0SW50ZXJ2YWwiLCJpc0luaXRpYWxpemVkIiwiUGVyZmVjdFNjcm9sbGJhciIsInVzZXJTZXR0aW5ncyIsIm5vZGVOYW1lIiwib3JpZ2luYWxTY3JvbGxMZWZ0IiwiZm9jdXMiLCJibHVyIiwiaXNOZWdhdGl2ZVNjcm9sbCIsInNldEF0dHJpYnV0ZSIsInJhaWxYU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicmFpbFlTdHlsZSIsInN0eWxlcyIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Iiwib3V0ZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJoYW5kbGVyTmFtZSIsImxhc3RTY3JvbGxUb3AiLCJsYXN0U2Nyb2xsTGVmdCIsIm9uU2Nyb2xsIiwidXBkYXRlIiwiZGVzdHJveSIsInJlbW92ZVBzQ2xhc3NlcyIsInJvb3QiLCJhMCIsIl8iLCJpc01zaWUiLCJpc0JsYW5rU3RyaW5nIiwic3RyIiwiZXNjYXBlUmVnRXhDaGFycyIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc0FycmF5IiwiaXNGdW5jdGlvbiIsImlzUGxhaW5PYmplY3QiLCJpc1VuZGVmaW5lZCIsImlzRWxlbWVudCIsIm5vZGVUeXBlIiwiaXNKUXVlcnkiLCJ0b1N0ciIsInMiLCJwcm94eSIsImVhY2giLCJjb2xsZWN0aW9uIiwiY2IiLCJtYXAiLCJncmVwIiwic29tZSIsIm1peGluIiwiZXh0ZW5kIiwiaWRlbnRpdHkiLCJjbG9uZSIsImdldElkR2VuZXJhdG9yIiwiY291bnRlciIsInRlbXBsYXRpZnkiLCJTdHJpbmciLCJkZWZlciIsImRlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwibGF0ZXIiLCJjYWxsTm93IiwiY29udGV4dCIsImFyZ3MiLCJ0aHJvdHRsZSIsInByZXZpb3VzIiwibm93IiwicmVtYWluaW5nIiwic3RyaW5naWZ5IiwiSlNPTiIsIm5vb3AiLCJWRVJTSU9OIiwidG9rZW5pemVycyIsIm5vbndvcmQiLCJ3aGl0ZXNwYWNlIiwiZ2V0T2JqVG9rZW5pemVyIiwidG9rZW5pemVyIiwibyIsIkxydUNhY2hlIiwibWF4U2l6ZSIsInJlc2V0IiwiTGlzdCIsImhlYWQiLCJ0YWlsIiwiTm9kZSIsInByZXYiLCJuZXh0Iiwibm9kZSIsInRhaWxJdGVtIiwibGlzdCIsInNpemUiLCJoYXNoIiwibW92ZVRvRnJvbnQiLCJQZXJzaXN0ZW50U3RvcmFnZSIsIkxPQ0FMX1NUT1JBR0UiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVyciIsIm5hbWVzcGFjZSIsIm92ZXJyaWRlIiwidHRsS2V5Iiwia2V5TWF0Y2hlciIsImxzIiwiX25vb3AiLCJfcHJlZml4IiwiX3R0bEtleSIsImNsZWFyIiwiaXNFeHBpcmVkIiwiX3NhZmVTZXQiLCJkZWNvZGUiLCJnZXRJdGVtIiwidHRsIiwiZW5jb2RlIiwibGVuIiwiZ2F0aGVyTWF0Y2hpbmdLZXlzIiwicGFyc2VKU09OIiwiVHJhbnNwb3J0IiwicGVuZGluZ1JlcXVlc3RzQ291bnQiLCJwZW5kaW5nUmVxdWVzdHMiLCJtYXhQZW5kaW5nUmVxdWVzdHMiLCJzaGFyZWRDYWNoZSIsImNhbmNlbGxlZCIsImxhc3RSZXEiLCJfc2VuZCIsInRyYW5zcG9ydCIsIl9nZXQiLCJsaW1pdGVyIiwiX2NhY2hlIiwic2V0TWF4UGVuZGluZ1JlcXVlc3RzIiwibnVtIiwicmVzZXRDYWNoZSIsIl9maW5nZXJwcmludCIsInBhcmFtIiwiZmluZ2VycHJpbnQiLCJqcVhociIsImRvbmUiLCJyZXNwIiwiZmFpbCIsImFsd2F5cyIsIm9uRGVja1JlcXVlc3RBcmdzIiwiY2FuY2VsIiwiU2VhcmNoSW5kZXgiLCJkYXR1bVRva2VuaXplciIsInF1ZXJ5VG9rZW5pemVyIiwiZXJyb3IiLCJpZGVudGlmeSIsImJvb3RzdHJhcCIsImRhdHVtcyIsInRyaWUiLCJkYXR1bSIsIm5vcm1hbGl6ZVRva2VucyIsInRva2VuIiwiY2hhcnMiLCJjaCIsInNoaWZ0IiwibmV3Tm9kZSIsImlkcyIsImFycmF5QSIsImFycmF5QiIsImFpIiwiYmkiLCJpbnRlcnNlY3Rpb24iLCJzb3J0IiwibGVuQXJyYXlBIiwibGVuQXJyYXlCIiwiZ2V0SW50ZXJzZWN0aW9uIiwiYXJyYXkiLCJzZWVuIiwidW5pcXVlcyIsInVuaXF1ZSIsImFsbCIsInZhbHVlcyIsInNlcmlhbGl6ZSIsInRvTG93ZXJDYXNlIiwiUHJlZmV0Y2giLCJwcmVwYXJlIiwidHJhbnNmb3JtIiwidGh1bWJwcmludCIsInN0b3JhZ2UiLCJjYWNoZUtleSIsInByb3RvY29sIiwiX3NldHRpbmdzIiwiZGF0YVR5cGUiLCJmcm9tQ2FjaGUiLCJzdG9yZWQiLCJmcm9tTmV0d29yayIsIlJlbW90ZSIsImNhbmNlbExhc3RSZXF1ZXN0Iiwib1BhcnNlciIsInNvcnRlciIsImluaXRpYWxpemUiLCJzdWZmaWNpZW50IiwibG9jYWwiLCJwcmVmZXRjaCIsInJlbW90ZSIsImNhbGxiYWNrVG9EZWZlcnJlZCIsImFqYXgiLCJwYXJzZVByZWZldGNoIiwid2lsZGNhcmQiLCJyYXRlTGltaXRCeSIsInJhdGVMaW1pdFdhaXQiLCJwcmVwYXJlQnlSZXBsYWNlIiwicHJlcGFyZUJ5V2lsZGNhcmQiLCJpZGVuaXR5UHJlcGFyZSIsInRvUmVtb3RlUHJlcGFyZSIsIm1ldGhvZCIsInRvTGltaXRlciIsInBhcnNlUmVtb3RlIiwiZGVmZXJyZWQiLCJEZWZlcnJlZCIsInJlc29sdmUiLCJyZWplY3QiLCJvbGQiLCJCbG9vZGhvdW5kIiwibm9Db25mbGljdCIsIl9fdHRBZGFwdGVyIiwic3luYyIsImFzeW5jIiwiX2xvYWRQcmVmZXRjaCIsInNlcmlhbGl6ZWQiLCJwcm9taXNlIiwiX2luaXRpYWxpemUiLCJpbml0UHJvbWlzZSIsImZvcmNlIiwibm9uRHVwbGljYXRlcyIsInIiLCJjbGVhclByZWZldGNoQ2FjaGUiLCJjbGVhclJlbW90ZUNhY2hlIiwidHRBZGFwdGVyIiwiV1dXIiwiZGVmYXVsdENsYXNzTmFtZXMiLCJ3cmFwcGVyIiwiaW5wdXQiLCJtZW51IiwiZGF0YXNldCIsInNlbGVjdGFibGUiLCJlbXB0eSIsIm9wZW4iLCJ3d3ciLCJjbGFzc2VzIiwiY3NzIiwicG9zaXRpb24iLCJib3JkZXJDb2xvciIsImJveFNoYWRvdyIsIm9wYWNpdHkiLCJ2ZXJ0aWNhbEFsaWduIiwiYmFja2dyb3VuZENvbG9yIiwiaW5wdXRXaXRoTm9IaW50IiwiekluZGV4IiwibHRyIiwicnRsIiwiYmFja2dyb3VuZEltYWdlIiwiaHRtbCIsInNlbGVjdG9ycyIsImJ1aWxkU2VsZWN0b3JzIiwidiIsIkV2ZW50QnVzIiwiZGVwcmVjYXRpb25NYXAiLCIkZWwiLCJyZW5kZXIiLCJjdXJzb3JjaGFuZ2UiLCJzZWxlY3QiLCJhdXRvY29tcGxldGUiLCJfdHJpZ2dlciIsIiRlIiwiRXZlbnQiLCJ1bnNoaWZ0IiwidHJpZ2dlciIsImJlZm9yZSIsImRlcHJlY2F0ZWRUeXBlIiwiRXZlbnRFbWl0dGVyIiwic3BsaXR0ZXIiLCJuZXh0VGljayIsInNldEltbWVkaWF0ZSIsIm9uU3luYyIsInR5cGVzIiwib24iLCJvbkFzeW5jIiwib2ZmIiwiX2NhbGxiYWNrcyIsImNhbGxiYWNrcyIsInN5bmNGbHVzaCIsImFzeW5jRmx1c2giLCJnZXRGbHVzaCIsImJpbmRDb250ZXh0IiwiZG9jIiwicGF0dGVybiIsIndvcmRzT25seSIsImNhc2VTZW5zaXRpdmUiLCJyZWdleCIsInBhdHRlcm5zIiwicmVnZXhTdHIiLCJlc2NhcGVkUGF0dGVybnMiLCJnZXRSZWdleCIsInRyYXZlcnNlIiwiaGlnaHRsaWdodFRleHROb2RlIiwiY2hpbGROb2RlIiwiY2hpbGROb2RlcyIsInRleHROb2RlIiwicGF0dGVybk5vZGUiLCJ3cmFwcGVyTm9kZSIsInNwbGl0VGV4dCIsImNsb25lTm9kZSIsInJlcGxhY2VDaGlsZCIsIklucHV0Iiwic3BlY2lhbEtleUNvZGVNYXAiLCIkaW5wdXQiLCIkaGludCIsInF1ZXJ5V2hlbkZvY3VzZWQiLCJoYXNGb2N1cyIsIiRvdmVyZmxvd0hlbHBlciIsInZpc2liaWxpdHkiLCJ3aGl0ZVNwYWNlIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwiZm9udFZhcmlhbnQiLCJmb250V2VpZ2h0Iiwid29yZFNwYWNpbmciLCJsZXR0ZXJTcGFjaW5nIiwidGV4dEluZGVudCIsInRleHRSZW5kZXJpbmciLCJ0ZXh0VHJhbnNmb3JtIiwiaW5zZXJ0QWZ0ZXIiLCJfY2hlY2tMYW5ndWFnZURpcmVjdGlvbiIsInNldEhpbnQiLCJnZXRIaW50IiwiY2xlYXJIaW50IiwiY2xlYXJIaW50SWZJbnZhbGlkIiwiOSIsIjI3IiwiMzciLCIzOSIsIjEzIiwiMzgiLCI0MCIsIm5vcm1hbGl6ZVF1ZXJ5IiwiX29uQmx1ciIsInJlc2V0SW5wdXRWYWx1ZSIsIl9vbkZvY3VzIiwiX29uS2V5ZG93biIsImtleU5hbWUiLCJrZXlDb2RlIiwiX21hbmFnZVByZXZlbnREZWZhdWx0IiwiX3Nob3VsZFRyaWdnZXIiLCJfb25JbnB1dCIsIl9zZXRRdWVyeSIsImdldElucHV0VmFsdWUiLCJ3aXRoTW9kaWZpZXIiLCJkaXIiLCJhdHRyIiwic2lsZW50IiwiYXJlRXF1aXZhbGVudCIsImhhc0RpZmZlcmVudFdoaXRlc3BhY2UiLCJvbkJsdXIiLCJvbkZvY3VzIiwib25LZXlkb3duIiwib25JbnB1dCIsImdldExhbmdEaXIiLCJnZXRRdWVyeSIsInNldFF1ZXJ5Iiwic2V0SW5wdXRWYWx1ZSIsImhhc1F1ZXJ5Q2hhbmdlZFNpbmNlTGFzdEZvY3VzIiwidmFsSXNQcmVmaXhPZkhpbnQiLCJoYXNPdmVyZmxvdyIsImNvbnN0cmFpbnQiLCJ0ZXh0IiwiaXNDdXJzb3JBdEVuZCIsInZhbHVlTGVuZ3RoIiwic2VsZWN0aW9uU3RhcnQiLCJyYW5nZSIsInNlbGVjdGlvbiIsImNyZWF0ZVJhbmdlIiwibW92ZVN0YXJ0IiwiRGF0YXNldCIsIm5hbWVHZW5lcmF0b3IiLCJkaXNwbGF5Rm4iLCJnZXREaXNwbGF5Rm4iLCJkaXNwbGF5S2V5IiwiaGVhZGVyIiwiZm9vdGVyIiwic3VnZ2VzdGlvblRlbXBsYXRlIiwiZ2V0VGVtcGxhdGVzIiwiX3Jlc2V0TGFzdFN1Z2dlc3Rpb24iLCJhZGRDbGFzcyIsImV4dHJhY3REYXRhIiwiX292ZXJ3cml0ZSIsInN1Z2dlc3Rpb25zIiwiX3JlbmRlclN1Z2dlc3Rpb25zIiwiX3JlbmRlclBlbmRpbmciLCJfcmVuZGVyTm90Rm91bmQiLCJfZW1wdHkiLCJfYXBwZW5kIiwiJGxhc3RTdWdnZXN0aW9uIiwiX2FwcGVuZFN1Z2dlc3Rpb25zIiwiJGZyYWdtZW50IiwiX2dldFN1Z2dlc3Rpb25zRnJhZ21lbnQiLCJsYXN0IiwicHJlcGVuZCIsIl9nZXRIZWFkZXIiLCJhcHBlbmQiLCJfZ2V0Rm9vdGVyIiwiYWZ0ZXIiLCJ0ZW1wbGF0ZSIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIl9pbmplY3RRdWVyeSIsIl9xdWVyeSIsImNhbmNlbGVkIiwic3luY0NhbGxlZCIsInJlbmRlcmVkIiwiTWVudSIsIiRub2RlIiwiZGF0YXNldHMiLCJvRGF0YXNldCIsImZpcnN0IiwiYXBwZW5kVG8iLCJfb25TZWxlY3RhYmxlQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiX29uUmVuZGVyZWQiLCJ0b2dnbGVDbGFzcyIsIl9hbGxEYXRhc2V0c0VtcHR5IiwiX29uQ2xlYXJlZCIsIl9wcm9wYWdhdGUiLCJfZ2V0U2VsZWN0YWJsZXMiLCJfcmVtb3ZlQ3Vyc29yIiwiJHNlbGVjdGFibGUiLCJnZXRBY3RpdmVTZWxlY3RhYmxlIiwicmVtb3ZlQ2xhc3MiLCJfZW5zdXJlVmlzaWJsZSIsImVsVG9wIiwiZWxCb3R0b20iLCJub2RlU2Nyb2xsVG9wIiwibm9kZUhlaWdodCIsIm91dGVySGVpZ2h0Iiwib25TZWxlY3RhYmxlQ2xpY2siLCJpc09wZW4iLCJoYXNDbGFzcyIsImNsb3NlIiwic2V0TGFuZ3VhZ2VEaXJlY3Rpb24iLCJzZWxlY3RhYmxlUmVsYXRpdmVUb0N1cnNvciIsImRlbHRhIiwiJHNlbGVjdGFibGVzIiwiJG9sZEN1cnNvciIsIm5ld0luZGV4IiwiZXEiLCJzZXRDdXJzb3IiLCJnZXRTZWxlY3RhYmxlRGF0YSIsImdldFRvcFNlbGVjdGFibGUiLCJpc1ZhbGlkVXBkYXRlIiwiRGVmYXVsdE1lbnUiLCJfc2hvdyIsIl9oaWRlIiwiVHlwZWFoZWFkIiwib25Gb2N1c2VkIiwib25CbHVycmVkIiwib25FbnRlcktleWVkIiwib25UYWJLZXllZCIsIm9uRXNjS2V5ZWQiLCJvblVwS2V5ZWQiLCJvbkRvd25LZXllZCIsIm9uTGVmdEtleWVkIiwib25SaWdodEtleWVkIiwib25RdWVyeUNoYW5nZWQiLCJvbldoaXRlc3BhY2VDaGFuZ2VkIiwiZXZlbnRCdXMiLCJlbmFibGVkIiwiYWN0aXZlIiwiYWN0aXZhdGUiLCJfaGFja3MiLCJfb25TZWxlY3RhYmxlQ2xpY2tlZCIsIl9vbkFzeW5jUmVxdWVzdGVkIiwiX29uQXN5bmNDYW5jZWxlZCIsIl9vbkFzeW5jUmVjZWl2ZWQiLCJfb25EYXRhc2V0UmVuZGVyZWQiLCJfb25EYXRhc2V0Q2xlYXJlZCIsIl9vbkxhbmdEaXJDaGFuZ2VkIiwiJG1lbnUiLCJpc0FjdGl2ZSIsImhhc0FjdGl2ZSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsIl91cGRhdGVIaW50IiwiX29uRm9jdXNlZCIsIl9taW5MZW5ndGhNZXQiLCJfb25CbHVycmVkIiwiX29uRW50ZXJLZXllZCIsIl9vblRhYktleWVkIiwiX29uRXNjS2V5ZWQiLCJfb25VcEtleWVkIiwibW92ZUN1cnNvciIsIl9vbkRvd25LZXllZCIsIl9vbkxlZnRLZXllZCIsIl9vblJpZ2h0S2V5ZWQiLCJfb25RdWVyeUNoYW5nZWQiLCJfb25XaGl0ZXNwYWNlQ2hhbmdlZCIsIl9vcGVuSWZBY3RpdmUiLCJlc2NhcGVkUXVlcnkiLCJpc0VuYWJsZWQiLCJlbmFibGUiLCJkaXNhYmxlIiwiZGVhY3RpdmF0ZSIsInNldFZhbCIsImdldFZhbCIsIiRjYW5kaWRhdGUiLCJwYXlsb2FkIiwibWV0aG9kcyIsInR0RWFjaCIsIiRlbHMiLCJidWlsZEhpbnRGcm9tSW5wdXQiLCJyZW1vdmVEYXRhIiwiYmFja2dyb3VuZEF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJyZW1vdmVBdHRyIiwic3BlbGxjaGVjayIsInRhYmluZGV4IiwicHJlcElucHV0IiwiYXR0cnMiLCIkZWxPck51bGwiLCJjbGFzc05hbWVzIiwiYXR0YWNoIiwiJHdyYXBwZXIiLCJkZWZhdWx0SGludCIsImRlZmF1bHRNZW51IiwiTWVudUNvbnN0cnVjdG9yIiwid3JhcCIsInBhcmVudCIsInQiLCJzdWNjZXNzIiwibmV3VmFsIiwiZGV0YWNoIiwicmV2ZXJ0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImRlZmluaXRpb24iLCJ0b1N0cmluZ1RhZyIsIk11bHRpc3RvcmVIZWFkZXJNYXAiLCJDb21wb25lbnRzTWFwIiwibW9kYWxNdWx0aXNob3AiLCJzZWFyY2hUZXJtIiwiY29udGV4dFVybExldHRlciIsImdyb3VwTmFtZSIsImhyZWYiLCJ0b2dnbGUiLCJpbml0TXVsdGlzdG9yZUhlYWRlciJdLCJtYXBwaW5ncyI6IjtvdGJBOEJxQkEsRSxXQUNuQixXQUFZQyxFQUFjQyxHQUFRLGlDQUNoQ0MsS0FBS0YsYUFBZUEsRUFDcEJFLEtBQUtDLGNBQWdCRCxLQUFLRixhQUFhSSxLQUFLLE1BRTVDLElBQU1DLEVBQWNKLEdBQVUsR0FFOUJDLEtBQUtELFFBQUwsY0FDRUssVUFBVyxFQUNYQyxXQUFXLEVBQ1hDLE9BQU8sRUFDUEMsTUFBTSxHQUNISixHQUlMSCxLQUFLUSxlQUFMLGNBQ0VDLFFBQVMsT0FDVEMsTUFBTyxLQUNQQyxNQUFPLEdBQ1BDLFVBQVcsRUFFWEMsU0FORixTQU1XQyxFQUFjQyxHQUNyQixPQUFPLEdBR1RDLFFBVkYsU0FVVUQsTUFFTFosR0FLTCxJQUFNYyxFQUFtQixDQUd2QkMsV0FBWSxTQUFDQyxHQUNYLElBQUlDLEVBQW9CRCxFQVF4QixNQU4wQyxtQkFBL0IsRUFBS1gsY0FBY0MsUUFDNUIsRUFBS0QsY0FBY0MsUUFBUVUsR0FDbEJFLE9BQU9DLFVBQVVDLGVBQWVDLEtBQUtMLEVBQU0sRUFBS1gsY0FBY0MsV0FDdkVXLEVBQW9CRCxFQUFLLEVBQUtYLGNBQWNDLFVBRzlDLHFCQUE0QlcsRUFBNUIsVUFFRkssUUFkdUIs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QUNyQzJ1QixFQUFlMXZCLFVBQVUrdkIsT0FBTywwQkFDaEN2K0IsRUFBYXdPLFVBQVUrdkIsT0FBTyxhQUtoQ0MsTyIsImZpbGUiOiJtdWx0aXN0b3JlX2hlYWRlci5idW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgYW4gb3ZlcmxheSBvZiB0eXBlYWhlYWQgaXQgYWxsb3dzIHRvIGhhdmUgYSBzaW5nbGUgY29uZmlnIGlucHV0IChzaW5jZVxuICogdHlwZWFoZWFkIHdlaXJkbHkgdXNlcyB0d28gZGlmZmVyZW50IGNvbmZpZ3MpLiBJdCBhbHNvIHByb3ZpZGVzIHNvbWUgZGVmYXVsdCByZW5kZXJpbmdcbiAqIGZ1bmN0aW9ucyB3aGljaCBhcmUsIG9mIGNvdXJzZSwgb3ZlcnJpZGFibGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9Db21wbGV0ZVNlYXJjaCB7XG4gIGNvbnN0cnVjdG9yKCRzZWFyY2hJbnB1dCwgY29uZmlnKSB7XG4gICAgdGhpcy4kc2VhcmNoSW5wdXQgPSAkc2VhcmNoSW5wdXQ7XG4gICAgdGhpcy5zZWFyY2hJbnB1dElkID0gdGhpcy4kc2VhcmNoSW5wdXQucHJvcCgnaWQnKTtcblxuICAgIGNvbnN0IGlucHV0Q29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIC8vIE1lcmdlIGRlZmF1bHQgYW5kIGlucHV0IGNvbmZpZ1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgbWluTGVuZ3RoOiAyLFxuICAgICAgaGlnaGxpZ2h0OiB0cnVlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgaGludDogZmFsc2UsXG4gICAgICAuLi5pbnB1dENvbmZpZyxcbiAgICB9O1xuXG4gICAgLy8gTWVyZ2UgZGVmYXVsdCBhbmQgaW5wdXQgZGF0YVNldENvbmZpZ1xuICAgIHRoaXMuZGF0YVNldENvbmZpZyA9IHtcbiAgICAgIGRpc3BsYXk6ICduYW1lJywgLy8gV2hpY2ggZmllbGQgb2YgdGhlIG9iamVjdCBmcm9tIHRoZSBsaXN0IGlzIHVzZWQgZm9yIGRpc3BsYXkgKGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrKVxuICAgICAgdmFsdWU6ICdpZCcsIC8vIFdoaWNoIGZpZWxkIG9mIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdCBpcyB1c2VkIGZvciB2YWx1ZSAoY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2spXG4gICAgICBsaW1pdDogMjAsIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgZGlzcGxheWVkIHN1Z2dlc3Rpb25cbiAgICAgIGRhdGFMaW1pdDogMCwgLy8gSG93IG1hbnkgZWxlbWVudHMgY2FuIGJlIHNlbGVjdGVkIG1heFxuICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzICovXG4gICAgICBvblNlbGVjdChzZWxlY3RlZEl0ZW0sIGV2ZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgb25DbG9zZShldmVudCkge1xuICAgICAgfSxcbiAgICAgIC4uLmlucHV0Q29uZmlnLFxuICAgIH07XG5cbiAgICAvLyBNZXJnaW5nIG9iamVjdCB3b3JrcyBmaW5lIG9uIG9uZSBsZXZlbCwgYnV0IG9uIHR3byBpdCBlcmFzZXMgc3ViIGVsZW1lbnRzIGV2ZW4gaWYgbm90IHByZXNlbnQsIHNvXG4gICAgLy8gd2UgaGFuZGxlIHRlbXBsYXRlcyBzZXBhcmF0ZWx5LCB0aGVzZSBhcmUgdGhlIGRlZmF1bHQgcmVuZGVyaW5nIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlblxuICAgIGNvbnN0IGRlZmF1bHRUZW1wbGF0ZXMgPSB7XG4gICAgICAvLyBCZSBjYXJlZnVsIHRoYXQgeW91ciByZW5kZXJpbmcgZnVuY3Rpb24gbXVzdCByZXR1cm4gSFRNTCBub2RlIG5vdCBwdXJlIHRleHQgc28gYWx3YXlzIGluY2x1ZGUgdGhlXG4gICAgICAvLyBjb250ZW50IGluIGEgZGl2IGF0IGxlYXN0XG4gICAgICBzdWdnZXN0aW9uOiAoaXRlbSkgPT4ge1xuICAgICAgICBsZXQgZGlzcGxheVN1Z2dlc3Rpb24gPSBpdGVtO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU2V0Q29uZmlnLmRpc3BsYXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTZXRDb25maWcuZGlzcGxheShpdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgdGhpcy5kYXRhU2V0Q29uZmlnLmRpc3BsYXkpKSB7XG4gICAgICAgICAgZGlzcGxheVN1Z2dlc3Rpb24gPSBpdGVtW3RoaXMuZGF0YVNldENvbmZpZy5kaXNwbGF5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInB4LTJcIj4ke2Rpc3BsYXlTdWdnZXN0aW9ufTwvZGl2PmA7XG4gICAgICB9LFxuICAgICAgcGVuZGluZyhxdWVyeSkge1xuICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJweC0yXCI+U2VhcmNoaW5nIGZvciBcIiR7cXVlcnkucXVlcnl9XCI8L2Rpdj5gO1xuICAgICAgfSxcbiAgICAgIG5vdEZvdW5kKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInB4LTJcIj5ObyByZXN1bHRzIGZvdW5kIGZvciBcIiR7cXVlcnkucXVlcnl9XCI8L2Rpdj5gO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnB1dENvbmZpZywgJ3RlbXBsYXRlcycpKSB7XG4gICAgICB0aGlzLmRhdGFTZXRDb25maWcudGVtcGxhdGVzID0gey4uLmRlZmF1bHRUZW1wbGF0ZXMsIC4uLmlucHV0Q29uZmlnLnRlbXBsYXRlc307XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNldENvbmZpZy50ZW1wbGF0ZXMgPSBkZWZhdWx0VGVtcGxhdGVzO1xuICAgIH1cblxuICAgIHRoaXMuYnVpbGRUeXBlYWhlYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgdHlwZWFoZWFkIGNvbXBvbmVudCBiYXNlZCBvbiBwcm92aWRlZCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgYnVpbGRUeXBlYWhlYWQoKSB7XG4gICAgdGhpcy4kc2VhcmNoSW5wdXQudHlwZWFoZWFkKHRoaXMuY29uZmlnLCB0aGlzLmRhdGFTZXRDb25maWcpXG4gICAgICAuYmluZCgndHlwZWFoZWFkOnNlbGVjdCcsIChlLCBzZWxlY3RlZEl0ZW0pID0+IHRoaXMuY29uZmlnLm9uU2VsZWN0KHNlbGVjdGVkSXRlbSwgZSwgdGhpcy4kc2VhcmNoSW5wdXQpKVxuICAgICAgLmJpbmQoJ3R5cGVhaGVhZDpjbG9zZScsIChlKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uQ2xvc2UoZSwgdGhpcy4kc2VhcmNoSW5wdXQpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQge1xuICBtdWx0aXN0b3JlRHJvcGRvd246IHtcbiAgICBzZWFyY2hJbnB1dDogJy5qcy1tdWx0aXN0b3JlLWRyb3Bkb3duLXNlYXJjaCcsXG4gICAgc2Nyb2xsYmFyOiAnLmpzLW11bHRpc3RvcmUtc2Nyb2xsYmFyJyxcbiAgfSxcbiAgbXVsdGlzdG9yZUhlYWRlcjoge1xuICAgIG1vZGFsOiAnLmpzLW11bHRpc2hvcC1tb2RhbCcsXG4gICAgaGVhZGVyQnV0dG9uOiAnLmpzLWhlYWRlci1tdWx0aXNob3Atb3Blbi1tb2RhbCcsXG4gICAgc2VhcmNoSW5wdXQ6ICcuanMtbXVsdGlzaG9wLW1vZGFsLXNlYXJjaCcsXG4gICAganNTY3JvbGxiYXI6ICcuanMtbXVsdGlzaG9wLXNjcm9sbGJhcicsXG4gICAgc2V0Q29udGV4dFVybDogKGxvY2F0aW9uLCB1cmxMZXR0ZXIsIGl0ZW1JZCkgPT4ge1xuICAgICAgY29uc3Qgc2V0Q29udGV4dFBhcmFtZXRlciA9IGBzZXRTaG9wQ29udGV4dD0ke3VybExldHRlcn0tJHtpdGVtSWR9YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwobG9jYXRpb24pO1xuXG4gICAgICBpZiAodXJsLnNlYXJjaCA9PT0gJycpIHtcbiAgICAgICAgdXJsLnNlYXJjaCA9IGA/JHtzZXRDb250ZXh0UGFyYW1ldGVyfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwuc2VhcmNoICs9IGAmJHtzZXRDb250ZXh0UGFyYW1ldGVyfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgICB9LFxuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRpbmcgZnJvbSAnZm9zLXJvdXRpbmcnO1xuaW1wb3J0IHJvdXRlcyBmcm9tICdAanMvZm9zX2pzX3JvdXRlcy5qc29uJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIFdyYXBzIEZPU0pzUm91dGluZ2J1bmRsZSB3aXRoIGV4cG9zZWQgcm91dGVzLlxuICogVG8gZXhwb3NlIHJvdXRlIGFkZCBvcHRpb24gYGV4cG9zZTogdHJ1ZWAgaW4gLnltbCByb3V0aW5nIGNvbmZpZ1xuICpcbiAqIGUuZy5cbiAqXG4gKiBgbXlfcm91dGVcbiAqICAgIHBhdGg6IC9teS1wYXRoXG4gKiAgICBvcHRpb25zOlxuICogICAgICBleHBvc2U6IHRydWVcbiAqIGBcbiAqIEFuZCBydW4gYGJpbi9jb25zb2xlIGZvczpqcy1yb3V0aW5nOmR1bXAgLS1mb3JtYXQ9anNvbiAtLXRhcmdldD1hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9qcy9mb3NfanNfcm91dGVzLmpzb25gXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh3aW5kb3cucHJlc3Rhc2hvcCAmJiB3aW5kb3cucHJlc3Rhc2hvcC5jdXN0b21Sb3V0ZXMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocm91dGVzLnJvdXRlcywgd2luZG93LnByZXN0YXNob3AuY3VzdG9tUm91dGVzKTtcbiAgICB9XG5cbiAgICBSb3V0aW5nLnNldERhdGEocm91dGVzKTtcbiAgICBSb3V0aW5nLnNldEJhc2VVcmwoXG4gICAgICAkKGRvY3VtZW50KVxuICAgICAgICAuZmluZCgnYm9keScpXG4gICAgICAgIC5kYXRhKCdiYXNlLXVybCcpLFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvcmF0ZWQgXCJnZW5lcmF0ZVwiIG1ldGhvZCwgd2l0aCBwcmVkZWZpbmVkIHNlY3VyaXR5IHRva2VuIGluIHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gcm91dGVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgZ2VuZXJhdGUocm91dGUsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgdG9rZW5pemVkUGFyYW1zID0gT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtcbiAgICAgIF90b2tlbjogJChkb2N1bWVudClcbiAgICAgICAgLmZpbmQoJ2JvZHknKVxuICAgICAgICAuZGF0YSgndG9rZW4nKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBSb3V0aW5nLmdlbmVyYXRlKHJvdXRlLCB0b2tlbml6ZWRQYXJhbXMpO1xuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9hc3NpZ25cIik7XG5cbnZhciBfYXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Fzc2lnbik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9hc3NpZ24yLmRlZmF1bHQgfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5hc3NpZ247XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO3ZhciBfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihhKXtmb3IodmFyIGIsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspZm9yKHZhciBkIGluIGI9YXJndW1lbnRzW2NdLGIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsZCkmJihhW2RdPWJbZF0pO3JldHVybiBhfSxfdHlwZW9mPSdmdW5jdGlvbic9PXR5cGVvZiBTeW1ib2wmJidzeW1ib2wnPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYX06ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJidmdW5jdGlvbic9PXR5cGVvZiBTeW1ib2wmJmEuY29uc3RydWN0b3I9PT1TeW1ib2wmJmEhPT1TeW1ib2wucHJvdG90eXBlPydzeW1ib2wnOnR5cGVvZiBhfTtmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKX12YXIgUm91dGluZz1mdW5jdGlvbiBhKCl7dmFyIGI9dGhpcztfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSx0aGlzLnNldFJvdXRlcz1mdW5jdGlvbihhKXtiLnJvdXRlc1JvdXRpbmc9YXx8W119LHRoaXMuZ2V0Um91dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGIucm91dGVzUm91dGluZ30sdGhpcy5zZXRCYXNlVXJsPWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcuYmFzZV91cmw9YX0sdGhpcy5nZXRCYXNlVXJsPWZ1bmN0aW9uKCl7cmV0dXJuIGIuY29udGV4dFJvdXRpbmcuYmFzZV91cmx9LHRoaXMuc2V0UHJlZml4PWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcucHJlZml4PWF9LHRoaXMuc2V0U2NoZW1lPWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcuc2NoZW1lPWF9LHRoaXMuZ2V0U2NoZW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGIuY29udGV4dFJvdXRpbmcuc2NoZW1lfSx0aGlzLnNldEhvc3Q9ZnVuY3Rpb24oYSl7Yi5jb250ZXh0Um91dGluZy5ob3N0PWF9LHRoaXMuZ2V0SG9zdD1mdW5jdGlvbigpe3JldHVybiBiLmNvbnRleHRSb3V0aW5nLmhvc3R9LHRoaXMuYnVpbGRRdWVyeVBhcmFtcz1mdW5jdGlvbihhLGMsZCl7dmFyIGU9bmV3IFJlZ0V4cCgvXFxbXSQvKTtjIGluc3RhbmNlb2YgQXJyYXk/Yy5mb3JFYWNoKGZ1bmN0aW9uKGMsZil7ZS50ZXN0KGEpP2QoYSxjKTpiLmJ1aWxkUXVlcnlQYXJhbXMoYSsnWycrKCdvYmplY3QnPT09KCd1bmRlZmluZWQnPT10eXBlb2YgYz8ndW5kZWZpbmVkJzpfdHlwZW9mKGMpKT9mOicnKSsnXScsYyxkKX0pOidvYmplY3QnPT09KCd1bmRlZmluZWQnPT10eXBlb2YgYz8ndW5kZWZpbmVkJzpfdHlwZW9mKGMpKT9PYmplY3Qua2V5cyhjKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBiLmJ1aWxkUXVlcnlQYXJhbXMoYSsnWycrZSsnXScsY1tlXSxkKX0pOmQoYSxjKX0sdGhpcy5nZXRSb3V0ZT1mdW5jdGlvbihhKXt2YXIgYz1iLmNvbnRleHRSb3V0aW5nLnByZWZpeCthO2lmKCEhYi5yb3V0ZXNSb3V0aW5nW2NdKXJldHVybiBiLnJvdXRlc1JvdXRpbmdbY107ZWxzZSBpZighYi5yb3V0ZXNSb3V0aW5nW2FdKXRocm93IG5ldyBFcnJvcignVGhlIHJvdXRlIFwiJythKydcIiBkb2VzIG5vdCBleGlzdC4nKTtyZXR1cm4gYi5yb3V0ZXNSb3V0aW5nW2FdfSx0aGlzLmdlbmVyYXRlPWZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1iLmdldFJvdXRlKGEpLGY9Y3x8e30sZz1fZXh0ZW5kcyh7fSxmKSxoPSdfc2NoZW1lJyxpPScnLGo9ITAsaz0nJztpZigoZS50b2tlbnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKCd0ZXh0Jz09PWJbMF0pcmV0dXJuIGk9YlsxXStpLHZvaWQoaj0hMSk7aWYoJ3ZhcmlhYmxlJz09PWJbMF0pe3ZhciBjPShlLmRlZmF1bHRzfHx7fSlbYlszXV07aWYoITE9PWp8fCFjfHwoZnx8e30pW2JbM11dJiZmW2JbM11dIT09ZS5kZWZhdWx0c1tiWzNdXSl7dmFyIGQ7aWYoKGZ8fHt9KVtiWzNdXSlkPWZbYlszXV0sZGVsZXRlIGdbYlszXV07ZWxzZSBpZihjKWQ9ZS5kZWZhdWx0c1tiWzNdXTtlbHNle2lmKGopcmV0dXJuO3Rocm93IG5ldyBFcnJvcignVGhlIHJvdXRlIFwiJythKydcIiByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIFwiJytiWzNdKydcIi4nKX12YXIgaD0hMD09PWR8fCExPT09ZHx8Jyc9PT1kO2lmKCFofHwhail7dmFyIGs9ZW5jb2RlVVJJQ29tcG9uZW50KGQpLnJlcGxhY2UoLyUyRi9nLCcvJyk7J251bGwnPT09ayYmbnVsbD09PWQmJihrPScnKSxpPWJbMV0raytpfWo9ITF9ZWxzZSBjJiZkZWxldGUgZ1tiWzNdXTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKCdUaGUgdG9rZW4gdHlwZSBcIicrYlswXSsnXCIgaXMgbm90IHN1cHBvcnRlZC4nKX0pLCcnPT1pJiYoaT0nLycpLChlLmhvc3R0b2tlbnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybid0ZXh0Jz09PWFbMF0/dm9pZChrPWFbMV0rayk6dm9pZCgndmFyaWFibGUnPT09YVswXSYmKChmfHx7fSlbYVszXV0/KGI9ZlthWzNdXSxkZWxldGUgZ1thWzNdXSk6ZS5kZWZhdWx0c1thWzNdXSYmKGI9ZS5kZWZhdWx0c1thWzNdXSksaz1hWzFdK2IraykpfSksaT1iLmNvbnRleHRSb3V0aW5nLmJhc2VfdXJsK2ksZS5yZXF1aXJlbWVudHNbaF0mJmIuZ2V0U2NoZW1lKCkhPT1lLnJlcXVpcmVtZW50c1toXT9pPWUucmVxdWlyZW1lbnRzW2hdKyc6Ly8nKyhrfHxiLmdldEhvc3QoKSkraTprJiZiLmdldEhvc3QoKSE9PWs/aT1iLmdldFNjaGVtZSgpKyc6Ly8nK2sraTohMD09PWQmJihpPWIuZ2V0U2NoZW1lKCkrJzovLycrYi5nZXRIb3N0KCkraSksMDxPYmplY3Qua2V5cyhnKS5sZW5ndGgpe3ZhciBsPVtdLG09ZnVuY3Rpb24oYSxiKXt2YXIgYz1iO2M9J2Z1bmN0aW9uJz09dHlwZW9mIGM/YygpOmMsYz1udWxsPT09Yz8nJzpjLGwucHVzaChlbmNvZGVVUklDb21wb25lbnQoYSkrJz0nK2VuY29kZVVSSUNvbXBvbmVudChjKSl9O09iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIuYnVpbGRRdWVyeVBhcmFtcyhhLGdbYV0sbSl9KSxpPWkrJz8nK2wuam9pbignJicpLnJlcGxhY2UoLyUyMC9nLCcrJyl9cmV0dXJuIGl9LHRoaXMuc2V0RGF0YT1mdW5jdGlvbihhKXtiLnNldEJhc2VVcmwoYS5iYXNlX3VybCksYi5zZXRSb3V0ZXMoYS5yb3V0ZXMpLCdwcmVmaXgnaW4gYSYmYi5zZXRQcmVmaXgoYS5wcmVmaXgpLGIuc2V0SG9zdChhLmhvc3QpLGIuc2V0U2NoZW1lKGEuc2NoZW1lKX0sdGhpcy5jb250ZXh0Um91dGluZz17YmFzZV91cmw6JycscHJlZml4OicnLGhvc3Q6Jycsc2NoZW1lOicnfX07bW9kdWxlLmV4cG9ydHM9bmV3IFJvdXRpbmc7IiwiLyohXG4gKiBwZXJmZWN0LXNjcm9sbGJhciB2MS41LjBcbiAqIENvcHlyaWdodCAyMDIwIEh5dW5qZSBKdW4sIE1EQm9vdHN0cmFwIGFuZCBDb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICovXG5cbmZ1bmN0aW9uIGdldChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzZXQoZWxlbWVudCwgb2JqKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICB2YWwgPSB2YWwgKyBcInB4XCI7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHZhbDtcbiAgfVxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZGl2KGNsYXNzTmFtZSkge1xuICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGRpdi5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIHJldHVybiBkaXY7XG59XG5cbnZhciBlbE1hdGNoZXMgPVxuICB0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgKEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3Rvcik7XG5cbmZ1bmN0aW9uIG1hdGNoZXMoZWxlbWVudCwgcXVlcnkpIHtcbiAgaWYgKCFlbE1hdGNoZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgbWF0Y2hpbmcgbWV0aG9kIHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgcmV0dXJuIGVsTWF0Y2hlcy5jYWxsKGVsZW1lbnQsIHF1ZXJ5KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQucmVtb3ZlKSB7XG4gICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5Q2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlbGVtZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIG1hdGNoZXMoY2hpbGQsIHNlbGVjdG9yKTsgfVxuICApO1xufVxuXG52YXIgY2xzID0ge1xuICBtYWluOiAncHMnLFxuICBydGw6ICdwc19fcnRsJyxcbiAgZWxlbWVudDoge1xuICAgIHRodW1iOiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gKFwicHNfX3RodW1iLVwiICsgeCk7IH0sXG4gICAgcmFpbDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIChcInBzX19yYWlsLVwiICsgeCk7IH0sXG4gICAgY29uc3VtaW5nOiAncHNfX2NoaWxkLS1jb25zdW1lJyxcbiAgfSxcbiAgc3RhdGU6IHtcbiAgICBmb2N1czogJ3BzLS1mb2N1cycsXG4gICAgY2xpY2tpbmc6ICdwcy0tY2xpY2tpbmcnLFxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIChcInBzLS1hY3RpdmUtXCIgKyB4KTsgfSxcbiAgICBzY3JvbGxpbmc6IGZ1bmN0aW9uICh4KSB7IHJldHVybiAoXCJwcy0tc2Nyb2xsaW5nLVwiICsgeCk7IH0sXG4gIH0sXG59O1xuXG4vKlxuICogSGVscGVyIG1ldGhvZHNcbiAqL1xudmFyIHNjcm9sbGluZ0NsYXNzVGltZW91dCA9IHsgeDogbnVsbCwgeTogbnVsbCB9O1xuXG5mdW5jdGlvbiBhZGRTY3JvbGxpbmdDbGFzcyhpLCB4KSB7XG4gIHZhciBjbGFzc0xpc3QgPSBpLmVsZW1lbnQuY2xhc3NMaXN0O1xuICB2YXIgY2xhc3NOYW1lID0gY2xzLnN0YXRlLnNjcm9sbGluZyh4KTtcblxuICBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICBjbGVhclRpbWVvdXQoc2Nyb2xsaW5nQ2xhc3NUaW1lb3V0W3hdKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2Nyb2xsaW5nQ2xhc3MoaSwgeCkge1xuICBzY3JvbGxpbmdDbGFzc1RpbWVvdXRbeF0gPSBzZXRUaW1lb3V0KFxuICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkuaXNBbGl2ZSAmJiBpLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbHMuc3RhdGUuc2Nyb2xsaW5nKHgpKTsgfSxcbiAgICBpLnNldHRpbmdzLnNjcm9sbGluZ1RocmVzaG9sZFxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxpbmdDbGFzc0luc3RhbnRseShpLCB4KSB7XG4gIGFkZFNjcm9sbGluZ0NsYXNzKGksIHgpO1xuICByZW1vdmVTY3JvbGxpbmdDbGFzcyhpLCB4KTtcbn1cblxudmFyIEV2ZW50RWxlbWVudCA9IGZ1bmN0aW9uIEV2ZW50RWxlbWVudChlbGVtZW50KSB7XG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIHRoaXMuaGFuZGxlcnMgPSB7fTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGlzRW1wdHk6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuRXZlbnRFbGVtZW50LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCAoZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5oYW5kbGVyc1tldmVudE5hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXSA9IFtdO1xuICB9XG4gIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXS5wdXNoKGhhbmRsZXIpO1xuICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RWxlbWVudC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kIChldmVudE5hbWUsIHRhcmdldCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXSA9IHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXS5maWx0ZXIoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICBpZiAodGFyZ2V0ICYmIGhhbmRsZXIgIT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRoaXMkMS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn07XG5cbkV2ZW50RWxlbWVudC5wcm90b3R5cGUudW5iaW5kQWxsID0gZnVuY3Rpb24gdW5iaW5kQWxsICgpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgdGhpcy51bmJpbmQobmFtZSk7XG4gIH1cbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5pc0VtcHR5LmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oYW5kbGVycykuZXZlcnkoXG4gICAgZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdGhpcyQxLmhhbmRsZXJzW2tleV0ubGVuZ3RoID09PSAwOyB9XG4gICk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggRXZlbnRFbGVtZW50LnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBFdmVudE1hbmFnZXIgPSBmdW5jdGlvbiBFdmVudE1hbmFnZXIoKSB7XG4gIHRoaXMuZXZlbnRFbGVtZW50cyA9IFtdO1xufTtcblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5ldmVudEVsZW1lbnQgPSBmdW5jdGlvbiBldmVudEVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgdmFyIGVlID0gdGhpcy5ldmVudEVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoZWUpIHsgcmV0dXJuIGVlLmVsZW1lbnQgPT09IGVsZW1lbnQ7IH0pWzBdO1xuICBpZiAoIWVlKSB7XG4gICAgZWUgPSBuZXcgRXZlbnRFbGVtZW50KGVsZW1lbnQpO1xuICAgIHRoaXMuZXZlbnRFbGVtZW50cy5wdXNoKGVlKTtcbiAgfVxuICByZXR1cm4gZWU7XG59O1xuXG5FdmVudE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kIChlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgdGhpcy5ldmVudEVsZW1lbnQoZWxlbWVudCkuYmluZChldmVudE5hbWUsIGhhbmRsZXIpO1xufTtcblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbiB1bmJpbmQgKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICB2YXIgZWUgPSB0aGlzLmV2ZW50RWxlbWVudChlbGVtZW50KTtcbiAgZWUudW5iaW5kKGV2ZW50TmFtZSwgaGFuZGxlcik7XG5cbiAgaWYgKGVlLmlzRW1wdHkpIHtcbiAgICAvLyByZW1vdmVcbiAgICB0aGlzLmV2ZW50RWxlbWVudHMuc3BsaWNlKHRoaXMuZXZlbnRFbGVtZW50cy5pbmRleE9mKGVlKSwgMSk7XG4gIH1cbn07XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUudW5iaW5kQWxsID0gZnVuY3Rpb24gdW5iaW5kQWxsICgpIHtcbiAgdGhpcy5ldmVudEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUudW5iaW5kQWxsKCk7IH0pO1xuICB0aGlzLmV2ZW50RWxlbWVudHMgPSBbXTtcbn07XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UgKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICB2YXIgZWUgPSB0aGlzLmV2ZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIG9uY2VIYW5kbGVyID0gZnVuY3Rpb24gKGV2dCkge1xuICAgIGVlLnVuYmluZChldmVudE5hbWUsIG9uY2VIYW5kbGVyKTtcbiAgICBoYW5kbGVyKGV2dCk7XG4gIH07XG4gIGVlLmJpbmQoZXZlbnROYW1lLCBvbmNlSGFuZGxlcik7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChuYW1lLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIGV2dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2Nyb2xsRGlmZihcbiAgaSxcbiAgYXhpcyxcbiAgZGlmZixcbiAgdXNlU2Nyb2xsaW5nQ2xhc3MsXG4gIGZvcmNlRmlyZVJlYWNoRXZlbnRcbikge1xuICBpZiAoIHVzZVNjcm9sbGluZ0NsYXNzID09PSB2b2lkIDAgKSB1c2VTY3JvbGxpbmdDbGFzcyA9IHRydWU7XG4gIGlmICggZm9yY2VGaXJlUmVhY2hFdmVudCA9PT0gdm9pZCAwICkgZm9yY2VGaXJlUmVhY2hFdmVudCA9IGZhbHNlO1xuXG4gIHZhciBmaWVsZHM7XG4gIGlmIChheGlzID09PSAndG9wJykge1xuICAgIGZpZWxkcyA9IFtcbiAgICAgICdjb250ZW50SGVpZ2h0JyxcbiAgICAgICdjb250YWluZXJIZWlnaHQnLFxuICAgICAgJ3Njcm9sbFRvcCcsXG4gICAgICAneScsXG4gICAgICAndXAnLFxuICAgICAgJ2Rvd24nIF07XG4gIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ2xlZnQnKSB7XG4gICAgZmllbGRzID0gW1xuICAgICAgJ2NvbnRlbnRXaWR0aCcsXG4gICAgICAnY29udGFpbmVyV2lkdGgnLFxuICAgICAgJ3Njcm9sbExlZnQnLFxuICAgICAgJ3gnLFxuICAgICAgJ2xlZnQnLFxuICAgICAgJ3JpZ2h0JyBdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBwcm9wZXIgYXhpcyBzaG91bGQgYmUgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIHByb2Nlc3NTY3JvbGxEaWZmJDEoaSwgZGlmZiwgZmllbGRzLCB1c2VTY3JvbGxpbmdDbGFzcywgZm9yY2VGaXJlUmVhY2hFdmVudCk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTY3JvbGxEaWZmJDEoXG4gIGksXG4gIGRpZmYsXG4gIHJlZixcbiAgdXNlU2Nyb2xsaW5nQ2xhc3MsXG4gIGZvcmNlRmlyZVJlYWNoRXZlbnRcbikge1xuICB2YXIgY29udGVudEhlaWdodCA9IHJlZlswXTtcbiAgdmFyIGNvbnRhaW5lckhlaWdodCA9IHJlZlsxXTtcbiAgdmFyIHNjcm9sbFRvcCA9IHJlZlsyXTtcbiAgdmFyIHkgPSByZWZbM107XG4gIHZhciB1cCA9IHJlZls0XTtcbiAgdmFyIGRvd24gPSByZWZbNV07XG4gIGlmICggdXNlU2Nyb2xsaW5nQ2xhc3MgPT09IHZvaWQgMCApIHVzZVNjcm9sbGluZ0NsYXNzID0gdHJ1ZTtcbiAgaWYgKCBmb3JjZUZpcmVSZWFjaEV2ZW50ID09PSB2b2lkIDAgKSBmb3JjZUZpcmVSZWFjaEV2ZW50ID0gZmFsc2U7XG5cbiAgdmFyIGVsZW1lbnQgPSBpLmVsZW1lbnQ7XG5cbiAgLy8gcmVzZXQgcmVhY2hcbiAgaS5yZWFjaFt5XSA9IG51bGw7XG5cbiAgLy8gMSBmb3Igc3VicGl4ZWwgcm91bmRpbmdcbiAgaWYgKGVsZW1lbnRbc2Nyb2xsVG9wXSA8IDEpIHtcbiAgICBpLnJlYWNoW3ldID0gJ3N0YXJ0JztcbiAgfVxuXG4gIC8vIDEgZm9yIHN1YnBpeGVsIHJvdW5kaW5nXG4gIGlmIChlbGVtZW50W3Njcm9sbFRvcF0gPiBpW2NvbnRlbnRIZWlnaHRdIC0gaVtjb250YWluZXJIZWlnaHRdIC0gMSkge1xuICAgIGkucmVhY2hbeV0gPSAnZW5kJztcbiAgfVxuXG4gIGlmIChkaWZmKSB7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KChcInBzLXNjcm9sbC1cIiArIHkpKSk7XG5cbiAgICBpZiAoZGlmZiA8IDApIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudCgoXCJwcy1zY3JvbGwtXCIgKyB1cCkpKTtcbiAgICB9IGVsc2UgaWYgKGRpZmYgPiAwKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoKFwicHMtc2Nyb2xsLVwiICsgZG93bikpKTtcbiAgICB9XG5cbiAgICBpZiAodXNlU2Nyb2xsaW5nQ2xhc3MpIHtcbiAgICAgIHNldFNjcm9sbGluZ0NsYXNzSW5zdGFudGx5KGksIHkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpLnJlYWNoW3ldICYmIChkaWZmIHx8IGZvcmNlRmlyZVJlYWNoRXZlbnQpKSB7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KChcInBzLVwiICsgeSArIFwiLXJlYWNoLVwiICsgKGkucmVhY2hbeV0pKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvSW50KHgpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHgsIDEwKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBpc0VkaXRhYmxlKGVsKSB7XG4gIHJldHVybiAoXG4gICAgbWF0Y2hlcyhlbCwgJ2lucHV0LFtjb250ZW50ZWRpdGFibGVdJykgfHxcbiAgICBtYXRjaGVzKGVsLCAnc2VsZWN0LFtjb250ZW50ZWRpdGFibGVdJykgfHxcbiAgICBtYXRjaGVzKGVsLCAndGV4dGFyZWEsW2NvbnRlbnRlZGl0YWJsZV0nKSB8fFxuICAgIG1hdGNoZXMoZWwsICdidXR0b24sW2NvbnRlbnRlZGl0YWJsZV0nKVxuICApO1xufVxuXG5mdW5jdGlvbiBvdXRlcldpZHRoKGVsZW1lbnQpIHtcbiAgdmFyIHN0eWxlcyA9IGdldChlbGVtZW50KTtcbiAgcmV0dXJuIChcbiAgICB0b0ludChzdHlsZXMud2lkdGgpICtcbiAgICB0b0ludChzdHlsZXMucGFkZGluZ0xlZnQpICtcbiAgICB0b0ludChzdHlsZXMucGFkZGluZ1JpZ2h0KSArXG4gICAgdG9JbnQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCkgK1xuICAgIHRvSW50KHN0eWxlcy5ib3JkZXJSaWdodFdpZHRoKVxuICApO1xufVxuXG52YXIgZW52ID0ge1xuICBpc1dlYktpdDpcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgJ1dlYmtpdEFwcGVhcmFuY2UnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxcbiAgc3VwcG9ydHNUb3VjaDpcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHxcbiAgICAgICgnbWF4VG91Y2hQb2ludHMnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApIHx8XG4gICAgICAod2luZG93LkRvY3VtZW50VG91Y2ggJiYgZG9jdW1lbnQgaW5zdGFuY2VvZiB3aW5kb3cuRG9jdW1lbnRUb3VjaCkpLFxuICBzdXBwb3J0c0llUG9pbnRlcjpcbiAgICB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyxcbiAgaXNDaHJvbWU6XG4gICAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvQ2hyb21lL2kudGVzdChuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCksXG59O1xuXG5mdW5jdGlvbiB1cGRhdGVHZW9tZXRyeShpKSB7XG4gIHZhciBlbGVtZW50ID0gaS5lbGVtZW50O1xuICB2YXIgcm91bmRlZFNjcm9sbFRvcCA9IE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxUb3ApO1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgaS5jb250YWluZXJXaWR0aCA9IE1hdGguY2VpbChyZWN0LndpZHRoKTtcbiAgaS5jb250YWluZXJIZWlnaHQgPSBNYXRoLmNlaWwocmVjdC5oZWlnaHQpO1xuICBpLmNvbnRlbnRXaWR0aCA9IGVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIGkuY29udGVudEhlaWdodCA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuXG4gIGlmICghZWxlbWVudC5jb250YWlucyhpLnNjcm9sbGJhclhSYWlsKSkge1xuICAgIC8vIGNsZWFuIHVwIGFuZCBhcHBlbmRcbiAgICBxdWVyeUNoaWxkcmVuKGVsZW1lbnQsIGNscy5lbGVtZW50LnJhaWwoJ3gnKSkuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHJlbW92ZShlbCk7IH1cbiAgICApO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaS5zY3JvbGxiYXJYUmFpbCk7XG4gIH1cbiAgaWYgKCFlbGVtZW50LmNvbnRhaW5zKGkuc2Nyb2xsYmFyWVJhaWwpKSB7XG4gICAgLy8gY2xlYW4gdXAgYW5kIGFwcGVuZFxuICAgIHF1ZXJ5Q2hpbGRyZW4oZWxlbWVudCwgY2xzLmVsZW1lbnQucmFpbCgneScpKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gcmVtb3ZlKGVsKTsgfVxuICAgICk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChpLnNjcm9sbGJhcllSYWlsKTtcbiAgfVxuXG4gIGlmIChcbiAgICAhaS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFggJiZcbiAgICBpLmNvbnRhaW5lcldpZHRoICsgaS5zZXR0aW5ncy5zY3JvbGxYTWFyZ2luT2Zmc2V0IDwgaS5jb250ZW50V2lkdGhcbiAgKSB7XG4gICAgaS5zY3JvbGxiYXJYQWN0aXZlID0gdHJ1ZTtcbiAgICBpLnJhaWxYV2lkdGggPSBpLmNvbnRhaW5lcldpZHRoIC0gaS5yYWlsWE1hcmdpbldpZHRoO1xuICAgIGkucmFpbFhSYXRpbyA9IGkuY29udGFpbmVyV2lkdGggLyBpLnJhaWxYV2lkdGg7XG4gICAgaS5zY3JvbGxiYXJYV2lkdGggPSBnZXRUaHVtYlNpemUoXG4gICAgICBpLFxuICAgICAgdG9JbnQoKGkucmFpbFhXaWR0aCAqIGkuY29udGFpbmVyV2lkdGgpIC8gaS5jb250ZW50V2lkdGgpXG4gICAgKTtcbiAgICBpLnNjcm9sbGJhclhMZWZ0ID0gdG9JbnQoXG4gICAgICAoKGkubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICsgZWxlbWVudC5zY3JvbGxMZWZ0KSAqXG4gICAgICAgIChpLnJhaWxYV2lkdGggLSBpLnNjcm9sbGJhclhXaWR0aCkpIC9cbiAgICAgICAgKGkuY29udGVudFdpZHRoIC0gaS5jb250YWluZXJXaWR0aClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGkuc2Nyb2xsYmFyWEFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFpLnNldHRpbmdzLnN1cHByZXNzU2Nyb2xsWSAmJlxuICAgIGkuY29udGFpbmVySGVpZ2h0ICsgaS5zZXR0aW5ncy5zY3JvbGxZTWFyZ2luT2Zmc2V0IDwgaS5jb250ZW50SGVpZ2h0XG4gICkge1xuICAgIGkuc2Nyb2xsYmFyWUFjdGl2ZSA9IHRydWU7XG4gICAgaS5yYWlsWUhlaWdodCA9IGkuY29udGFpbmVySGVpZ2h0IC0gaS5yYWlsWU1hcmdpbkhlaWdodDtcbiAgICBpLnJhaWxZUmF0aW8gPSBpLmNvbnRhaW5lckhlaWdodCAvIGkucmFpbFlIZWlnaHQ7XG4gICAgaS5zY3JvbGxiYXJZSGVpZ2h0ID0gZ2V0VGh1bWJTaXplKFxuICAgICAgaSxcbiAgICAgIHRvSW50KChpLnJhaWxZSGVpZ2h0ICogaS5jb250YWluZXJIZWlnaHQpIC8gaS5jb250ZW50SGVpZ2h0KVxuICAgICk7XG4gICAgaS5zY3JvbGxiYXJZVG9wID0gdG9JbnQoXG4gICAgICAocm91bmRlZFNjcm9sbFRvcCAqIChpLnJhaWxZSGVpZ2h0IC0gaS5zY3JvbGxiYXJZSGVpZ2h0KSkgL1xuICAgICAgICAoaS5jb250ZW50SGVpZ2h0IC0gaS5jb250YWluZXJIZWlnaHQpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBpLnNjcm9sbGJhcllBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpLnNjcm9sbGJhclhMZWZ0ID49IGkucmFpbFhXaWR0aCAtIGkuc2Nyb2xsYmFyWFdpZHRoKSB7XG4gICAgaS5zY3JvbGxiYXJYTGVmdCA9IGkucmFpbFhXaWR0aCAtIGkuc2Nyb2xsYmFyWFdpZHRoO1xuICB9XG4gIGlmIChpLnNjcm9sbGJhcllUb3AgPj0gaS5yYWlsWUhlaWdodCAtIGkuc2Nyb2xsYmFyWUhlaWdodCkge1xuICAgIGkuc2Nyb2xsYmFyWVRvcCA9IGkucmFpbFlIZWlnaHQgLSBpLnNjcm9sbGJhcllIZWlnaHQ7XG4gIH1cblxuICB1cGRhdGVDc3MoZWxlbWVudCwgaSk7XG5cbiAgaWYgKGkuc2Nyb2xsYmFyWEFjdGl2ZSkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbHMuc3RhdGUuYWN0aXZlKCd4JykpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbHMuc3RhdGUuYWN0aXZlKCd4JykpO1xuICAgIGkuc2Nyb2xsYmFyWFdpZHRoID0gMDtcbiAgICBpLnNjcm9sbGJhclhMZWZ0ID0gMDtcbiAgICBlbGVtZW50LnNjcm9sbExlZnQgPSBpLmlzUnRsID09PSB0cnVlID8gaS5jb250ZW50V2lkdGggOiAwO1xuICB9XG4gIGlmIChpLnNjcm9sbGJhcllBY3RpdmUpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xzLnN0YXRlLmFjdGl2ZSgneScpKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xzLnN0YXRlLmFjdGl2ZSgneScpKTtcbiAgICBpLnNjcm9sbGJhcllIZWlnaHQgPSAwO1xuICAgIGkuc2Nyb2xsYmFyWVRvcCA9IDA7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRodW1iU2l6ZShpLCB0aHVtYlNpemUpIHtcbiAgaWYgKGkuc2V0dGluZ3MubWluU2Nyb2xsYmFyTGVuZ3RoKSB7XG4gICAgdGh1bWJTaXplID0gTWF0aC5tYXgodGh1bWJTaXplLCBpLnNldHRpbmdzLm1pblNjcm9sbGJhckxlbmd0aCk7XG4gIH1cbiAgaWYgKGkuc2V0dGluZ3MubWF4U2Nyb2xsYmFyTGVuZ3RoKSB7XG4gICAgdGh1bWJTaXplID0gTWF0aC5taW4odGh1bWJTaXplLCBpLnNldHRpbmdzLm1heFNjcm9sbGJhckxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHRodW1iU2l6ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ3NzKGVsZW1lbnQsIGkpIHtcbiAgdmFyIHhSYWlsT2Zmc2V0ID0geyB3aWR0aDogaS5yYWlsWFdpZHRoIH07XG4gIHZhciByb3VuZGVkU2Nyb2xsVG9wID0gTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbFRvcCk7XG5cbiAgaWYgKGkuaXNSdGwpIHtcbiAgICB4UmFpbE9mZnNldC5sZWZ0ID1cbiAgICAgIGkubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCArXG4gICAgICBpLmNvbnRhaW5lcldpZHRoIC1cbiAgICAgIGkuY29udGVudFdpZHRoO1xuICB9IGVsc2Uge1xuICAgIHhSYWlsT2Zmc2V0LmxlZnQgPSBlbGVtZW50LnNjcm9sbExlZnQ7XG4gIH1cbiAgaWYgKGkuaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20pIHtcbiAgICB4UmFpbE9mZnNldC5ib3R0b20gPSBpLnNjcm9sbGJhclhCb3R0b20gLSByb3VuZGVkU2Nyb2xsVG9wO1xuICB9IGVsc2Uge1xuICAgIHhSYWlsT2Zmc2V0LnRvcCA9IGkuc2Nyb2xsYmFyWFRvcCArIHJvdW5kZWRTY3JvbGxUb3A7XG4gIH1cbiAgc2V0KGkuc2Nyb2xsYmFyWFJhaWwsIHhSYWlsT2Zmc2V0KTtcblxuICB2YXIgeVJhaWxPZmZzZXQgPSB7IHRvcDogcm91bmRlZFNjcm9sbFRvcCwgaGVpZ2h0OiBpLnJhaWxZSGVpZ2h0IH07XG4gIGlmIChpLmlzU2Nyb2xsYmFyWVVzaW5nUmlnaHQpIHtcbiAgICBpZiAoaS5pc1J0bCkge1xuICAgICAgeVJhaWxPZmZzZXQucmlnaHQgPVxuICAgICAgICBpLmNvbnRlbnRXaWR0aCAtXG4gICAgICAgIChpLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCArIGVsZW1lbnQuc2Nyb2xsTGVmdCkgLVxuICAgICAgICBpLnNjcm9sbGJhcllSaWdodCAtXG4gICAgICAgIGkuc2Nyb2xsYmFyWU91dGVyV2lkdGggLVxuICAgICAgICA5O1xuICAgIH0gZWxzZSB7XG4gICAgICB5UmFpbE9mZnNldC5yaWdodCA9IGkuc2Nyb2xsYmFyWVJpZ2h0IC0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaS5pc1J0bCkge1xuICAgICAgeVJhaWxPZmZzZXQubGVmdCA9XG4gICAgICAgIGkubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ICtcbiAgICAgICAgaS5jb250YWluZXJXaWR0aCAqIDIgLVxuICAgICAgICBpLmNvbnRlbnRXaWR0aCAtXG4gICAgICAgIGkuc2Nyb2xsYmFyWUxlZnQgLVxuICAgICAgICBpLnNjcm9sbGJhcllPdXRlcldpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB5UmFpbE9mZnNldC5sZWZ0ID0gaS5zY3JvbGxiYXJZTGVmdCArIGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH1cbiAgc2V0KGkuc2Nyb2xsYmFyWVJhaWwsIHlSYWlsT2Zmc2V0KTtcblxuICBzZXQoaS5zY3JvbGxiYXJYLCB7XG4gICAgbGVmdDogaS5zY3JvbGxiYXJYTGVmdCxcbiAgICB3aWR0aDogaS5zY3JvbGxiYXJYV2lkdGggLSBpLnJhaWxCb3JkZXJYV2lkdGgsXG4gIH0pO1xuICBzZXQoaS5zY3JvbGxiYXJZLCB7XG4gICAgdG9wOiBpLnNjcm9sbGJhcllUb3AsXG4gICAgaGVpZ2h0OiBpLnNjcm9sbGJhcllIZWlnaHQgLSBpLnJhaWxCb3JkZXJZV2lkdGgsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGlja1JhaWwoaSkge1xuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJZLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7IH0pO1xuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJZUmFpbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHBvc2l0aW9uVG9wID1cbiAgICAgIGUucGFnZVkgLVxuICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0IC1cbiAgICAgIGkuc2Nyb2xsYmFyWVJhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIHZhciBkaXJlY3Rpb24gPSBwb3NpdGlvblRvcCA+IGkuc2Nyb2xsYmFyWVRvcCA/IDEgOiAtMTtcblxuICAgIGkuZWxlbWVudC5zY3JvbGxUb3AgKz0gZGlyZWN0aW9uICogaS5jb250YWluZXJIZWlnaHQ7XG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9KTtcblxuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJYLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7IH0pO1xuICBpLmV2ZW50LmJpbmQoaS5zY3JvbGxiYXJYUmFpbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHBvc2l0aW9uTGVmdCA9XG4gICAgICBlLnBhZ2VYIC1cbiAgICAgIHdpbmRvdy5wYWdlWE9mZnNldCAtXG4gICAgICBpLnNjcm9sbGJhclhSYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHBvc2l0aW9uTGVmdCA+IGkuc2Nyb2xsYmFyWExlZnQgPyAxIDogLTE7XG5cbiAgICBpLmVsZW1lbnQuc2Nyb2xsTGVmdCArPSBkaXJlY3Rpb24gKiBpLmNvbnRhaW5lcldpZHRoO1xuICAgIHVwZGF0ZUdlb21ldHJ5KGkpO1xuXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRyYWdUaHVtYihpKSB7XG4gIGJpbmRNb3VzZVNjcm9sbEhhbmRsZXIoaSwgW1xuICAgICdjb250YWluZXJXaWR0aCcsXG4gICAgJ2NvbnRlbnRXaWR0aCcsXG4gICAgJ3BhZ2VYJyxcbiAgICAncmFpbFhXaWR0aCcsXG4gICAgJ3Njcm9sbGJhclgnLFxuICAgICdzY3JvbGxiYXJYV2lkdGgnLFxuICAgICdzY3JvbGxMZWZ0JyxcbiAgICAneCcsXG4gICAgJ3Njcm9sbGJhclhSYWlsJyBdKTtcbiAgYmluZE1vdXNlU2Nyb2xsSGFuZGxlcihpLCBbXG4gICAgJ2NvbnRhaW5lckhlaWdodCcsXG4gICAgJ2NvbnRlbnRIZWlnaHQnLFxuICAgICdwYWdlWScsXG4gICAgJ3JhaWxZSGVpZ2h0JyxcbiAgICAnc2Nyb2xsYmFyWScsXG4gICAgJ3Njcm9sbGJhcllIZWlnaHQnLFxuICAgICdzY3JvbGxUb3AnLFxuICAgICd5JyxcbiAgICAnc2Nyb2xsYmFyWVJhaWwnIF0pO1xufVxuXG5mdW5jdGlvbiBiaW5kTW91c2VTY3JvbGxIYW5kbGVyKFxuICBpLFxuICByZWZcbikge1xuICB2YXIgY29udGFpbmVySGVpZ2h0ID0gcmVmWzBdO1xuICB2YXIgY29udGVudEhlaWdodCA9IHJlZlsxXTtcbiAgdmFyIHBhZ2VZID0gcmVmWzJdO1xuICB2YXIgcmFpbFlIZWlnaHQgPSByZWZbM107XG4gIHZhciBzY3JvbGxiYXJZID0gcmVmWzRdO1xuICB2YXIgc2Nyb2xsYmFyWUhlaWdodCA9IHJlZls1XTtcbiAgdmFyIHNjcm9sbFRvcCA9IHJlZls2XTtcbiAgdmFyIHkgPSByZWZbN107XG4gIHZhciBzY3JvbGxiYXJZUmFpbCA9IHJlZls4XTtcblxuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICB2YXIgc3RhcnRpbmdTY3JvbGxUb3AgPSBudWxsO1xuICB2YXIgc3RhcnRpbmdNb3VzZVBhZ2VZID0gbnVsbDtcbiAgdmFyIHNjcm9sbEJ5ID0gbnVsbDtcblxuICBmdW5jdGlvbiBtb3VzZU1vdmVIYW5kbGVyKGUpIHtcbiAgICBpZiAoZS50b3VjaGVzICYmIGUudG91Y2hlc1swXSkge1xuICAgICAgZVtwYWdlWV0gPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgfVxuICAgIGVsZW1lbnRbc2Nyb2xsVG9wXSA9XG4gICAgICBzdGFydGluZ1Njcm9sbFRvcCArIHNjcm9sbEJ5ICogKGVbcGFnZVldIC0gc3RhcnRpbmdNb3VzZVBhZ2VZKTtcbiAgICBhZGRTY3JvbGxpbmdDbGFzcyhpLCB5KTtcbiAgICB1cGRhdGVHZW9tZXRyeShpKTtcblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2VVcEhhbmRsZXIoKSB7XG4gICAgcmVtb3ZlU2Nyb2xsaW5nQ2xhc3MoaSwgeSk7XG4gICAgaVtzY3JvbGxiYXJZUmFpbF0uY2xhc3NMaXN0LnJlbW92ZShjbHMuc3RhdGUuY2xpY2tpbmcpO1xuICAgIGkuZXZlbnQudW5iaW5kKGkub3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gYmluZE1vdmVzKGUsIHRvdWNoTW9kZSkge1xuICAgIHN0YXJ0aW5nU2Nyb2xsVG9wID0gZWxlbWVudFtzY3JvbGxUb3BdO1xuICAgIGlmICh0b3VjaE1vZGUgJiYgZS50b3VjaGVzKSB7XG4gICAgICBlW3BhZ2VZXSA9IGUudG91Y2hlc1swXS5wYWdlWTtcbiAgICB9XG4gICAgc3RhcnRpbmdNb3VzZVBhZ2VZID0gZVtwYWdlWV07XG4gICAgc2Nyb2xsQnkgPVxuICAgICAgKGlbY29udGVudEhlaWdodF0gLSBpW2NvbnRhaW5lckhlaWdodF0pIC9cbiAgICAgIChpW3JhaWxZSGVpZ2h0XSAtIGlbc2Nyb2xsYmFyWUhlaWdodF0pO1xuICAgIGlmICghdG91Y2hNb2RlKSB7XG4gICAgICBpLmV2ZW50LmJpbmQoaS5vd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICBpLmV2ZW50Lm9uY2UoaS5vd25lckRvY3VtZW50LCAnbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaS5ldmVudC5iaW5kKGkub3duZXJEb2N1bWVudCwgJ3RvdWNobW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICAgIH1cblxuICAgIGlbc2Nyb2xsYmFyWVJhaWxdLmNsYXNzTGlzdC5hZGQoY2xzLnN0YXRlLmNsaWNraW5nKTtcblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBpLmV2ZW50LmJpbmQoaVtzY3JvbGxiYXJZXSwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgYmluZE1vdmVzKGUpO1xuICB9KTtcbiAgaS5ldmVudC5iaW5kKGlbc2Nyb2xsYmFyWV0sICd0b3VjaHN0YXJ0JywgZnVuY3Rpb24gKGUpIHtcbiAgICBiaW5kTW92ZXMoZSwgdHJ1ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBrZXlib2FyZChpKSB7XG4gIHZhciBlbGVtZW50ID0gaS5lbGVtZW50O1xuXG4gIHZhciBlbGVtZW50SG92ZXJlZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCwgJzpob3ZlcicpOyB9O1xuICB2YXIgc2Nyb2xsYmFyRm9jdXNlZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGNoZXMoaS5zY3JvbGxiYXJYLCAnOmZvY3VzJykgfHwgbWF0Y2hlcyhpLnNjcm9sbGJhclksICc6Zm9jdXMnKTsgfTtcblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50RGVmYXVsdChkZWx0YVgsIGRlbHRhWSkge1xuICAgIHZhciBzY3JvbGxUb3AgPSBNYXRoLmZsb29yKGVsZW1lbnQuc2Nyb2xsVG9wKTtcbiAgICBpZiAoZGVsdGFYID09PSAwKSB7XG4gICAgICBpZiAoIWkuc2Nyb2xsYmFyWUFjdGl2ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChzY3JvbGxUb3AgPT09IDAgJiYgZGVsdGFZID4gMCkgfHxcbiAgICAgICAgKHNjcm9sbFRvcCA+PSBpLmNvbnRlbnRIZWlnaHQgLSBpLmNvbnRhaW5lckhlaWdodCAmJiBkZWx0YVkgPCAwKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAhaS5zZXR0aW5ncy53aGVlbFByb3BhZ2F0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzY3JvbGxMZWZ0ID0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGlmIChkZWx0YVkgPT09IDApIHtcbiAgICAgIGlmICghaS5zY3JvbGxiYXJYQWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKHNjcm9sbExlZnQgPT09IDAgJiYgZGVsdGFYIDwgMCkgfHxcbiAgICAgICAgKHNjcm9sbExlZnQgPj0gaS5jb250ZW50V2lkdGggLSBpLmNvbnRhaW5lcldpZHRoICYmIGRlbHRhWCA+IDApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICFpLnNldHRpbmdzLndoZWVsUHJvcGFnYXRpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaS5ldmVudC5iaW5kKGkub3duZXJEb2N1bWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChcbiAgICAgIChlLmlzRGVmYXVsdFByZXZlbnRlZCAmJiBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB8fFxuICAgICAgZS5kZWZhdWx0UHJldmVudGVkXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50SG92ZXJlZCgpICYmICFzY3JvbGxiYXJGb2N1c2VkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICAgID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgOiBpLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0lGUkFNRScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnbyBkZWVwZXIgaWYgZWxlbWVudCBpcyBhIHdlYmNvbXBvbmVudFxuICAgICAgICB3aGlsZSAoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KSB7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNFZGl0YWJsZShhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhWCA9IDA7XG4gICAgdmFyIGRlbHRhWSA9IDA7XG5cbiAgICBzd2l0Y2ggKGUud2hpY2gpIHtcbiAgICAgIGNhc2UgMzc6IC8vIGxlZnRcbiAgICAgICAgaWYgKGUubWV0YUtleSkge1xuICAgICAgICAgIGRlbHRhWCA9IC1pLmNvbnRlbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChlLmFsdEtleSkge1xuICAgICAgICAgIGRlbHRhWCA9IC1pLmNvbnRhaW5lcldpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhWCA9IC0zMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzg6IC8vIHVwXG4gICAgICAgIGlmIChlLm1ldGFLZXkpIHtcbiAgICAgICAgICBkZWx0YVkgPSBpLmNvbnRlbnRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5hbHRLZXkpIHtcbiAgICAgICAgICBkZWx0YVkgPSBpLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWx0YVkgPSAzMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzk6IC8vIHJpZ2h0XG4gICAgICAgIGlmIChlLm1ldGFLZXkpIHtcbiAgICAgICAgICBkZWx0YVggPSBpLmNvbnRlbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChlLmFsdEtleSkge1xuICAgICAgICAgIGRlbHRhWCA9IGkuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsdGFYID0gMzA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQwOiAvLyBkb3duXG4gICAgICAgIGlmIChlLm1ldGFLZXkpIHtcbiAgICAgICAgICBkZWx0YVkgPSAtaS5jb250ZW50SGVpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKGUuYWx0S2V5KSB7XG4gICAgICAgICAgZGVsdGFZID0gLWkuY29udGFpbmVySGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhWSA9IC0zMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzI6IC8vIHNwYWNlIGJhclxuICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgIGRlbHRhWSA9IGkuY29udGFpbmVySGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhWSA9IC1pLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzM6IC8vIHBhZ2UgdXBcbiAgICAgICAgZGVsdGFZID0gaS5jb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzNDogLy8gcGFnZSBkb3duXG4gICAgICAgIGRlbHRhWSA9IC1pLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM2OiAvLyBob21lXG4gICAgICAgIGRlbHRhWSA9IGkuY29udGVudEhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM1OiAvLyBlbmRcbiAgICAgICAgZGVsdGFZID0gLWkuY29udGVudEhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGkuc2V0dGluZ3Muc3VwcHJlc3NTY3JvbGxYICYmIGRlbHRhWCAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFkgJiYgZGVsdGFZICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5zY3JvbGxUb3AgLT0gZGVsdGFZO1xuICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCArPSBkZWx0YVg7XG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG5cbiAgICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQoZGVsdGFYLCBkZWx0YVkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2hlZWwoaSkge1xuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50RGVmYXVsdChkZWx0YVgsIGRlbHRhWSkge1xuICAgIHZhciByb3VuZGVkU2Nyb2xsVG9wID0gTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgdmFyIGlzVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgPT09IDA7XG4gICAgdmFyIGlzQm90dG9tID1cbiAgICAgIHJvdW5kZWRTY3JvbGxUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCA9PT0gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgdmFyIGlzTGVmdCA9IGVsZW1lbnQuc2Nyb2xsTGVmdCA9PT0gMDtcbiAgICB2YXIgaXNSaWdodCA9XG4gICAgICBlbGVtZW50LnNjcm9sbExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoID09PSBlbGVtZW50LnNjcm9sbFdpZHRoO1xuXG4gICAgdmFyIGhpdHNCb3VuZDtcblxuICAgIC8vIHBpY2sgYXhpcyB3aXRoIHByaW1hcnkgZGlyZWN0aW9uXG4gICAgaWYgKE1hdGguYWJzKGRlbHRhWSkgPiBNYXRoLmFicyhkZWx0YVgpKSB7XG4gICAgICBoaXRzQm91bmQgPSBpc1RvcCB8fCBpc0JvdHRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGl0c0JvdW5kID0gaXNMZWZ0IHx8IGlzUmlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdHNCb3VuZCA/ICFpLnNldHRpbmdzLndoZWVsUHJvcGFnYXRpb24gOiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVsdGFGcm9tRXZlbnQoZSkge1xuICAgIHZhciBkZWx0YVggPSBlLmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gLTEgKiBlLmRlbHRhWTtcblxuICAgIGlmICh0eXBlb2YgZGVsdGFYID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZGVsdGFZID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gT1MgWCBTYWZhcmlcbiAgICAgIGRlbHRhWCA9ICgtMSAqIGUud2hlZWxEZWx0YVgpIC8gNjtcbiAgICAgIGRlbHRhWSA9IGUud2hlZWxEZWx0YVkgLyA2O1xuICAgIH1cblxuICAgIGlmIChlLmRlbHRhTW9kZSAmJiBlLmRlbHRhTW9kZSA9PT0gMSkge1xuICAgICAgLy8gRmlyZWZveCBpbiBkZWx0YU1vZGUgMTogTGluZSBzY3JvbGxpbmdcbiAgICAgIGRlbHRhWCAqPSAxMDtcbiAgICAgIGRlbHRhWSAqPSAxMDtcbiAgICB9XG5cbiAgICBpZiAoZGVsdGFYICE9PSBkZWx0YVggJiYgZGVsdGFZICE9PSBkZWx0YVkgLyogTmFOIGNoZWNrcyAqLykge1xuICAgICAgLy8gSUUgaW4gc29tZSBtb3VzZSBkcml2ZXJzXG4gICAgICBkZWx0YVggPSAwO1xuICAgICAgZGVsdGFZID0gZS53aGVlbERlbHRhO1xuICAgIH1cblxuICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAvLyByZXZlcnNlIGF4aXMgd2l0aCBzaGlmdCBrZXlcbiAgICAgIHJldHVybiBbLWRlbHRhWSwgLWRlbHRhWF07XG4gICAgfVxuICAgIHJldHVybiBbZGVsdGFYLCBkZWx0YVldO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkQmVDb25zdW1lZEJ5Q2hpbGQodGFyZ2V0LCBkZWx0YVgsIGRlbHRhWSkge1xuICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHNlbGVjdD4gaXNzdWUgaW4gRkYgYW5kIElFICM1NzFcbiAgICBpZiAoIWVudi5pc1dlYktpdCAmJiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdDpmb2N1cycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBjdXJzb3IgPSB0YXJnZXQ7XG5cbiAgICB3aGlsZSAoY3Vyc29yICYmIGN1cnNvciAhPT0gZWxlbWVudCkge1xuICAgICAgaWYgKGN1cnNvci5jbGFzc0xpc3QuY29udGFpbnMoY2xzLmVsZW1lbnQuY29uc3VtaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlID0gZ2V0KGN1cnNvcik7XG5cbiAgICAgIC8vIGlmIGRlbHRhWSAmJiB2ZXJ0aWNhbCBzY3JvbGxhYmxlXG4gICAgICBpZiAoZGVsdGFZICYmIHN0eWxlLm92ZXJmbG93WS5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBtYXhTY3JvbGxUb3AgPSBjdXJzb3Iuc2Nyb2xsSGVpZ2h0IC0gY3Vyc29yLmNsaWVudEhlaWdodDtcbiAgICAgICAgaWYgKG1heFNjcm9sbFRvcCA+IDApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbFRvcCA+IDAgJiYgZGVsdGFZIDwgMCkgfHxcbiAgICAgICAgICAgIChjdXJzb3Iuc2Nyb2xsVG9wIDwgbWF4U2Nyb2xsVG9wICYmIGRlbHRhWSA+IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIGRlbHRhWCAmJiBob3Jpem9udGFsIHNjcm9sbGFibGVcbiAgICAgIGlmIChkZWx0YVggJiYgc3R5bGUub3ZlcmZsb3dYLm1hdGNoKC8oc2Nyb2xsfGF1dG8pLykpIHtcbiAgICAgICAgdmFyIG1heFNjcm9sbExlZnQgPSBjdXJzb3Iuc2Nyb2xsV2lkdGggLSBjdXJzb3IuY2xpZW50V2lkdGg7XG4gICAgICAgIGlmIChtYXhTY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChjdXJzb3Iuc2Nyb2xsTGVmdCA+IDAgJiYgZGVsdGFYIDwgMCkgfHxcbiAgICAgICAgICAgIChjdXJzb3Iuc2Nyb2xsTGVmdCA8IG1heFNjcm9sbExlZnQgJiYgZGVsdGFYID4gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJzb3IgPSBjdXJzb3IucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZXdoZWVsSGFuZGxlcihlKSB7XG4gICAgdmFyIHJlZiA9IGdldERlbHRhRnJvbUV2ZW50KGUpO1xuICAgIHZhciBkZWx0YVggPSByZWZbMF07XG4gICAgdmFyIGRlbHRhWSA9IHJlZlsxXTtcblxuICAgIGlmIChzaG91bGRCZUNvbnN1bWVkQnlDaGlsZChlLnRhcmdldCwgZGVsdGFYLCBkZWx0YVkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFByZXZlbnQgPSBmYWxzZTtcbiAgICBpZiAoIWkuc2V0dGluZ3MudXNlQm90aFdoZWVsQXhlcykge1xuICAgICAgLy8gZGVsdGFYIHdpbGwgb25seSBiZSB1c2VkIGZvciBob3Jpem9udGFsIHNjcm9sbGluZyBhbmQgZGVsdGFZIHdpbGxcbiAgICAgIC8vIG9ubHkgYmUgdXNlZCBmb3IgdmVydGljYWwgc2Nyb2xsaW5nIC0gdGhpcyBpcyB0aGUgZGVmYXVsdFxuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgLT0gZGVsdGFZICogaS5zZXR0aW5ncy53aGVlbFNwZWVkO1xuICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ICs9IGRlbHRhWCAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICB9IGVsc2UgaWYgKGkuc2Nyb2xsYmFyWUFjdGl2ZSAmJiAhaS5zY3JvbGxiYXJYQWN0aXZlKSB7XG4gICAgICAvLyBvbmx5IHZlcnRpY2FsIHNjcm9sbGJhciBpcyBhY3RpdmUgYW5kIHVzZUJvdGhXaGVlbEF4ZXMgb3B0aW9uIGlzXG4gICAgICAvLyBhY3RpdmUsIHNvIGxldCdzIHNjcm9sbCB2ZXJ0aWNhbCBiYXIgdXNpbmcgYm90aCBtb3VzZSB3aGVlbCBheGVzXG4gICAgICBpZiAoZGVsdGFZKSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wIC09IGRlbHRhWSAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wICs9IGRlbHRhWCAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICAgIH1cbiAgICAgIHNob3VsZFByZXZlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaS5zY3JvbGxiYXJYQWN0aXZlICYmICFpLnNjcm9sbGJhcllBY3RpdmUpIHtcbiAgICAgIC8vIHVzZUJvdGhXaGVlbEF4ZXMgYW5kIG9ubHkgaG9yaXpvbnRhbCBiYXIgaXMgYWN0aXZlLCBzbyB1c2UgYm90aFxuICAgICAgLy8gd2hlZWwgYXhlcyBmb3IgaG9yaXpvbnRhbCBiYXJcbiAgICAgIGlmIChkZWx0YVgpIHtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ICs9IGRlbHRhWCAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCAtPSBkZWx0YVkgKiBpLnNldHRpbmdzLndoZWVsU3BlZWQ7XG4gICAgICB9XG4gICAgICBzaG91bGRQcmV2ZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGVHZW9tZXRyeShpKTtcblxuICAgIHNob3VsZFByZXZlbnQgPSBzaG91bGRQcmV2ZW50IHx8IHNob3VsZFByZXZlbnREZWZhdWx0KGRlbHRhWCwgZGVsdGFZKTtcbiAgICBpZiAoc2hvdWxkUHJldmVudCAmJiAhZS5jdHJsS2V5KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygd2luZG93Lm9ud2hlZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICd3aGVlbCcsIG1vdXNld2hlZWxIYW5kbGVyKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93Lm9ubW91c2V3aGVlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ21vdXNld2hlZWwnLCBtb3VzZXdoZWVsSGFuZGxlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG91Y2goaSkge1xuICBpZiAoIWVudi5zdXBwb3J0c1RvdWNoICYmICFlbnYuc3VwcG9ydHNJZVBvaW50ZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50KGRlbHRhWCwgZGVsdGFZKSB7XG4gICAgdmFyIHNjcm9sbFRvcCA9IE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxUb3ApO1xuICAgIHZhciBzY3JvbGxMZWZ0ID0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHZhciBtYWduaXR1ZGVYID0gTWF0aC5hYnMoZGVsdGFYKTtcbiAgICB2YXIgbWFnbml0dWRlWSA9IE1hdGguYWJzKGRlbHRhWSk7XG5cbiAgICBpZiAobWFnbml0dWRlWSA+IG1hZ25pdHVkZVgpIHtcbiAgICAgIC8vIHVzZXIgaXMgcGVyaGFwcyB0cnlpbmcgdG8gc3dpcGUgdXAvZG93biB0aGUgcGFnZVxuXG4gICAgICBpZiAoXG4gICAgICAgIChkZWx0YVkgPCAwICYmIHNjcm9sbFRvcCA9PT0gaS5jb250ZW50SGVpZ2h0IC0gaS5jb250YWluZXJIZWlnaHQpIHx8XG4gICAgICAgIChkZWx0YVkgPiAwICYmIHNjcm9sbFRvcCA9PT0gMClcbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgcHJldmVudCBmb3IgbW9iaWxlIENocm9tZSByZWZyZXNoXG4gICAgICAgIHJldHVybiB3aW5kb3cuc2Nyb2xsWSA9PT0gMCAmJiBkZWx0YVkgPiAwICYmIGVudi5pc0Nocm9tZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hZ25pdHVkZVggPiBtYWduaXR1ZGVZKSB7XG4gICAgICAvLyB1c2VyIGlzIHBlcmhhcHMgdHJ5aW5nIHRvIHN3aXBlIGxlZnQvcmlnaHQgYWNyb3NzIHRoZSBwYWdlXG5cbiAgICAgIGlmIChcbiAgICAgICAgKGRlbHRhWCA8IDAgJiYgc2Nyb2xsTGVmdCA9PT0gaS5jb250ZW50V2lkdGggLSBpLmNvbnRhaW5lcldpZHRoKSB8fFxuICAgICAgICAoZGVsdGFYID4gMCAmJiBzY3JvbGxMZWZ0ID09PSAwKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUb3VjaE1vdmUoZGlmZmVyZW5jZVgsIGRpZmZlcmVuY2VZKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgLT0gZGlmZmVyZW5jZVk7XG4gICAgZWxlbWVudC5zY3JvbGxMZWZ0IC09IGRpZmZlcmVuY2VYO1xuXG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG4gIH1cblxuICB2YXIgc3RhcnRPZmZzZXQgPSB7fTtcbiAgdmFyIHN0YXJ0VGltZSA9IDA7XG4gIHZhciBzcGVlZCA9IHt9O1xuICB2YXIgZWFzaW5nTG9vcCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gZ2V0VG91Y2goZSkge1xuICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcbiAgICAgIHJldHVybiBlLnRhcmdldFRvdWNoZXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1heWJlIElFIHBvaW50ZXJcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEhhbmRsZShlKSB7XG4gICAgaWYgKGUucG9pbnRlclR5cGUgJiYgZS5wb2ludGVyVHlwZSA9PT0gJ3BlbicgJiYgZS5idXR0b25zID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChlLnRhcmdldFRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGUucG9pbnRlclR5cGUgJiZcbiAgICAgIGUucG9pbnRlclR5cGUgIT09ICdtb3VzZScgJiZcbiAgICAgIGUucG9pbnRlclR5cGUgIT09IGUuTVNQT0lOVEVSX1RZUEVfTU9VU0VcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaFN0YXJ0KGUpIHtcbiAgICBpZiAoIXNob3VsZEhhbmRsZShlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaCA9IGdldFRvdWNoKGUpO1xuXG4gICAgc3RhcnRPZmZzZXQucGFnZVggPSB0b3VjaC5wYWdlWDtcbiAgICBzdGFydE9mZnNldC5wYWdlWSA9IHRvdWNoLnBhZ2VZO1xuXG4gICAgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICBpZiAoZWFzaW5nTG9vcCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChlYXNpbmdMb29wKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRCZUNvbnN1bWVkQnlDaGlsZCh0YXJnZXQsIGRlbHRhWCwgZGVsdGFZKSB7XG4gICAgaWYgKCFlbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgY3Vyc29yID0gdGFyZ2V0O1xuXG4gICAgd2hpbGUgKGN1cnNvciAmJiBjdXJzb3IgIT09IGVsZW1lbnQpIHtcbiAgICAgIGlmIChjdXJzb3IuY2xhc3NMaXN0LmNvbnRhaW5zKGNscy5lbGVtZW50LmNvbnN1bWluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZSA9IGdldChjdXJzb3IpO1xuXG4gICAgICAvLyBpZiBkZWx0YVkgJiYgdmVydGljYWwgc2Nyb2xsYWJsZVxuICAgICAgaWYgKGRlbHRhWSAmJiBzdHlsZS5vdmVyZmxvd1kubWF0Y2goLyhzY3JvbGx8YXV0bykvKSkge1xuICAgICAgICB2YXIgbWF4U2Nyb2xsVG9wID0gY3Vyc29yLnNjcm9sbEhlaWdodCAtIGN1cnNvci5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGlmIChtYXhTY3JvbGxUb3AgPiAwKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGN1cnNvci5zY3JvbGxUb3AgPiAwICYmIGRlbHRhWSA8IDApIHx8XG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbFRvcCA8IG1heFNjcm9sbFRvcCAmJiBkZWx0YVkgPiAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBkZWx0YVggJiYgaG9yaXpvbnRhbCBzY3JvbGxhYmxlXG4gICAgICBpZiAoZGVsdGFYICYmIHN0eWxlLm92ZXJmbG93WC5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBtYXhTY3JvbGxMZWZ0ID0gY3Vyc29yLnNjcm9sbFdpZHRoIC0gY3Vyc29yLmNsaWVudFdpZHRoO1xuICAgICAgICBpZiAobWF4U2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbExlZnQgPiAwICYmIGRlbHRhWCA8IDApIHx8XG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbExlZnQgPCBtYXhTY3JvbGxMZWZ0ICYmIGRlbHRhWCA+IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3Vyc29yID0gY3Vyc29yLnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hNb3ZlKGUpIHtcbiAgICBpZiAoc2hvdWxkSGFuZGxlKGUpKSB7XG4gICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaChlKTtcblxuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB7IHBhZ2VYOiB0b3VjaC5wYWdlWCwgcGFnZVk6IHRvdWNoLnBhZ2VZIH07XG5cbiAgICAgIHZhciBkaWZmZXJlbmNlWCA9IGN1cnJlbnRPZmZzZXQucGFnZVggLSBzdGFydE9mZnNldC5wYWdlWDtcbiAgICAgIHZhciBkaWZmZXJlbmNlWSA9IGN1cnJlbnRPZmZzZXQucGFnZVkgLSBzdGFydE9mZnNldC5wYWdlWTtcblxuICAgICAgaWYgKHNob3VsZEJlQ29uc3VtZWRCeUNoaWxkKGUudGFyZ2V0LCBkaWZmZXJlbmNlWCwgZGlmZmVyZW5jZVkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBwbHlUb3VjaE1vdmUoZGlmZmVyZW5jZVgsIGRpZmZlcmVuY2VZKTtcbiAgICAgIHN0YXJ0T2Zmc2V0ID0gY3VycmVudE9mZnNldDtcblxuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAgIHZhciB0aW1lR2FwID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICBpZiAodGltZUdhcCA+IDApIHtcbiAgICAgICAgc3BlZWQueCA9IGRpZmZlcmVuY2VYIC8gdGltZUdhcDtcbiAgICAgICAgc3BlZWQueSA9IGRpZmZlcmVuY2VZIC8gdGltZUdhcDtcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRQcmV2ZW50KGRpZmZlcmVuY2VYLCBkaWZmZXJlbmNlWSkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0b3VjaEVuZCgpIHtcbiAgICBpZiAoaS5zZXR0aW5ncy5zd2lwZUVhc2luZykge1xuICAgICAgY2xlYXJJbnRlcnZhbChlYXNpbmdMb29wKTtcbiAgICAgIGVhc2luZ0xvb3AgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGkuaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZWFzaW5nTG9vcCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzcGVlZC54ICYmICFzcGVlZC55KSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChlYXNpbmdMb29wKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTWF0aC5hYnMoc3BlZWQueCkgPCAwLjAxICYmIE1hdGguYWJzKHNwZWVkLnkpIDwgMC4wMSkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZWFzaW5nTG9vcCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlUb3VjaE1vdmUoc3BlZWQueCAqIDMwLCBzcGVlZC55ICogMzApO1xuXG4gICAgICAgIHNwZWVkLnggKj0gMC44O1xuICAgICAgICBzcGVlZC55ICo9IDAuODtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW52LnN1cHBvcnRzVG91Y2gpIHtcbiAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ3RvdWNoc3RhcnQnLCB0b3VjaFN0YXJ0KTtcbiAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ3RvdWNobW92ZScsIHRvdWNoTW92ZSk7XG4gICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICd0b3VjaGVuZCcsIHRvdWNoRW5kKTtcbiAgfSBlbHNlIGlmIChlbnYuc3VwcG9ydHNJZVBvaW50ZXIpIHtcbiAgICBpZiAod2luZG93LlBvaW50ZXJFdmVudCkge1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdwb2ludGVyZG93bicsIHRvdWNoU3RhcnQpO1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdwb2ludGVybW92ZScsIHRvdWNoTW92ZSk7XG4gICAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ3BvaW50ZXJ1cCcsIHRvdWNoRW5kKTtcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5NU1BvaW50ZXJFdmVudCkge1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdNU1BvaW50ZXJEb3duJywgdG91Y2hTdGFydCk7XG4gICAgICBpLmV2ZW50LmJpbmQoZWxlbWVudCwgJ01TUG9pbnRlck1vdmUnLCB0b3VjaE1vdmUpO1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdNU1BvaW50ZXJVcCcsIHRvdWNoRW5kKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRlZmF1bHRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gIGhhbmRsZXJzOiBbJ2NsaWNrLXJhaWwnLCAnZHJhZy10aHVtYicsICdrZXlib2FyZCcsICd3aGVlbCcsICd0b3VjaCddLFxuICBtYXhTY3JvbGxiYXJMZW5ndGg6IG51bGwsXG4gIG1pblNjcm9sbGJhckxlbmd0aDogbnVsbCxcbiAgc2Nyb2xsaW5nVGhyZXNob2xkOiAxMDAwLFxuICBzY3JvbGxYTWFyZ2luT2Zmc2V0OiAwLFxuICBzY3JvbGxZTWFyZ2luT2Zmc2V0OiAwLFxuICBzdXBwcmVzc1Njcm9sbFg6IGZhbHNlLFxuICBzdXBwcmVzc1Njcm9sbFk6IGZhbHNlLFxuICBzd2lwZUVhc2luZzogdHJ1ZSxcbiAgdXNlQm90aFdoZWVsQXhlczogZmFsc2UsXG4gIHdoZWVsUHJvcGFnYXRpb246IHRydWUsXG4gIHdoZWVsU3BlZWQ6IDEsXG59KTsgfTtcblxudmFyIGhhbmRsZXJzID0ge1xuICAnY2xpY2stcmFpbCc6IGNsaWNrUmFpbCxcbiAgJ2RyYWctdGh1bWInOiBkcmFnVGh1bWIsXG4gIGtleWJvYXJkOiBrZXlib2FyZCxcbiAgd2hlZWw6IHdoZWVsLFxuICB0b3VjaDogdG91Y2gsXG59O1xuXG52YXIgUGVyZmVjdFNjcm9sbGJhciA9IGZ1bmN0aW9uIFBlcmZlY3RTY3JvbGxiYXIoZWxlbWVudCwgdXNlclNldHRpbmdzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuICBpZiAoIHVzZXJTZXR0aW5ncyA9PT0gdm9pZCAwICkgdXNlclNldHRpbmdzID0ge307XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBlbGVtZW50IGlzIHNwZWNpZmllZCB0byBpbml0aWFsaXplIFBlcmZlY3RTY3JvbGxiYXInKTtcbiAgfVxuXG4gIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNscy5tYWluKTtcblxuICB0aGlzLnNldHRpbmdzID0gZGVmYXVsdFNldHRpbmdzKCk7XG4gIGZvciAodmFyIGtleSBpbiB1c2VyU2V0dGluZ3MpIHtcbiAgICB0aGlzLnNldHRpbmdzW2tleV0gPSB1c2VyU2V0dGluZ3Nba2V5XTtcbiAgfVxuXG4gIHRoaXMuY29udGFpbmVyV2lkdGggPSBudWxsO1xuICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IG51bGw7XG4gIHRoaXMuY29udGVudFdpZHRoID0gbnVsbDtcbiAgdGhpcy5jb250ZW50SGVpZ2h0ID0gbnVsbDtcblxuICB2YXIgZm9jdXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xzLnN0YXRlLmZvY3VzKTsgfTtcbiAgdmFyIGJsdXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xzLnN0YXRlLmZvY3VzKTsgfTtcblxuICB0aGlzLmlzUnRsID0gZ2V0KGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gIGlmICh0aGlzLmlzUnRsID09PSB0cnVlKSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNscy5ydGwpO1xuICB9XG4gIHRoaXMuaXNOZWdhdGl2ZVNjcm9sbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9yaWdpbmFsU2Nyb2xsTGVmdCA9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICBlbGVtZW50LnNjcm9sbExlZnQgPSAtMTtcbiAgICByZXN1bHQgPSBlbGVtZW50LnNjcm9sbExlZnQgPCAwO1xuICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IG9yaWdpbmFsU2Nyb2xsTGVmdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KSgpO1xuICB0aGlzLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCA9IHRoaXMuaXNOZWdhdGl2ZVNjcm9sbFxuICAgID8gZWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICA6IDA7XG4gIHRoaXMuZXZlbnQgPSBuZXcgRXZlbnRNYW5hZ2VyKCk7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcblxuICB0aGlzLnNjcm9sbGJhclhSYWlsID0gZGl2KGNscy5lbGVtZW50LnJhaWwoJ3gnKSk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxiYXJYUmFpbCk7XG4gIHRoaXMuc2Nyb2xsYmFyWCA9IGRpdihjbHMuZWxlbWVudC50aHVtYigneCcpKTtcbiAgdGhpcy5zY3JvbGxiYXJYUmFpbC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGJhclgpO1xuICB0aGlzLnNjcm9sbGJhclguc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuICB0aGlzLmV2ZW50LmJpbmQodGhpcy5zY3JvbGxiYXJYLCAnZm9jdXMnLCBmb2N1cyk7XG4gIHRoaXMuZXZlbnQuYmluZCh0aGlzLnNjcm9sbGJhclgsICdibHVyJywgYmx1cik7XG4gIHRoaXMuc2Nyb2xsYmFyWEFjdGl2ZSA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWFdpZHRoID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJYTGVmdCA9IG51bGw7XG4gIHZhciByYWlsWFN0eWxlID0gZ2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwpO1xuICB0aGlzLnNjcm9sbGJhclhCb3R0b20gPSBwYXJzZUludChyYWlsWFN0eWxlLmJvdHRvbSwgMTApO1xuICBpZiAoaXNOYU4odGhpcy5zY3JvbGxiYXJYQm90dG9tKSkge1xuICAgIHRoaXMuaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbGJhclhUb3AgPSB0b0ludChyYWlsWFN0eWxlLnRvcCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc1Njcm9sbGJhclhVc2luZ0JvdHRvbSA9IHRydWU7XG4gIH1cbiAgdGhpcy5yYWlsQm9yZGVyWFdpZHRoID1cbiAgICB0b0ludChyYWlsWFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgKyB0b0ludChyYWlsWFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpO1xuICAvLyBTZXQgcmFpbCB0byBkaXNwbGF5OmJsb2NrIHRvIGNhbGN1bGF0ZSBtYXJnaW5zXG4gIHNldCh0aGlzLnNjcm9sbGJhclhSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHRoaXMucmFpbFhNYXJnaW5XaWR0aCA9XG4gICAgdG9JbnQocmFpbFhTdHlsZS5tYXJnaW5MZWZ0KSArIHRvSW50KHJhaWxYU3R5bGUubWFyZ2luUmlnaHQpO1xuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnJyB9KTtcbiAgdGhpcy5yYWlsWFdpZHRoID0gbnVsbDtcbiAgdGhpcy5yYWlsWFJhdGlvID0gbnVsbDtcblxuICB0aGlzLnNjcm9sbGJhcllSYWlsID0gZGl2KGNscy5lbGVtZW50LnJhaWwoJ3knKSk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxiYXJZUmFpbCk7XG4gIHRoaXMuc2Nyb2xsYmFyWSA9IGRpdihjbHMuZWxlbWVudC50aHVtYigneScpKTtcbiAgdGhpcy5zY3JvbGxiYXJZUmFpbC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGJhclkpO1xuICB0aGlzLnNjcm9sbGJhclkuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuICB0aGlzLmV2ZW50LmJpbmQodGhpcy5zY3JvbGxiYXJZLCAnZm9jdXMnLCBmb2N1cyk7XG4gIHRoaXMuZXZlbnQuYmluZCh0aGlzLnNjcm9sbGJhclksICdibHVyJywgYmx1cik7XG4gIHRoaXMuc2Nyb2xsYmFyWUFjdGl2ZSA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWUhlaWdodCA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWVRvcCA9IG51bGw7XG4gIHZhciByYWlsWVN0eWxlID0gZ2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwpO1xuICB0aGlzLnNjcm9sbGJhcllSaWdodCA9IHBhcnNlSW50KHJhaWxZU3R5bGUucmlnaHQsIDEwKTtcbiAgaWYgKGlzTmFOKHRoaXMuc2Nyb2xsYmFyWVJpZ2h0KSkge1xuICAgIHRoaXMuaXNTY3JvbGxiYXJZVXNpbmdSaWdodCA9IGZhbHNlO1xuICAgIHRoaXMuc2Nyb2xsYmFyWUxlZnQgPSB0b0ludChyYWlsWVN0eWxlLmxlZnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaXNTY3JvbGxiYXJZVXNpbmdSaWdodCA9IHRydWU7XG4gIH1cbiAgdGhpcy5zY3JvbGxiYXJZT3V0ZXJXaWR0aCA9IHRoaXMuaXNSdGwgPyBvdXRlcldpZHRoKHRoaXMuc2Nyb2xsYmFyWSkgOiBudWxsO1xuICB0aGlzLnJhaWxCb3JkZXJZV2lkdGggPVxuICAgIHRvSW50KHJhaWxZU3R5bGUuYm9yZGVyVG9wV2lkdGgpICsgdG9JbnQocmFpbFlTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHRoaXMucmFpbFlNYXJnaW5IZWlnaHQgPVxuICAgIHRvSW50KHJhaWxZU3R5bGUubWFyZ2luVG9wKSArIHRvSW50KHJhaWxZU3R5bGUubWFyZ2luQm90dG9tKTtcbiAgc2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwsIHsgZGlzcGxheTogJycgfSk7XG4gIHRoaXMucmFpbFlIZWlnaHQgPSBudWxsO1xuICB0aGlzLnJhaWxZUmF0aW8gPSBudWxsO1xuXG4gIHRoaXMucmVhY2ggPSB7XG4gICAgeDpcbiAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA8PSAwXG4gICAgICAgID8gJ3N0YXJ0J1xuICAgICAgICA6IGVsZW1lbnQuc2Nyb2xsTGVmdCA+PSB0aGlzLmNvbnRlbnRXaWR0aCAtIHRoaXMuY29udGFpbmVyV2lkdGhcbiAgICAgICAgPyAnZW5kJ1xuICAgICAgICA6IG51bGwsXG4gICAgeTpcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wIDw9IDBcbiAgICAgICAgPyAnc3RhcnQnXG4gICAgICAgIDogZWxlbWVudC5zY3JvbGxUb3AgPj0gdGhpcy5jb250ZW50SGVpZ2h0IC0gdGhpcy5jb250YWluZXJIZWlnaHRcbiAgICAgICAgPyAnZW5kJ1xuICAgICAgICA6IG51bGwsXG4gIH07XG5cbiAgdGhpcy5pc0FsaXZlID0gdHJ1ZTtcblxuICB0aGlzLnNldHRpbmdzLmhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXJOYW1lKSB7IHJldHVybiBoYW5kbGVyc1toYW5kbGVyTmFtZV0odGhpcyQxKTsgfSk7XG5cbiAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbFRvcCk7IC8vIGZvciBvblNjcm9sbCBvbmx5XG4gIHRoaXMubGFzdFNjcm9sbExlZnQgPSBlbGVtZW50LnNjcm9sbExlZnQ7IC8vIGZvciBvblNjcm9sbCBvbmx5XG4gIHRoaXMuZXZlbnQuYmluZCh0aGlzLmVsZW1lbnQsICdzY3JvbGwnLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcyQxLm9uU2Nyb2xsKGUpOyB9KTtcbiAgdXBkYXRlR2VvbWV0cnkodGhpcyk7XG59O1xuXG5QZXJmZWN0U2Nyb2xsYmFyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICBpZiAoIXRoaXMuaXNBbGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFJlY2FsY3VhdGUgbmVnYXRpdmUgc2Nyb2xsTGVmdCBhZGp1c3RtZW50XG4gIHRoaXMubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ID0gdGhpcy5pc05lZ2F0aXZlU2Nyb2xsXG4gICAgPyB0aGlzLmVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLmVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICA6IDA7XG5cbiAgLy8gUmVjYWxjdWxhdGUgcmFpbCBtYXJnaW5zXG4gIHNldCh0aGlzLnNjcm9sbGJhclhSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICdibG9jaycgfSk7XG4gIHRoaXMucmFpbFhNYXJnaW5XaWR0aCA9XG4gICAgdG9JbnQoZ2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwpLm1hcmdpbkxlZnQpICtcbiAgICB0b0ludChnZXQodGhpcy5zY3JvbGxiYXJYUmFpbCkubWFyZ2luUmlnaHQpO1xuICB0aGlzLnJhaWxZTWFyZ2luSGVpZ2h0ID1cbiAgICB0b0ludChnZXQodGhpcy5zY3JvbGxiYXJZUmFpbCkubWFyZ2luVG9wKSArXG4gICAgdG9JbnQoZ2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwpLm1hcmdpbkJvdHRvbSk7XG5cbiAgLy8gSGlkZSBzY3JvbGxiYXJzIG5vdCB0byBhZmZlY3Qgc2Nyb2xsV2lkdGggYW5kIHNjcm9sbEhlaWdodFxuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnbm9uZScgfSk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICdub25lJyB9KTtcblxuICB1cGRhdGVHZW9tZXRyeSh0aGlzKTtcblxuICBwcm9jZXNzU2Nyb2xsRGlmZih0aGlzLCAndG9wJywgMCwgZmFsc2UsIHRydWUpO1xuICBwcm9jZXNzU2Nyb2xsRGlmZih0aGlzLCAnbGVmdCcsIDAsIGZhbHNlLCB0cnVlKTtcblxuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnJyB9KTtcbiAgc2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwsIHsgZGlzcGxheTogJycgfSk7XG59O1xuXG5QZXJmZWN0U2Nyb2xsYmFyLnByb3RvdHlwZS5vblNjcm9sbCA9IGZ1bmN0aW9uIG9uU2Nyb2xsIChlKSB7XG4gIGlmICghdGhpcy5pc0FsaXZlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdXBkYXRlR2VvbWV0cnkodGhpcyk7XG4gIHByb2Nlc3NTY3JvbGxEaWZmKHRoaXMsICd0b3AnLCB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wIC0gdGhpcy5sYXN0U2Nyb2xsVG9wKTtcbiAgcHJvY2Vzc1Njcm9sbERpZmYoXG4gICAgdGhpcyxcbiAgICAnbGVmdCcsXG4gICAgdGhpcy5lbGVtZW50LnNjcm9sbExlZnQgLSB0aGlzLmxhc3RTY3JvbGxMZWZ0XG4gICk7XG5cbiAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gTWF0aC5mbG9vcih0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wKTtcbiAgdGhpcy5sYXN0U2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0O1xufTtcblxuUGVyZmVjdFNjcm9sbGJhci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3kgKCkge1xuICBpZiAoIXRoaXMuaXNBbGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuZXZlbnQudW5iaW5kQWxsKCk7XG4gIHJlbW92ZSh0aGlzLnNjcm9sbGJhclgpO1xuICByZW1vdmUodGhpcy5zY3JvbGxiYXJZKTtcbiAgcmVtb3ZlKHRoaXMuc2Nyb2xsYmFyWFJhaWwpO1xuICByZW1vdmUodGhpcy5zY3JvbGxiYXJZUmFpbCk7XG4gIHRoaXMucmVtb3ZlUHNDbGFzc2VzKCk7XG5cbiAgLy8gdW5zZXQgZWxlbWVudHNcbiAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJYID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJZID0gbnVsbDtcbiAgdGhpcy5zY3JvbGxiYXJYUmFpbCA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWVJhaWwgPSBudWxsO1xuXG4gIHRoaXMuaXNBbGl2ZSA9IGZhbHNlO1xufTtcblxuUGVyZmVjdFNjcm9sbGJhci5wcm90b3R5cGUucmVtb3ZlUHNDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlUHNDbGFzc2VzICgpIHtcbiAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuZWxlbWVudC5jbGFzc05hbWVcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFuYW1lLm1hdGNoKC9ecHMoWy1fXS4rfCkkLyk7IH0pXG4gICAgLmpvaW4oJyAnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBlcmZlY3RTY3JvbGxiYXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmZWN0LXNjcm9sbGJhci5lc20uanMubWFwXG4iLCIvKiFcbiAqIHR5cGVhaGVhZC5qcyAwLjExLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2l0dGVyL3R5cGVhaGVhZC5qc1xuICogQ29weXJpZ2h0IDIwMTMtMjAxNSBUd2l0dGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVFxuICovXG5cbihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShcImJsb29kaG91bmRcIiwgWyBcImpxdWVyeVwiIF0sIGZ1bmN0aW9uKGEwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdFtcIkJsb29kaG91bmRcIl0gPSBmYWN0b3J5KGEwKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdFtcIkJsb29kaG91bmRcIl0gPSBmYWN0b3J5KGpRdWVyeSk7XG4gICAgfVxufSkodGhpcywgZnVuY3Rpb24oJCkge1xuICAgIHZhciBfID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNNc2llOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSA/IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhtc2llIHxydjopKFxcZCsoLlxcZCspPykvaSlbMl0gOiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0JsYW5rU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXN0ciB8fCAvXlxccyokLy50ZXN0KHN0cik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXNjYXBlUmVnRXhDaGFyczogZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwqXFwrXFw/XFwuXFxcXFxcXlxcJFxcfF0vZywgXCJcXFxcJCZcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTdHJpbmc6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzTnVtYmVyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0FycmF5OiAkLmlzQXJyYXksXG4gICAgICAgICAgICBpc0Z1bmN0aW9uOiAkLmlzRnVuY3Rpb24sXG4gICAgICAgICAgICBpc09iamVjdDogJC5pc1BsYWluT2JqZWN0LFxuICAgICAgICAgICAgaXNVbmRlZmluZWQ6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzRWxlbWVudDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzSlF1ZXJ5OiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgJDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b1N0cjogZnVuY3Rpb24gdG9TdHIocykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHMpIHx8IHMgPT09IG51bGwgPyBcIlwiIDogcyArIFwiXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmluZDogJC5wcm94eSxcbiAgICAgICAgICAgIGVhY2g6IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGNiKSB7XG4gICAgICAgICAgICAgICAgJC5lYWNoKGNvbGxlY3Rpb24sIHJldmVyc2VBcmdzKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXZlcnNlQXJncyhpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKHZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1hcDogJC5tYXAsXG4gICAgICAgICAgICBmaWx0ZXI6ICQuZ3JlcCxcbiAgICAgICAgICAgIGV2ZXJ5OiBmdW5jdGlvbihvYmosIHRlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkLmVhY2gob2JqLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXN1bHQgPSB0ZXN0LmNhbGwobnVsbCwgdmFsLCBrZXksIG9iaikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29tZTogZnVuY3Rpb24ob2JqLCB0ZXN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPSB0ZXN0LmNhbGwobnVsbCwgdmFsLCBrZXksIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaXhpbjogJC5leHRlbmQsXG4gICAgICAgICAgICBpZGVudGl0eTogZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIG9iaik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0SWRHZW5lcmF0b3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wbGF0aWZ5OiBmdW5jdGlvbiB0ZW1wbGF0aWZ5KG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiAkLmlzRnVuY3Rpb24ob2JqKSA/IG9iaiA6IHRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRlbXBsYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmVyOiBmdW5jdGlvbihmbikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYm91bmNlOiBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGltZW91dCwgcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzLCBsYXRlciwgY2FsbE5vdztcbiAgICAgICAgICAgICAgICAgICAgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRocm90dGxlOiBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQsIGFyZ3MsIHRpbWVvdXQsIHJlc3VsdCwgcHJldmlvdXMsIGxhdGVyO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSwgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2YWwpID8gdmFsIDogSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub29wOiBmdW5jdGlvbigpIHt9XG4gICAgICAgIH07XG4gICAgfSgpO1xuICAgIHZhciBWRVJTSU9OID0gXCIwLjExLjFcIjtcbiAgICB2YXIgdG9rZW5pemVycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vbndvcmQ6IG5vbndvcmQsXG4gICAgICAgICAgICB3aGl0ZXNwYWNlOiB3aGl0ZXNwYWNlLFxuICAgICAgICAgICAgb2JqOiB7XG4gICAgICAgICAgICAgICAgbm9ud29yZDogZ2V0T2JqVG9rZW5pemVyKG5vbndvcmQpLFxuICAgICAgICAgICAgICAgIHdoaXRlc3BhY2U6IGdldE9ialRva2VuaXplcih3aGl0ZXNwYWNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiB3aGl0ZXNwYWNlKHN0cikge1xuICAgICAgICAgICAgc3RyID0gXy50b1N0cihzdHIpO1xuICAgICAgICAgICAgcmV0dXJuIHN0ciA/IHN0ci5zcGxpdCgvXFxzKy8pIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbm9ud29yZChzdHIpIHtcbiAgICAgICAgICAgIHN0ciA9IF8udG9TdHIoc3RyKTtcbiAgICAgICAgICAgIHJldHVybiBzdHIgPyBzdHIuc3BsaXQoL1xcVysvKSA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE9ialRva2VuaXplcih0b2tlbml6ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRLZXkoa2V5cykge1xuICAgICAgICAgICAgICAgIGtleXMgPSBfLmlzQXJyYXkoa2V5cykgPyBrZXlzIDogW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0b2tlbml6ZShvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgXy5lYWNoKGtleXMsIGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHRva2Vucy5jb25jYXQodG9rZW5pemVyKF8udG9TdHIob1trXSkpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgdmFyIExydUNhY2hlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBMcnVDYWNoZShtYXhTaXplKSB7XG4gICAgICAgICAgICB0aGlzLm1heFNpemUgPSBfLmlzTnVtYmVyKG1heFNpemUpID8gbWF4U2l6ZSA6IDEwMDtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heFNpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0ID0gdGhpcy5nZXQgPSAkLm5vb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihMcnVDYWNoZS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhaWxJdGVtID0gdGhpcy5saXN0LnRhaWwsIG5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2l6ZSA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0LnJlbW92ZSh0YWlsSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmhhc2hbdGFpbEl0ZW0ua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXplLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlID0gdGhpcy5oYXNoW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS52YWwgPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5tb3ZlVG9Gcm9udChub2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV3IE5vZGUoa2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3QuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuaGFzaFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5tb3ZlVG9Gcm9udChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc2ggPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBuZXcgTGlzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gTGlzdCgpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihMaXN0LnByb3RvdHlwZSwge1xuICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiBhZGQobm9kZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5uZXh0ID0gdGhpcy5oZWFkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWQucHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZCA9IG5vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWlsID0gdGhpcy50YWlsIHx8IG5vZGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobm9kZSkge1xuICAgICAgICAgICAgICAgIG5vZGUucHJldiA/IG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0IDogdGhpcy5oZWFkID0gbm9kZS5uZXh0O1xuICAgICAgICAgICAgICAgIG5vZGUubmV4dCA/IG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2IDogdGhpcy50YWlsID0gbm9kZS5wcmV2O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vdmVUb0Zyb250OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBOb2RlKGtleSwgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgICAgIHRoaXMudmFsID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5uZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTHJ1Q2FjaGU7XG4gICAgfSgpO1xuICAgIHZhciBQZXJzaXN0ZW50U3RvcmFnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIExPQ0FMX1NUT1JBR0U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBMT0NBTF9TVE9SQUdFID0gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgICAgICAgICAgIExPQ0FMX1NUT1JBR0Uuc2V0SXRlbShcIn5+flwiLCBcIiFcIik7XG4gICAgICAgICAgICBMT0NBTF9TVE9SQUdFLnJlbW92ZUl0ZW0oXCJ+fn5cIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgTE9DQUxfU1RPUkFHRSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gUGVyc2lzdGVudFN0b3JhZ2UobmFtZXNwYWNlLCBvdmVycmlkZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVmaXggPSBbIFwiX19cIiwgbmFtZXNwYWNlLCBcIl9fXCIgXS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgdGhpcy50dGxLZXkgPSBcIl9fdHRsX19cIjtcbiAgICAgICAgICAgIHRoaXMua2V5TWF0Y2hlciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBfLmVzY2FwZVJlZ0V4Q2hhcnModGhpcy5wcmVmaXgpKTtcbiAgICAgICAgICAgIHRoaXMubHMgPSBvdmVycmlkZSB8fCBMT0NBTF9TVE9SQUdFO1xuICAgICAgICAgICAgIXRoaXMubHMgJiYgdGhpcy5fbm9vcCgpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oUGVyc2lzdGVudFN0b3JhZ2UucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfcHJlZml4OiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3R0bEtleTogZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZpeChrZXkpICsgdGhpcy50dGxLZXk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX25vb3A6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0ID0gdGhpcy5zZXQgPSB0aGlzLnJlbW92ZSA9IHRoaXMuY2xlYXIgPSB0aGlzLmlzRXhwaXJlZCA9IF8ubm9vcDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfc2FmZVNldDogZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxzLnNldEl0ZW0oa2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiUXVvdGFFeGNlZWRlZEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRXhwaXJlZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGUodGhpcy5scy5nZXRJdGVtKHRoaXMuX3ByZWZpeChrZXkpKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihrZXksIHZhbCwgdHRsKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNOdW1iZXIodHRsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zYWZlU2V0KHRoaXMuX3R0bEtleShrZXkpLCBlbmNvZGUobm93KCkgKyB0dGwpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxzLnJlbW92ZUl0ZW0odGhpcy5fdHRsS2V5KGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2FmZVNldCh0aGlzLl9wcmVmaXgoa2V5KSwgZW5jb2RlKHZhbCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5scy5yZW1vdmVJdGVtKHRoaXMuX3R0bEtleShrZXkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxzLnJlbW92ZUl0ZW0odGhpcy5fcHJlZml4KGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSwga2V5cyA9IGdhdGhlck1hdGNoaW5nS2V5cyh0aGlzLmtleU1hdGNoZXIpO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IGtleXMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShrZXlzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFeHBpcmVkOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHRsID0gZGVjb2RlKHRoaXMubHMuZ2V0SXRlbSh0aGlzLl90dGxLZXkoa2V5KSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzTnVtYmVyKHR0bCkgJiYgbm93KCkgPiB0dGwgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUGVyc2lzdGVudFN0b3JhZ2U7XG4gICAgICAgIGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXy5pc1VuZGVmaW5lZCh2YWwpID8gbnVsbCA6IHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVjb2RlKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuICQucGFyc2VKU09OKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2F0aGVyTWF0Y2hpbmdLZXlzKGtleU1hdGNoZXIpIHtcbiAgICAgICAgICAgIHZhciBpLCBrZXksIGtleXMgPSBbXSwgbGVuID0gTE9DQUxfU1RPUkFHRS5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoKGtleSA9IExPQ0FMX1NUT1JBR0Uua2V5KGkpKS5tYXRjaChrZXlNYXRjaGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5LnJlcGxhY2Uoa2V5TWF0Y2hlciwgXCJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBUcmFuc3BvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBwZW5kaW5nUmVxdWVzdHNDb3VudCA9IDAsIHBlbmRpbmdSZXF1ZXN0cyA9IHt9LCBtYXhQZW5kaW5nUmVxdWVzdHMgPSA2LCBzaGFyZWRDYWNoZSA9IG5ldyBMcnVDYWNoZSgxMCk7XG4gICAgICAgIGZ1bmN0aW9uIFRyYW5zcG9ydChvKSB7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RSZXEgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fc2VuZCA9IG8udHJhbnNwb3J0O1xuICAgICAgICAgICAgdGhpcy5fZ2V0ID0gby5saW1pdGVyID8gby5saW1pdGVyKHRoaXMuX2dldCkgOiB0aGlzLl9nZXQ7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZSA9IG8uY2FjaGUgPT09IGZhbHNlID8gbmV3IExydUNhY2hlKDApIDogc2hhcmVkQ2FjaGU7XG4gICAgICAgIH1cbiAgICAgICAgVHJhbnNwb3J0LnNldE1heFBlbmRpbmdSZXF1ZXN0cyA9IGZ1bmN0aW9uIHNldE1heFBlbmRpbmdSZXF1ZXN0cyhudW0pIHtcbiAgICAgICAgICAgIG1heFBlbmRpbmdSZXF1ZXN0cyA9IG51bTtcbiAgICAgICAgfTtcbiAgICAgICAgVHJhbnNwb3J0LnJlc2V0Q2FjaGUgPSBmdW5jdGlvbiByZXNldENhY2hlKCkge1xuICAgICAgICAgICAgc2hhcmVkQ2FjaGUucmVzZXQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgXy5taXhpbihUcmFuc3BvcnQucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfZmluZ2VycHJpbnQ6IGZ1bmN0aW9uIGZpbmdlcnByaW50KG8pIHtcbiAgICAgICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgICAgICByZXR1cm4gby51cmwgKyBvLnR5cGUgKyAkLnBhcmFtKG8uZGF0YSB8fCB7fSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldDogZnVuY3Rpb24obywgY2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIGZpbmdlcnByaW50LCBqcVhocjtcbiAgICAgICAgICAgICAgICBmaW5nZXJwcmludCA9IHRoaXMuX2ZpbmdlcnByaW50KG8pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCB8fCBmaW5nZXJwcmludCAhPT0gdGhpcy5sYXN0UmVxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGpxWGhyID0gcGVuZGluZ1JlcXVlc3RzW2ZpbmdlcnByaW50XSkge1xuICAgICAgICAgICAgICAgICAgICBqcVhoci5kb25lKGRvbmUpLmZhaWwoZmFpbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZW5kaW5nUmVxdWVzdHNDb3VudCA8IG1heFBlbmRpbmdSZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHNDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHNbZmluZ2VycHJpbnRdID0gdGhpcy5fc2VuZChvKS5kb25lKGRvbmUpLmZhaWwoZmFpbCkuYWx3YXlzKGFsd2F5cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlY2tSZXF1ZXN0QXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZShyZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKG51bGwsIHJlc3ApO1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9jYWNoZS5zZXQoZmluZ2VycHJpbnQsIHJlc3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICBjYih0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWx3YXlzKCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGVuZGluZ1JlcXVlc3RzW2ZpbmdlcnByaW50XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQub25EZWNrUmVxdWVzdEFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2dldC5hcHBseSh0aGF0LCB0aGF0Lm9uRGVja1JlcXVlc3RBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQub25EZWNrUmVxdWVzdEFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24obywgY2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcCwgZmluZ2VycHJpbnQ7XG4gICAgICAgICAgICAgICAgY2IgPSBjYiB8fCAkLm5vb3A7XG4gICAgICAgICAgICAgICAgbyA9IF8uaXNTdHJpbmcobykgPyB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogb1xuICAgICAgICAgICAgICAgIH0gOiBvIHx8IHt9O1xuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQobyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RSZXEgPSBmaW5nZXJwcmludDtcbiAgICAgICAgICAgICAgICBpZiAocmVzcCA9IHRoaXMuX2NhY2hlLmdldChmaW5nZXJwcmludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IobnVsbCwgcmVzcCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0KG8sIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gVHJhbnNwb3J0O1xuICAgIH0oKTtcbiAgICB2YXIgU2VhcmNoSW5kZXggPSB3aW5kb3cuU2VhcmNoSW5kZXggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBDSElMRFJFTiA9IFwiY1wiLCBJRFMgPSBcImlcIjtcbiAgICAgICAgZnVuY3Rpb24gU2VhcmNoSW5kZXgobykge1xuICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICBpZiAoIW8uZGF0dW1Ub2tlbml6ZXIgfHwgIW8ucXVlcnlUb2tlbml6ZXIpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwiZGF0dW1Ub2tlbml6ZXIgYW5kIHF1ZXJ5VG9rZW5pemVyIGFyZSBib3RoIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pZGVudGlmeSA9IG8uaWRlbnRpZnkgfHwgXy5zdHJpbmdpZnk7XG4gICAgICAgICAgICB0aGlzLmRhdHVtVG9rZW5pemVyID0gby5kYXR1bVRva2VuaXplcjtcbiAgICAgICAgICAgIHRoaXMucXVlcnlUb2tlbml6ZXIgPSBvLnF1ZXJ5VG9rZW5pemVyO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oU2VhcmNoSW5kZXgucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBib290c3RyYXA6IGZ1bmN0aW9uIGJvb3RzdHJhcChvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXR1bXMgPSBvLmRhdHVtcztcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWUgPSBvLnRyaWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBfLmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gICAgICAgICAgICAgICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKGRhdHVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZCwgdG9rZW5zO1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmRhdHVtc1tpZCA9IHRoYXQuaWRlbnRpZnkoZGF0dW0pXSA9IGRhdHVtO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBub3JtYWxpemVUb2tlbnModGhhdC5kYXR1bVRva2VuaXplcihkYXR1bSkpO1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2godG9rZW5zLCBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGNoYXJzLCBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0aGF0LnRyaWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFycyA9IHRva2VuLnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoID0gY2hhcnMuc2hpZnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlW0NISUxEUkVOXVtjaF0gfHwgKG5vZGVbQ0hJTERSRU5dW2NoXSA9IG5ld05vZGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVtJRFNdLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChpZHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8ubWFwKGlkcywgZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuZGF0dW1zW2lkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uIHNlYXJjaChxdWVyeSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgdG9rZW5zLCBtYXRjaGVzO1xuICAgICAgICAgICAgICAgIHRva2VucyA9IG5vcm1hbGl6ZVRva2Vucyh0aGlzLnF1ZXJ5VG9rZW5pemVyKHF1ZXJ5KSk7XG4gICAgICAgICAgICAgICAgXy5lYWNoKHRva2VucywgZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGNoYXJzLCBjaCwgaWRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0aGF0LnRyaWU7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzID0gdG9rZW4uc3BsaXQoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIChjaCA9IGNoYXJzLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZVtDSElMRFJFTl1bY2hdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlICYmIGNoYXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gbm9kZVtJRFNdLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgPyBnZXRJbnRlcnNlY3Rpb24obWF0Y2hlcywgaWRzKSA6IGlkcztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzID8gXy5tYXAodW5pcXVlKG1hdGNoZXMpLCBmdW5jdGlvbihpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5kYXR1bXNbaWRdO1xuICAgICAgICAgICAgICAgIH0pIDogW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsOiBmdW5jdGlvbiBhbGwoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRhdHVtcykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLmRhdHVtc1trZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXR1bXMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWUgPSBuZXdOb2RlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0dW1zOiB0aGlzLmRhdHVtcyxcbiAgICAgICAgICAgICAgICAgICAgdHJpZTogdGhpcy50cmllXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBTZWFyY2hJbmRleDtcbiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplVG9rZW5zKHRva2Vucykge1xuICAgICAgICAgICAgdG9rZW5zID0gXy5maWx0ZXIodG9rZW5zLCBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXRva2VuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0b2tlbnMgPSBfLm1hcCh0b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbmV3Tm9kZSgpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0ge307XG4gICAgICAgICAgICBub2RlW0lEU10gPSBbXTtcbiAgICAgICAgICAgIG5vZGVbQ0hJTERSRU5dID0ge307XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB1bmlxdWUoYXJyYXkpIHtcbiAgICAgICAgICAgIHZhciBzZWVuID0ge30sIHVuaXF1ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblthcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblthcnJheVtpXV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWVzLnB1c2goYXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmlxdWVzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldEludGVyc2VjdGlvbihhcnJheUEsIGFycmF5Qikge1xuICAgICAgICAgICAgdmFyIGFpID0gMCwgYmkgPSAwLCBpbnRlcnNlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgIGFycmF5QSA9IGFycmF5QS5zb3J0KCk7XG4gICAgICAgICAgICBhcnJheUIgPSBhcnJheUIuc29ydCgpO1xuICAgICAgICAgICAgdmFyIGxlbkFycmF5QSA9IGFycmF5QS5sZW5ndGgsIGxlbkFycmF5QiA9IGFycmF5Qi5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoYWkgPCBsZW5BcnJheUEgJiYgYmkgPCBsZW5BcnJheUIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlBW2FpXSA8IGFycmF5QltiaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFycmF5QVthaV0gPiBhcnJheUJbYmldKSB7XG4gICAgICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLnB1c2goYXJyYXlBW2FpXSk7XG4gICAgICAgICAgICAgICAgICAgIGFpKys7XG4gICAgICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbjtcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgUHJlZmV0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBrZXlzID0ge1xuICAgICAgICAgICAgZGF0YTogXCJkYXRhXCIsXG4gICAgICAgICAgICBwcm90b2NvbDogXCJwcm90b2NvbFwiLFxuICAgICAgICAgICAgdGh1bWJwcmludDogXCJ0aHVtYnByaW50XCJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gUHJlZmV0Y2gobykge1xuICAgICAgICAgICAgdGhpcy51cmwgPSBvLnVybDtcbiAgICAgICAgICAgIHRoaXMudHRsID0gby50dGw7XG4gICAgICAgICAgICB0aGlzLmNhY2hlID0gby5jYWNoZTtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZSA9IG8ucHJlcGFyZTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtID0gby50cmFuc2Zvcm07XG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydCA9IG8udHJhbnNwb3J0O1xuICAgICAgICAgICAgdGhpcy50aHVtYnByaW50ID0gby50aHVtYnByaW50O1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlID0gbmV3IFBlcnNpc3RlbnRTdG9yYWdlKG8uY2FjaGVLZXkpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oUHJlZmV0Y2gucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfc2V0dGluZ3M6IGZ1bmN0aW9uIHNldHRpbmdzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RvcmU6IGZ1bmN0aW9uIHN0b3JlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGtleXMuZGF0YSwgZGF0YSwgdGhpcy50dGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoa2V5cy5wcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wsIHRoaXMudHRsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGtleXMudGh1bWJwcmludCwgdGhpcy50aHVtYnByaW50LCB0aGlzLnR0bCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJvbUNhY2hlOiBmdW5jdGlvbiBmcm9tQ2FjaGUoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0b3JlZCA9IHt9LCBpc0V4cGlyZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdG9yZWQuZGF0YSA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5cy5kYXRhKTtcbiAgICAgICAgICAgICAgICBzdG9yZWQucHJvdG9jb2wgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleXMucHJvdG9jb2wpO1xuICAgICAgICAgICAgICAgIHN0b3JlZC50aHVtYnByaW50ID0gdGhpcy5zdG9yYWdlLmdldChrZXlzLnRodW1icHJpbnQpO1xuICAgICAgICAgICAgICAgIGlzRXhwaXJlZCA9IHN0b3JlZC50aHVtYnByaW50ICE9PSB0aGlzLnRodW1icHJpbnQgfHwgc3RvcmVkLnByb3RvY29sICE9PSBsb2NhdGlvbi5wcm90b2NvbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVkLmRhdGEgJiYgIWlzRXhwaXJlZCA/IHN0b3JlZC5kYXRhIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmcm9tTmV0d29yazogZnVuY3Rpb24oY2IpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIHNldHRpbmdzO1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMucHJlcGFyZSh0aGlzLl9zZXR0aW5ncygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydChzZXR0aW5ncykuZmFpbChvbkVycm9yKS5kb25lKG9uUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblJlc3BvbnNlKHJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgY2IobnVsbCwgdGhhdC50cmFuc2Zvcm0ocmVzcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJlZmV0Y2g7XG4gICAgfSgpO1xuICAgIHZhciBSZW1vdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIFJlbW90ZShvKSB7XG4gICAgICAgICAgICB0aGlzLnVybCA9IG8udXJsO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlID0gby5wcmVwYXJlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBvLnRyYW5zZm9ybTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydCh7XG4gICAgICAgICAgICAgICAgY2FjaGU6IG8uY2FjaGUsXG4gICAgICAgICAgICAgICAgbGltaXRlcjogby5saW1pdGVyLFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogby50cmFuc3BvcnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oUmVtb3RlLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgX3NldHRpbmdzOiBmdW5jdGlvbiBzZXR0aW5ncygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KHF1ZXJ5LCBjYikge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgc2V0dGluZ3M7XG4gICAgICAgICAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMucHJlcGFyZShxdWVyeSwgdGhpcy5fc2V0dGluZ3MoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LmdldChzZXR0aW5ncywgb25SZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb25SZXNwb25zZShlcnIsIHJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyID8gY2IoW10pIDogY2IodGhhdC50cmFuc2Zvcm0ocmVzcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYW5jZWxMYXN0UmVxdWVzdDogZnVuY3Rpb24gY2FuY2VsTGFzdFJlcXVlc3QoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUmVtb3RlO1xuICAgIH0oKTtcbiAgICB2YXIgb1BhcnNlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhcnNlKG8pIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0cywgc29ydGVyO1xuICAgICAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpZGVudGlmeTogXy5zdHJpbmdpZnksXG4gICAgICAgICAgICAgICAgZGF0dW1Ub2tlbml6ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgcXVlcnlUb2tlbml6ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgc3VmZmljaWVudDogNSxcbiAgICAgICAgICAgICAgICBzb3J0ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgbG9jYWw6IFtdLFxuICAgICAgICAgICAgICAgIHByZWZldGNoOiBudWxsLFxuICAgICAgICAgICAgICAgIHJlbW90ZTogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG8gPSBfLm1peGluKGRlZmF1bHRzLCBvIHx8IHt9KTtcbiAgICAgICAgICAgICFvLmRhdHVtVG9rZW5pemVyICYmICQuZXJyb3IoXCJkYXR1bVRva2VuaXplciBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgICFvLnF1ZXJ5VG9rZW5pemVyICYmICQuZXJyb3IoXCJxdWVyeVRva2VuaXplciBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgIHNvcnRlciA9IG8uc29ydGVyO1xuICAgICAgICAgICAgby5zb3J0ZXIgPSBzb3J0ZXIgPyBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguc29ydChzb3J0ZXIpO1xuICAgICAgICAgICAgfSA6IF8uaWRlbnRpdHk7XG4gICAgICAgICAgICBvLmxvY2FsID0gXy5pc0Z1bmN0aW9uKG8ubG9jYWwpID8gby5sb2NhbCgpIDogby5sb2NhbDtcbiAgICAgICAgICAgIG8ucHJlZmV0Y2ggPSBwYXJzZVByZWZldGNoKG8ucHJlZmV0Y2gpO1xuICAgICAgICAgICAgby5yZW1vdGUgPSBwYXJzZVJlbW90ZShvLnJlbW90ZSk7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VQcmVmZXRjaChvKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdHM7XG4gICAgICAgICAgICBpZiAoIW8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgICAgICB0dGw6IDI0ICogNjAgKiA2MCAqIDFlMyxcbiAgICAgICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYWNoZUtleTogbnVsbCxcbiAgICAgICAgICAgICAgICB0aHVtYnByaW50OiBcIlwiLFxuICAgICAgICAgICAgICAgIHByZXBhcmU6IF8uaWRlbnRpdHksXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBfLmlkZW50aXR5LFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG8gPSBfLmlzU3RyaW5nKG8pID8ge1xuICAgICAgICAgICAgICAgIHVybDogb1xuICAgICAgICAgICAgfSA6IG87XG4gICAgICAgICAgICBvID0gXy5taXhpbihkZWZhdWx0cywgbyk7XG4gICAgICAgICAgICAhby51cmwgJiYgJC5lcnJvcihcInByZWZldGNoIHJlcXVpcmVzIHVybCB0byBiZSBzZXRcIik7XG4gICAgICAgICAgICBvLnRyYW5zZm9ybSA9IG8uZmlsdGVyIHx8IG8udHJhbnNmb3JtO1xuICAgICAgICAgICAgby5jYWNoZUtleSA9IG8uY2FjaGVLZXkgfHwgby51cmw7XG4gICAgICAgICAgICBvLnRodW1icHJpbnQgPSBWRVJTSU9OICsgby50aHVtYnByaW50O1xuICAgICAgICAgICAgby50cmFuc3BvcnQgPSBvLnRyYW5zcG9ydCA/IGNhbGxiYWNrVG9EZWZlcnJlZChvLnRyYW5zcG9ydCkgOiAkLmFqYXg7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYXJzZVJlbW90ZShvKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdHM7XG4gICAgICAgICAgICBpZiAoIW8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcHJlcGFyZTogbnVsbCxcbiAgICAgICAgICAgICAgICByZXBsYWNlOiBudWxsLFxuICAgICAgICAgICAgICAgIHdpbGRjYXJkOiBudWxsLFxuICAgICAgICAgICAgICAgIGxpbWl0ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgcmF0ZUxpbWl0Qnk6IFwiZGVib3VuY2VcIixcbiAgICAgICAgICAgICAgICByYXRlTGltaXRXYWl0OiAzMDAsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBfLmlkZW50aXR5LFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG8gPSBfLmlzU3RyaW5nKG8pID8ge1xuICAgICAgICAgICAgICAgIHVybDogb1xuICAgICAgICAgICAgfSA6IG87XG4gICAgICAgICAgICBvID0gXy5taXhpbihkZWZhdWx0cywgbyk7XG4gICAgICAgICAgICAhby51cmwgJiYgJC5lcnJvcihcInJlbW90ZSByZXF1aXJlcyB1cmwgdG8gYmUgc2V0XCIpO1xuICAgICAgICAgICAgby50cmFuc2Zvcm0gPSBvLmZpbHRlciB8fCBvLnRyYW5zZm9ybTtcbiAgICAgICAgICAgIG8ucHJlcGFyZSA9IHRvUmVtb3RlUHJlcGFyZShvKTtcbiAgICAgICAgICAgIG8ubGltaXRlciA9IHRvTGltaXRlcihvKTtcbiAgICAgICAgICAgIG8udHJhbnNwb3J0ID0gby50cmFuc3BvcnQgPyBjYWxsYmFja1RvRGVmZXJyZWQoby50cmFuc3BvcnQpIDogJC5hamF4O1xuICAgICAgICAgICAgZGVsZXRlIG8ucmVwbGFjZTtcbiAgICAgICAgICAgIGRlbGV0ZSBvLndpbGRjYXJkO1xuICAgICAgICAgICAgZGVsZXRlIG8ucmF0ZUxpbWl0Qnk7XG4gICAgICAgICAgICBkZWxldGUgby5yYXRlTGltaXRXYWl0O1xuICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9SZW1vdGVQcmVwYXJlKG8pIHtcbiAgICAgICAgICAgIHZhciBwcmVwYXJlLCByZXBsYWNlLCB3aWxkY2FyZDtcbiAgICAgICAgICAgIHByZXBhcmUgPSBvLnByZXBhcmU7XG4gICAgICAgICAgICByZXBsYWNlID0gby5yZXBsYWNlO1xuICAgICAgICAgICAgd2lsZGNhcmQgPSBvLndpbGRjYXJkO1xuICAgICAgICAgICAgaWYgKHByZXBhcmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlcGFyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICAgICAgICAgICAgcHJlcGFyZSA9IHByZXBhcmVCeVJlcGxhY2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG8ud2lsZGNhcmQpIHtcbiAgICAgICAgICAgICAgICBwcmVwYXJlID0gcHJlcGFyZUJ5V2lsZGNhcmQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXBhcmUgPSBpZGVuaXR5UHJlcGFyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlO1xuICAgICAgICAgICAgZnVuY3Rpb24gcHJlcGFyZUJ5UmVwbGFjZShxdWVyeSwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy51cmwgPSByZXBsYWNlKHNldHRpbmdzLnVybCwgcXVlcnkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHByZXBhcmVCeVdpbGRjYXJkKHF1ZXJ5LCBzZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHNldHRpbmdzLnVybCA9IHNldHRpbmdzLnVybC5yZXBsYWNlKHdpbGRjYXJkLCBlbmNvZGVVUklDb21wb25lbnQocXVlcnkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpZGVuaXR5UHJlcGFyZShxdWVyeSwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9MaW1pdGVyKG8pIHtcbiAgICAgICAgICAgIHZhciBsaW1pdGVyLCBtZXRob2QsIHdhaXQ7XG4gICAgICAgICAgICBsaW1pdGVyID0gby5saW1pdGVyO1xuICAgICAgICAgICAgbWV0aG9kID0gby5yYXRlTGltaXRCeTtcbiAgICAgICAgICAgIHdhaXQgPSBvLnJhdGVMaW1pdFdhaXQ7XG4gICAgICAgICAgICBpZiAoIWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgICBsaW1pdGVyID0gL150aHJvdHRsZSQvaS50ZXN0KG1ldGhvZCkgPyB0aHJvdHRsZSh3YWl0KSA6IGRlYm91bmNlKHdhaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxpbWl0ZXI7XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWJvdW5jZSh3YWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfLmRlYm91bmNlKGZuLCB3YWl0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdGhyb3R0bGUod2FpdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0aHJvdHRsZShmbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy50aHJvdHRsZShmbiwgd2FpdCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxsYmFja1RvRGVmZXJyZWQoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVyKG8pIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgZm4obywgb25TdWNjZXNzLCBvbkVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb25TdWNjZXNzKHJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUocmVzcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVycikge1xuICAgICAgICAgICAgICAgICAgICBfLmRlZmVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgdmFyIEJsb29kaG91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBvbGQ7XG4gICAgICAgIG9sZCA9IHdpbmRvdyAmJiB3aW5kb3cuQmxvb2Rob3VuZDtcbiAgICAgICAgZnVuY3Rpb24gQmxvb2Rob3VuZChvKSB7XG4gICAgICAgICAgICBvID0gb1BhcnNlcihvKTtcbiAgICAgICAgICAgIHRoaXMuc29ydGVyID0gby5zb3J0ZXI7XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZ5ID0gby5pZGVudGlmeTtcbiAgICAgICAgICAgIHRoaXMuc3VmZmljaWVudCA9IG8uc3VmZmljaWVudDtcbiAgICAgICAgICAgIHRoaXMubG9jYWwgPSBvLmxvY2FsO1xuICAgICAgICAgICAgdGhpcy5yZW1vdGUgPSBvLnJlbW90ZSA/IG5ldyBSZW1vdGUoby5yZW1vdGUpIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMucHJlZmV0Y2ggPSBvLnByZWZldGNoID8gbmV3IFByZWZldGNoKG8ucHJlZmV0Y2gpIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXcgU2VhcmNoSW5kZXgoe1xuICAgICAgICAgICAgICAgIGlkZW50aWZ5OiB0aGlzLmlkZW50aWZ5LFxuICAgICAgICAgICAgICAgIGRhdHVtVG9rZW5pemVyOiBvLmRhdHVtVG9rZW5pemVyLFxuICAgICAgICAgICAgICAgIHF1ZXJ5VG9rZW5pemVyOiBvLnF1ZXJ5VG9rZW5pemVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG8uaW5pdGlhbGl6ZSAhPT0gZmFsc2UgJiYgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgQmxvb2Rob3VuZC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gbm9Db25mbGljdCgpIHtcbiAgICAgICAgICAgIHdpbmRvdyAmJiAod2luZG93LkJsb29kaG91bmQgPSBvbGQpO1xuICAgICAgICAgICAgcmV0dXJuIEJsb29kaG91bmQ7XG4gICAgICAgIH07XG4gICAgICAgIEJsb29kaG91bmQudG9rZW5pemVycyA9IHRva2VuaXplcnM7XG4gICAgICAgIF8ubWl4aW4oQmxvb2Rob3VuZC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIF9fdHRBZGFwdGVyOiBmdW5jdGlvbiB0dEFkYXB0ZXIoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW90ZSA/IHdpdGhBc3luYyA6IHdpdGhvdXRBc3luYztcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aXRoQXN5bmMocXVlcnksIHN5bmMsIGFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0LnNlYXJjaChxdWVyeSwgc3luYywgYXN5bmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aXRob3V0QXN5bmMocXVlcnksIHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuc2VhcmNoKHF1ZXJ5LCBzeW5jKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2xvYWRQcmVmZXRjaDogZnVuY3Rpb24gbG9hZFByZWZldGNoKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgZGVmZXJyZWQsIHNlcmlhbGl6ZWQ7XG4gICAgICAgICAgICAgICAgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZWZldGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWQgPSB0aGlzLnByZWZldGNoLmZyb21DYWNoZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXguYm9vdHN0cmFwKHNlcmlhbGl6ZWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXRjaC5mcm9tTmV0d29yayhkb25lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb25lKGVyciwgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhhdC5hZGQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQucHJlZmV0Y2guc3RvcmUodGhhdC5pbmRleC5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2luaXRpYWxpemU6IGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBkZWZlcnJlZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgKHRoaXMuaW5pdFByb21pc2UgPSB0aGlzLl9sb2FkUHJlZmV0Y2goKSkuZG9uZShhZGRMb2NhbFRvSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRQcm9taXNlO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZExvY2FsVG9JbmRleCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5hZGQodGhhdC5sb2NhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIGluaXRpYWxpemUoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuaW5pdFByb21pc2UgfHwgZm9yY2UgPyB0aGlzLl9pbml0aWFsaXplKCkgOiB0aGlzLmluaXRQcm9taXNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gYWRkKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4LmFkZChkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChpZHMpIHtcbiAgICAgICAgICAgICAgICBpZHMgPSBfLmlzQXJyYXkoaWRzKSA/IGlkcyA6IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5nZXQoaWRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uIHNlYXJjaChxdWVyeSwgc3luYywgYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIGxvY2FsO1xuICAgICAgICAgICAgICAgIGxvY2FsID0gdGhpcy5zb3J0ZXIodGhpcy5pbmRleC5zZWFyY2gocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBzeW5jKHRoaXMucmVtb3RlID8gbG9jYWwuc2xpY2UoKSA6IGxvY2FsKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZW1vdGUgJiYgbG9jYWwubGVuZ3RoIDwgdGhpcy5zdWZmaWNpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlLmdldChxdWVyeSwgcHJvY2Vzc1JlbW90ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5jYW5jZWxMYXN0UmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUmVtb3RlKHJlbW90ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm9uRHVwbGljYXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2gocmVtb3RlLCBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAhXy5zb21lKGxvY2FsLCBmdW5jdGlvbihsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuaWRlbnRpZnkocikgPT09IHRoYXQuaWRlbnRpZnkobCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSAmJiBub25EdXBsaWNhdGVzLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luYyAmJiBhc3luYyhub25EdXBsaWNhdGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWxsOiBmdW5jdGlvbiBhbGwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguYWxsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgucmVzZXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhclByZWZldGNoQ2FjaGU6IGZ1bmN0aW9uIGNsZWFyUHJlZmV0Y2hDYWNoZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZldGNoICYmIHRoaXMucHJlZmV0Y2guY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhclJlbW90ZUNhY2hlOiBmdW5jdGlvbiBjbGVhclJlbW90ZUNhY2hlKCkge1xuICAgICAgICAgICAgICAgIFRyYW5zcG9ydC5yZXNldENhY2hlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHRBZGFwdGVyOiBmdW5jdGlvbiB0dEFkYXB0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX190dEFkYXB0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBCbG9vZGhvdW5kO1xuICAgIH0oKTtcbiAgICByZXR1cm4gQmxvb2Rob3VuZDtcbn0pO1xuXG4oZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoXCJ0eXBlYWhlYWQuanNcIiwgWyBcImpxdWVyeVwiIF0sIGZ1bmN0aW9uKGEwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeShhMCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJqcXVlcnlcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZhY3RvcnkoalF1ZXJ5KTtcbiAgICB9XG59KSh0aGlzLCBmdW5jdGlvbigkKSB7XG4gICAgdmFyIF8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc01zaWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpID8gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKG1zaWUgfHJ2OikoXFxkKyguXFxkKyk/KS9pKVsyXSA6IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQmxhbmtTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICAgICAgICAgIHJldHVybiAhc3RyIHx8IC9eXFxzKiQvLnRlc3Qoc3RyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlc2NhcGVSZWdFeENoYXJzOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNOdW1iZXI6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQXJyYXk6ICQuaXNBcnJheSxcbiAgICAgICAgICAgIGlzRnVuY3Rpb246ICQuaXNGdW5jdGlvbixcbiAgICAgICAgICAgIGlzT2JqZWN0OiAkLmlzUGxhaW5PYmplY3QsXG4gICAgICAgICAgICBpc1VuZGVmaW5lZDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFbGVtZW50OiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNKUXVlcnk6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiAkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvU3RyOiBmdW5jdGlvbiB0b1N0cihzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNVbmRlZmluZWQocykgfHwgcyA9PT0gbnVsbCA/IFwiXCIgOiBzICsgXCJcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiaW5kOiAkLnByb3h5LFxuICAgICAgICAgICAgZWFjaDogZnVuY3Rpb24oY29sbGVjdGlvbiwgY2IpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY29sbGVjdGlvbiwgcmV2ZXJzZUFyZ3MpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VBcmdzKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFwOiAkLm1hcCxcbiAgICAgICAgICAgIGZpbHRlcjogJC5ncmVwLFxuICAgICAgICAgICAgZXZlcnk6IGZ1bmN0aW9uKG9iaiwgdGVzdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb21lOiBmdW5jdGlvbihvYmosIHRlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1peGluOiAkLmV4dGVuZCxcbiAgICAgICAgICAgIGlkZW50aXR5OiBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh0cnVlLCB7fSwgb2JqKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRJZEdlbmVyYXRvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBsYXRpZnk6IGZ1bmN0aW9uIHRlbXBsYXRpZnkob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQuaXNGdW5jdGlvbihvYmopID8gb2JqIDogdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmZXI6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVib3VuY2U6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciB0aW1lb3V0LCByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHMsIGxhdGVyLCBjYWxsTm93O1xuICAgICAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgcmVzdWx0LCBwcmV2aW91cywgbGF0ZXI7XG4gICAgICAgICAgICAgICAgcHJldmlvdXMgPSAwO1xuICAgICAgICAgICAgICAgIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLCByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzU3RyaW5nKHZhbCkgPyB2YWwgOiBKU09OLnN0cmluZ2lmeSh2YWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge31cbiAgICAgICAgfTtcbiAgICB9KCk7XG4gICAgdmFyIFdXVyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGRlZmF1bHRDbGFzc05hbWVzID0ge1xuICAgICAgICAgICAgd3JhcHBlcjogXCJ0d2l0dGVyLXR5cGVhaGVhZFwiLFxuICAgICAgICAgICAgaW5wdXQ6IFwidHQtaW5wdXRcIixcbiAgICAgICAgICAgIGhpbnQ6IFwidHQtaGludFwiLFxuICAgICAgICAgICAgbWVudTogXCJ0dC1tZW51XCIsXG4gICAgICAgICAgICBkYXRhc2V0OiBcInR0LWRhdGFzZXRcIixcbiAgICAgICAgICAgIHN1Z2dlc3Rpb246IFwidHQtc3VnZ2VzdGlvblwiLFxuICAgICAgICAgICAgc2VsZWN0YWJsZTogXCJ0dC1zZWxlY3RhYmxlXCIsXG4gICAgICAgICAgICBlbXB0eTogXCJ0dC1lbXB0eVwiLFxuICAgICAgICAgICAgb3BlbjogXCJ0dC1vcGVuXCIsXG4gICAgICAgICAgICBjdXJzb3I6IFwidHQtY3Vyc29yXCIsXG4gICAgICAgICAgICBoaWdobGlnaHQ6IFwidHQtaGlnaGxpZ2h0XCJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkO1xuICAgICAgICBmdW5jdGlvbiBidWlsZChvKSB7XG4gICAgICAgICAgICB2YXIgd3d3LCBjbGFzc2VzO1xuICAgICAgICAgICAgY2xhc3NlcyA9IF8ubWl4aW4oe30sIGRlZmF1bHRDbGFzc05hbWVzLCBvKTtcbiAgICAgICAgICAgIHd3dyA9IHtcbiAgICAgICAgICAgICAgICBjc3M6IGJ1aWxkQ3NzKCksXG4gICAgICAgICAgICAgICAgY2xhc3NlczogY2xhc3NlcyxcbiAgICAgICAgICAgICAgICBodG1sOiBidWlsZEh0bWwoY2xhc3NlcyksXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JzOiBidWlsZFNlbGVjdG9ycyhjbGFzc2VzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY3NzOiB3d3cuY3NzLFxuICAgICAgICAgICAgICAgIGh0bWw6IHd3dy5odG1sLFxuICAgICAgICAgICAgICAgIGNsYXNzZXM6IHd3dy5jbGFzc2VzLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yczogd3d3LnNlbGVjdG9ycyxcbiAgICAgICAgICAgICAgICBtaXhpbjogZnVuY3Rpb24obykge1xuICAgICAgICAgICAgICAgICAgICBfLm1peGluKG8sIHd3dyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZEh0bWwoYykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiAnPHNwYW4gY2xhc3M9XCInICsgYy53cmFwcGVyICsgJ1wiPjwvc3Bhbj4nLFxuICAgICAgICAgICAgICAgIG1lbnU6ICc8ZGl2IGNsYXNzPVwiJyArIGMubWVudSArICdcIj48L2Rpdj4nXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkU2VsZWN0b3JzKGNsYXNzZXMpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSB7fTtcbiAgICAgICAgICAgIF8uZWFjaChjbGFzc2VzLCBmdW5jdGlvbih2LCBrKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3JzW2tdID0gXCIuXCIgKyB2O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ3NzKCkge1xuICAgICAgICAgICAgdmFyIGNzcyA9IHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhpbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IFwiMVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5wdXRXaXRoTm9IaW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IFwidG9wXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lbnU6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogXCIxMDBcIixcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGx0cjoge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBydGw6IHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBcIiAwXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKF8uaXNNc2llKCkpIHtcbiAgICAgICAgICAgICAgICBfLm1peGluKGNzcy5pbnB1dCwge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IFwidXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBNylcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNzcztcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgRXZlbnRCdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBuYW1lc3BhY2UsIGRlcHJlY2F0aW9uTWFwO1xuICAgICAgICBuYW1lc3BhY2UgPSBcInR5cGVhaGVhZDpcIjtcbiAgICAgICAgZGVwcmVjYXRpb25NYXAgPSB7XG4gICAgICAgICAgICByZW5kZXI6IFwicmVuZGVyZWRcIixcbiAgICAgICAgICAgIGN1cnNvcmNoYW5nZTogXCJjdXJzb3JjaGFuZ2VkXCIsXG4gICAgICAgICAgICBzZWxlY3Q6IFwic2VsZWN0ZWRcIixcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJhdXRvY29tcGxldGVkXCJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gRXZlbnRCdXMobykge1xuICAgICAgICAgICAgaWYgKCFvIHx8ICFvLmVsKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcIkV2ZW50QnVzIGluaXRpYWxpemVkIHdpdGhvdXQgZWxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiRlbCA9ICQoby5lbCk7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihFdmVudEJ1cy5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIF90cmlnZ2VyOiBmdW5jdGlvbih0eXBlLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyICRlO1xuICAgICAgICAgICAgICAgICRlID0gJC5FdmVudChuYW1lc3BhY2UgKyB0eXBlKTtcbiAgICAgICAgICAgICAgICAoYXJncyA9IGFyZ3MgfHwgW10pLnVuc2hpZnQoJGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLnRyaWdnZXIuYXBwbHkodGhpcy4kZWwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncywgJGU7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAkZSA9IHRoaXMuX3RyaWdnZXIoXCJiZWZvcmVcIiArIHR5cGUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlcHJlY2F0ZWRUeXBlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIodHlwZSwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwcmVjYXRlZFR5cGUgPSBkZXByZWNhdGlvbk1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKGRlcHJlY2F0ZWRUeXBlLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudEJ1cztcbiAgICB9KCk7XG4gICAgdmFyIEV2ZW50RW1pdHRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIHNwbGl0dGVyID0gL1xccysvLCBuZXh0VGljayA9IGdldE5leHRUaWNrKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvblN5bmM6IG9uU3luYyxcbiAgICAgICAgICAgIG9uQXN5bmM6IG9uQXN5bmMsXG4gICAgICAgICAgICBvZmY6IG9mZixcbiAgICAgICAgICAgIHRyaWdnZXI6IHRyaWdnZXJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gb24obWV0aG9kLCB0eXBlcywgY2IsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHZhciB0eXBlO1xuICAgICAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy5zcGxpdChzcGxpdHRlcik7XG4gICAgICAgICAgICBjYiA9IGNvbnRleHQgPyBiaW5kQ29udGV4dChjYiwgY29udGV4dCkgOiBjYjtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgICAgICAgICAgIHdoaWxlICh0eXBlID0gdHlwZXMuc2hpZnQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1t0eXBlXSA9IHRoaXMuX2NhbGxiYWNrc1t0eXBlXSB8fCB7XG4gICAgICAgICAgICAgICAgICAgIHN5bmM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBhc3luYzogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1t0eXBlXVttZXRob2RdLnB1c2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25Bc3luYyh0eXBlcywgY2IsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBvbi5jYWxsKHRoaXMsIFwiYXN5bmNcIiwgdHlwZXMsIGNiLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvblN5bmModHlwZXMsIGNiLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gb24uY2FsbCh0aGlzLCBcInN5bmNcIiwgdHlwZXMsIGNiLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvZmYodHlwZXMpIHtcbiAgICAgICAgICAgIHZhciB0eXBlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoc3BsaXR0ZXIpO1xuICAgICAgICAgICAgd2hpbGUgKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1t0eXBlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXIodHlwZXMpIHtcbiAgICAgICAgICAgIHZhciB0eXBlLCBjYWxsYmFja3MsIGFyZ3MsIHN5bmNGbHVzaCwgYXN5bmNGbHVzaDtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnNwbGl0KHNwbGl0dGVyKTtcbiAgICAgICAgICAgIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB3aGlsZSAoKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSAmJiAoY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW3R5cGVdKSkge1xuICAgICAgICAgICAgICAgIHN5bmNGbHVzaCA9IGdldEZsdXNoKGNhbGxiYWNrcy5zeW5jLCB0aGlzLCBbIHR5cGUgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgICAgIGFzeW5jRmx1c2ggPSBnZXRGbHVzaChjYWxsYmFja3MuYXN5bmMsIHRoaXMsIFsgdHlwZSBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgc3luY0ZsdXNoKCkgJiYgbmV4dFRpY2soYXN5bmNGbHVzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRGbHVzaChjYWxsYmFja3MsIGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbHVzaDtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBjYW5jZWxsZWQ7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7ICFjYW5jZWxsZWQgJiYgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZCA9IGNhbGxiYWNrc1tpXS5hcHBseShjb250ZXh0LCBhcmdzKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhY2FuY2VsbGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE5leHRUaWNrKCkge1xuICAgICAgICAgICAgdmFyIG5leHRUaWNrRm47XG4gICAgICAgICAgICBpZiAod2luZG93LnNldEltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIG5leHRUaWNrRm4gPSBmdW5jdGlvbiBuZXh0VGlja1NldEltbWVkaWF0ZShmbikge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0VGlja0ZuID0gZnVuY3Rpb24gbmV4dFRpY2tTZXRUaW1lb3V0KGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5leHRUaWNrRm47XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYmluZENvbnRleHQoZm4sIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5iaW5kID8gZm4uYmluZChjb250ZXh0KSA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KGNvbnRleHQsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBoaWdobGlnaHQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIG5vZGU6IG51bGwsXG4gICAgICAgICAgICBwYXR0ZXJuOiBudWxsLFxuICAgICAgICAgICAgdGFnTmFtZTogXCJzdHJvbmdcIixcbiAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgIHdvcmRzT25seTogZmFsc2UsXG4gICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaGlnaHRsaWdodChvKSB7XG4gICAgICAgICAgICB2YXIgcmVnZXg7XG4gICAgICAgICAgICBvID0gXy5taXhpbih7fSwgZGVmYXVsdHMsIG8pO1xuICAgICAgICAgICAgaWYgKCFvLm5vZGUgfHwgIW8ucGF0dGVybikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG8ucGF0dGVybiA9IF8uaXNBcnJheShvLnBhdHRlcm4pID8gby5wYXR0ZXJuIDogWyBvLnBhdHRlcm4gXTtcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2V0UmVnZXgoby5wYXR0ZXJuLCBvLmNhc2VTZW5zaXRpdmUsIG8ud29yZHNPbmx5KTtcbiAgICAgICAgICAgIHRyYXZlcnNlKG8ubm9kZSwgaGlnaHRsaWdodFRleHROb2RlKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhpZ2h0bGlnaHRUZXh0Tm9kZSh0ZXh0Tm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCwgcGF0dGVybk5vZGUsIHdyYXBwZXJOb2RlO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dE5vZGUuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlck5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudChvLnRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICBvLmNsYXNzTmFtZSAmJiAod3JhcHBlck5vZGUuY2xhc3NOYW1lID0gby5jbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuTm9kZSA9IHRleHROb2RlLnNwbGl0VGV4dChtYXRjaC5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5Ob2RlLnNwbGl0VGV4dChtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyTm9kZS5hcHBlbmRDaGlsZChwYXR0ZXJuTm9kZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwcGVyTm9kZSwgcGF0dGVybk5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gISFtYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlKGVsLCBoaWdodGxpZ2h0VGV4dE5vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlLCBURVhUX05PREVfVFlQRSA9IDM7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVsLmNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERV9UWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IGhpZ2h0bGlnaHRUZXh0Tm9kZShjaGlsZE5vZGUpID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZShjaGlsZE5vZGUsIGhpZ2h0bGlnaHRUZXh0Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIGdldFJlZ2V4KHBhdHRlcm5zLCBjYXNlU2Vuc2l0aXZlLCB3b3Jkc09ubHkpIHtcbiAgICAgICAgICAgIHZhciBlc2NhcGVkUGF0dGVybnMgPSBbXSwgcmVnZXhTdHI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0dGVybnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkUGF0dGVybnMucHVzaChfLmVzY2FwZVJlZ0V4Q2hhcnMocGF0dGVybnNbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZ2V4U3RyID0gd29yZHNPbmx5ID8gXCJcXFxcYihcIiArIGVzY2FwZWRQYXR0ZXJucy5qb2luKFwifFwiKSArIFwiKVxcXFxiXCIgOiBcIihcIiArIGVzY2FwZWRQYXR0ZXJucy5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICAgICAgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBuZXcgUmVnRXhwKHJlZ2V4U3RyKSA6IG5ldyBSZWdFeHAocmVnZXhTdHIsIFwiaVwiKTtcbiAgICAgICAgfVxuICAgIH0od2luZG93LmRvY3VtZW50KTtcbiAgICB2YXIgSW5wdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBzcGVjaWFsS2V5Q29kZU1hcDtcbiAgICAgICAgc3BlY2lhbEtleUNvZGVNYXAgPSB7XG4gICAgICAgICAgICA5OiBcInRhYlwiLFxuICAgICAgICAgICAgMjc6IFwiZXNjXCIsXG4gICAgICAgICAgICAzNzogXCJsZWZ0XCIsXG4gICAgICAgICAgICAzOTogXCJyaWdodFwiLFxuICAgICAgICAgICAgMTM6IFwiZW50ZXJcIixcbiAgICAgICAgICAgIDM4OiBcInVwXCIsXG4gICAgICAgICAgICA0MDogXCJkb3duXCJcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gSW5wdXQobywgd3d3KSB7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghby5pbnB1dCkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJpbnB1dCBpcyBtaXNzaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3d3Lm1peGluKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy4kaGludCA9ICQoby5oaW50KTtcbiAgICAgICAgICAgIHRoaXMuJGlucHV0ID0gJChvLmlucHV0KTtcbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRpbnB1dC52YWwoKTtcbiAgICAgICAgICAgIHRoaXMucXVlcnlXaGVuRm9jdXNlZCA9IHRoaXMuaGFzRm9jdXMoKSA/IHRoaXMucXVlcnkgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy4kb3ZlcmZsb3dIZWxwZXIgPSBidWlsZE92ZXJmbG93SGVscGVyKHRoaXMuJGlucHV0KTtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiRoaW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGludCA9IHRoaXMuZ2V0SGludCA9IHRoaXMuY2xlYXJIaW50ID0gdGhpcy5jbGVhckhpbnRJZkludmFsaWQgPSBfLm5vb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgSW5wdXQubm9ybWFsaXplUXVlcnkgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBfLnRvU3RyKHN0cikucmVwbGFjZSgvXlxccyovZywgXCJcIikucmVwbGFjZSgvXFxzezIsfS9nLCBcIiBcIik7XG4gICAgICAgIH07XG4gICAgICAgIF8ubWl4aW4oSW5wdXQucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIsIHtcbiAgICAgICAgICAgIF9vbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImJsdXJyZWRcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVdoZW5Gb2N1c2VkID0gdGhpcy5xdWVyeTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJmb2N1c2VkXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbktleWRvd246IGZ1bmN0aW9uIG9uS2V5ZG93bigkZSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXlOYW1lID0gc3BlY2lhbEtleUNvZGVNYXBbJGUud2hpY2ggfHwgJGUua2V5Q29kZV07XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlUHJldmVudERlZmF1bHQoa2V5TmFtZSwgJGUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlOYW1lICYmIHRoaXMuX3Nob3VsZFRyaWdnZXIoa2V5TmFtZSwgJGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihrZXlOYW1lICsgXCJLZXllZFwiLCAkZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbklucHV0OiBmdW5jdGlvbiBvbklucHV0KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFF1ZXJ5KHRoaXMuZ2V0SW5wdXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySGludElmSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfbWFuYWdlUHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIG1hbmFnZVByZXZlbnREZWZhdWx0KGtleU5hbWUsICRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZlbnREZWZhdWx0O1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInVwXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZG93blwiOlxuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9ICF3aXRoTW9kaWZpZXIoJGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgJiYgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfc2hvdWxkVHJpZ2dlcjogZnVuY3Rpb24gc2hvdWxkVHJpZ2dlcihrZXlOYW1lLCAkZSkge1xuICAgICAgICAgICAgICAgIHZhciB0cmlnZ2VyO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRhYlwiOlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyID0gIXdpdGhNb2RpZmllcigkZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb246IGZ1bmN0aW9uIGNoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRpciA9ICh0aGlzLiRpbnB1dC5jc3MoXCJkaXJlY3Rpb25cIikgfHwgXCJsdHJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgIT09IGRpcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciA9IGRpcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaGludC5hdHRyKFwiZGlyXCIsIGRpcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImxhbmdEaXJDaGFuZ2VkXCIsIGRpcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zZXRRdWVyeTogZnVuY3Rpb24gc2V0UXVlcnkodmFsLCBzaWxlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJlRXF1aXZhbGVudCwgaGFzRGlmZmVyZW50V2hpdGVzcGFjZTtcbiAgICAgICAgICAgICAgICBhcmVFcXVpdmFsZW50ID0gYXJlUXVlcmllc0VxdWl2YWxlbnQodmFsLCB0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBoYXNEaWZmZXJlbnRXaGl0ZXNwYWNlID0gYXJlRXF1aXZhbGVudCA/IHRoaXMucXVlcnkubGVuZ3RoICE9PSB2YWwubGVuZ3RoIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHZhbDtcbiAgICAgICAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhYXJlRXF1aXZhbGVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJxdWVyeUNoYW5nZWRcIiwgdGhpcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2lsZW50ICYmIGhhc0RpZmZlcmVudFdoaXRlc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwid2hpdGVzcGFjZUNoYW5nZWRcIiwgdGhpcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJpbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgb25CbHVyLCBvbkZvY3VzLCBvbktleWRvd24sIG9uSW5wdXQ7XG4gICAgICAgICAgICAgICAgb25CbHVyID0gXy5iaW5kKHRoaXMuX29uQmx1ciwgdGhpcyk7XG4gICAgICAgICAgICAgICAgb25Gb2N1cyA9IF8uYmluZCh0aGlzLl9vbkZvY3VzLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBvbktleWRvd24gPSBfLmJpbmQodGhpcy5fb25LZXlkb3duLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBvbklucHV0ID0gXy5iaW5kKHRoaXMuX29uSW5wdXQsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKFwiYmx1ci50dFwiLCBvbkJsdXIpLm9uKFwiZm9jdXMudHRcIiwgb25Gb2N1cykub24oXCJrZXlkb3duLnR0XCIsIG9uS2V5ZG93bik7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzTXNpZSgpIHx8IF8uaXNNc2llKCkgPiA5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKFwiaW5wdXQudHRcIiwgb25JbnB1dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oXCJrZXlkb3duLnR0IGtleXByZXNzLnR0IGN1dC50dCBwYXN0ZS50dFwiLCBmdW5jdGlvbigkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWNpYWxLZXlDb2RlTWFwWyRlLndoaWNoIHx8ICRlLmtleUNvZGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihfLmJpbmQodGhhdC5fb25JbnB1dCwgdGhhdCwgJGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldExhbmdEaXI6IGZ1bmN0aW9uIGdldExhbmdEaXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFF1ZXJ5OiBmdW5jdGlvbiBnZXRRdWVyeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSB8fCBcIlwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldFF1ZXJ5OiBmdW5jdGlvbiBzZXRRdWVyeSh2YWwsIHNpbGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFF1ZXJ5KHZhbCwgc2lsZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNRdWVyeUNoYW5nZWRTaW5jZUxhc3RGb2N1czogZnVuY3Rpb24gaGFzUXVlcnlDaGFuZ2VkU2luY2VMYXN0Rm9jdXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkgIT09IHRoaXMucXVlcnlXaGVuRm9jdXNlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRJbnB1dFZhbHVlOiBmdW5jdGlvbiBnZXRJbnB1dFZhbHVlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRpbnB1dC52YWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlOiBmdW5jdGlvbiBzZXRJbnB1dFZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySGludElmSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrTGFuZ3VhZ2VEaXJlY3Rpb24oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldElucHV0VmFsdWU6IGZ1bmN0aW9uIHJlc2V0SW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5xdWVyeSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0SGludDogZnVuY3Rpb24gZ2V0SGludCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaGludC52YWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRIaW50OiBmdW5jdGlvbiBzZXRIaW50KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaGludC52YWwodmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFySGludDogZnVuY3Rpb24gY2xlYXJIaW50KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGludChcIlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhckhpbnRJZkludmFsaWQ6IGZ1bmN0aW9uIGNsZWFySGludElmSW52YWxpZCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsLCBoaW50LCB2YWxJc1ByZWZpeE9mSGludCwgaXNWYWxpZDtcbiAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLmdldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBoaW50ID0gdGhpcy5nZXRIaW50KCk7XG4gICAgICAgICAgICAgICAgdmFsSXNQcmVmaXhPZkhpbnQgPSB2YWwgIT09IGhpbnQgJiYgaGludC5pbmRleE9mKHZhbCkgPT09IDA7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHZhbCAhPT0gXCJcIiAmJiB2YWxJc1ByZWZpeE9mSGludCAmJiAhdGhpcy5oYXNPdmVyZmxvdygpO1xuICAgICAgICAgICAgICAgICFpc1ZhbGlkICYmIHRoaXMuY2xlYXJIaW50KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzRm9jdXM6IGZ1bmN0aW9uIGhhc0ZvY3VzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRpbnB1dC5pcyhcIjpmb2N1c1wiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNPdmVyZmxvdzogZnVuY3Rpb24gaGFzT3ZlcmZsb3coKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnQgPSB0aGlzLiRpbnB1dC53aWR0aCgpIC0gMjtcbiAgICAgICAgICAgICAgICB0aGlzLiRvdmVyZmxvd0hlbHBlci50ZXh0KHRoaXMuZ2V0SW5wdXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb3ZlcmZsb3dIZWxwZXIud2lkdGgoKSA+PSBjb25zdHJhaW50O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQ3Vyc29yQXRFbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCwgc2VsZWN0aW9uU3RhcnQsIHJhbmdlO1xuICAgICAgICAgICAgICAgIHZhbHVlTGVuZ3RoID0gdGhpcy4kaW5wdXQudmFsKCkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gdGhpcy4kaW5wdXRbMF0uc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNOdW1iZXIoc2VsZWN0aW9uU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25TdGFydCA9PT0gdmFsdWVMZW5ndGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIsIC12YWx1ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZUxlbmd0aCA9PT0gcmFuZ2UudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaGludC5vZmYoXCIudHRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub2ZmKFwiLnR0XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJmbG93SGVscGVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGhpbnQgPSB0aGlzLiRpbnB1dCA9IHRoaXMuJG92ZXJmbG93SGVscGVyID0gJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElucHV0O1xuICAgICAgICBmdW5jdGlvbiBidWlsZE92ZXJmbG93SGVscGVyKCRpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICQoJzxwcmUgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9wcmU+JykuY3NzKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogXCJwcmVcIixcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAkaW5wdXQuY3NzKFwiZm9udC1mYW1pbHlcIiksXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICRpbnB1dC5jc3MoXCJmb250LXNpemVcIiksXG4gICAgICAgICAgICAgICAgZm9udFN0eWxlOiAkaW5wdXQuY3NzKFwiZm9udC1zdHlsZVwiKSxcbiAgICAgICAgICAgICAgICBmb250VmFyaWFudDogJGlucHV0LmNzcyhcImZvbnQtdmFyaWFudFwiKSxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAkaW5wdXQuY3NzKFwiZm9udC13ZWlnaHRcIiksXG4gICAgICAgICAgICAgICAgd29yZFNwYWNpbmc6ICRpbnB1dC5jc3MoXCJ3b3JkLXNwYWNpbmdcIiksXG4gICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJGlucHV0LmNzcyhcImxldHRlci1zcGFjaW5nXCIpLFxuICAgICAgICAgICAgICAgIHRleHRJbmRlbnQ6ICRpbnB1dC5jc3MoXCJ0ZXh0LWluZGVudFwiKSxcbiAgICAgICAgICAgICAgICB0ZXh0UmVuZGVyaW5nOiAkaW5wdXQuY3NzKFwidGV4dC1yZW5kZXJpbmdcIiksXG4gICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogJGlucHV0LmNzcyhcInRleHQtdHJhbnNmb3JtXCIpXG4gICAgICAgICAgICB9KS5pbnNlcnRBZnRlcigkaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFyZVF1ZXJpZXNFcXVpdmFsZW50KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBJbnB1dC5ub3JtYWxpemVRdWVyeShhKSA9PT0gSW5wdXQubm9ybWFsaXplUXVlcnkoYik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gd2l0aE1vZGlmaWVyKCRlKSB7XG4gICAgICAgICAgICByZXR1cm4gJGUuYWx0S2V5IHx8ICRlLmN0cmxLZXkgfHwgJGUubWV0YUtleSB8fCAkZS5zaGlmdEtleTtcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgRGF0YXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGtleXMsIG5hbWVHZW5lcmF0b3I7XG4gICAgICAgIGtleXMgPSB7XG4gICAgICAgICAgICB2YWw6IFwidHQtc2VsZWN0YWJsZS1kaXNwbGF5XCIsXG4gICAgICAgICAgICBvYmo6IFwidHQtc2VsZWN0YWJsZS1vYmplY3RcIlxuICAgICAgICB9O1xuICAgICAgICBuYW1lR2VuZXJhdG9yID0gXy5nZXRJZEdlbmVyYXRvcigpO1xuICAgICAgICBmdW5jdGlvbiBEYXRhc2V0KG8sIHd3dykge1xuICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICBvLnRlbXBsYXRlcyA9IG8udGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICAgICAgby50ZW1wbGF0ZXMubm90Rm91bmQgPSBvLnRlbXBsYXRlcy5ub3RGb3VuZCB8fCBvLnRlbXBsYXRlcy5lbXB0eTtcbiAgICAgICAgICAgIGlmICghby5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwibWlzc2luZyBzb3VyY2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW8ubm9kZSkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJtaXNzaW5nIG5vZGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoby5uYW1lICYmICFpc1ZhbGlkTmFtZShvLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcImludmFsaWQgZGF0YXNldCBuYW1lOiBcIiArIG8ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3d3cubWl4aW4odGhpcyk7XG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodCA9ICEhby5oaWdobGlnaHQ7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBvLm5hbWUgfHwgbmFtZUdlbmVyYXRvcigpO1xuICAgICAgICAgICAgdGhpcy5saW1pdCA9IG8ubGltaXQgfHwgNTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUZuID0gZ2V0RGlzcGxheUZuKG8uZGlzcGxheSB8fCBvLmRpc3BsYXlLZXkpO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBnZXRUZW1wbGF0ZXMoby50ZW1wbGF0ZXMsIHRoaXMuZGlzcGxheUZuKTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gby5zb3VyY2UuX190dEFkYXB0ZXIgPyBvLnNvdXJjZS5fX3R0QWRhcHRlcigpIDogby5zb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmFzeW5jID0gXy5pc1VuZGVmaW5lZChvLmFzeW5jKSA/IHRoaXMuc291cmNlLmxlbmd0aCA+IDIgOiAhIW8uYXN5bmM7XG4gICAgICAgICAgICB0aGlzLl9yZXNldExhc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLiRlbCA9ICQoby5ub2RlKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZGF0YXNldCkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmRhdGFzZXQgKyBcIi1cIiArIHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgRGF0YXNldC5leHRyYWN0RGF0YSA9IGZ1bmN0aW9uIGV4dHJhY3REYXRhKGVsKSB7XG4gICAgICAgICAgICB2YXIgJGVsID0gJChlbCk7XG4gICAgICAgICAgICBpZiAoJGVsLmRhdGEoa2V5cy5vYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsOiAkZWwuZGF0YShrZXlzLnZhbCkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqOiAkZWwuZGF0YShrZXlzLm9iaikgfHwgbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgICAgXy5taXhpbihEYXRhc2V0LnByb3RvdHlwZSwgRXZlbnRFbWl0dGVyLCB7XG4gICAgICAgICAgICBfb3ZlcndyaXRlOiBmdW5jdGlvbiBvdmVyd3JpdGUocXVlcnksIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucyB8fCBbXTtcbiAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclN1Z2dlc3Rpb25zKHF1ZXJ5LCBzdWdnZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFzeW5jICYmIHRoaXMudGVtcGxhdGVzLnBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyUGVuZGluZyhxdWVyeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hc3luYyAmJiB0aGlzLnRlbXBsYXRlcy5ub3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJOb3RGb3VuZChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1wdHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwicmVuZGVyZWRcIiwgdGhpcy5uYW1lLCBzdWdnZXN0aW9ucywgZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZChxdWVyeSwgc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggJiYgdGhpcy4kbGFzdFN1Z2dlc3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFN1Z2dlc3Rpb25zKHF1ZXJ5LCBzdWdnZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLiRsYXN0U3VnZ2VzdGlvbi5sZW5ndGggJiYgdGhpcy50ZW1wbGF0ZXMubm90Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyTm90Rm91bmQocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJyZW5kZXJlZFwiLCB0aGlzLm5hbWUsIHN1Z2dlc3Rpb25zLCB0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVuZGVyU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uIHJlbmRlclN1Z2dlc3Rpb25zKHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhciAkZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgJGZyYWdtZW50ID0gdGhpcy5fZ2V0U3VnZ2VzdGlvbnNGcmFnbWVudChxdWVyeSwgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGxhc3RTdWdnZXN0aW9uID0gJGZyYWdtZW50LmNoaWxkcmVuKCkubGFzdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwoJGZyYWdtZW50KS5wcmVwZW5kKHRoaXMuX2dldEhlYWRlcihxdWVyeSwgc3VnZ2VzdGlvbnMpKS5hcHBlbmQodGhpcy5fZ2V0Rm9vdGVyKHF1ZXJ5LCBzdWdnZXN0aW9ucykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9hcHBlbmRTdWdnZXN0aW9uczogZnVuY3Rpb24gYXBwZW5kU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyICRmcmFnbWVudCwgJGxhc3RTdWdnZXN0aW9uO1xuICAgICAgICAgICAgICAgICRmcmFnbWVudCA9IHRoaXMuX2dldFN1Z2dlc3Rpb25zRnJhZ21lbnQocXVlcnksIHN1Z2dlc3Rpb25zKTtcbiAgICAgICAgICAgICAgICAkbGFzdFN1Z2dlc3Rpb24gPSAkZnJhZ21lbnQuY2hpbGRyZW4oKS5sYXN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kbGFzdFN1Z2dlc3Rpb24uYWZ0ZXIoJGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsYXN0U3VnZ2VzdGlvbiA9ICRsYXN0U3VnZ2VzdGlvbjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVuZGVyUGVuZGluZzogZnVuY3Rpb24gcmVuZGVyUGVuZGluZyhxdWVyeSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzLnBlbmRpbmc7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlICYmIHRoaXMuJGVsLmh0bWwodGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVuZGVyTm90Rm91bmQ6IGZ1bmN0aW9uIHJlbmRlck5vdEZvdW5kKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMubm90Rm91bmQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlICYmIHRoaXMuJGVsLmh0bWwodGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZW1wdHk6IGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRMYXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9nZXRTdWdnZXN0aW9uc0ZyYWdtZW50OiBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uc0ZyYWdtZW50KHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICAgICAgXy5lYWNoKHN1Z2dlc3Rpb25zLCBmdW5jdGlvbiBnZXRTdWdnZXN0aW9uTm9kZShzdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkZWwsIGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGF0Ll9pbmplY3RRdWVyeShxdWVyeSwgc3VnZ2VzdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICRlbCA9ICQodGhhdC50ZW1wbGF0ZXMuc3VnZ2VzdGlvbihjb250ZXh0KSkuZGF0YShrZXlzLm9iaiwgc3VnZ2VzdGlvbikuZGF0YShrZXlzLnZhbCwgdGhhdC5kaXNwbGF5Rm4oc3VnZ2VzdGlvbikpLmFkZENsYXNzKHRoYXQuY2xhc3Nlcy5zdWdnZXN0aW9uICsgXCIgXCIgKyB0aGF0LmNsYXNzZXMuc2VsZWN0YWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCRlbFswXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQgJiYgaGlnaGxpZ2h0KHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmNsYXNzZXMuaGlnaGxpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBmcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogcXVlcnlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJChmcmFnbWVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldEZvb3RlcjogZnVuY3Rpb24gZ2V0Rm9vdGVyKHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcy5mb290ZXIgPyB0aGlzLnRlbXBsYXRlcy5mb290ZXIoe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldDogdGhpcy5uYW1lXG4gICAgICAgICAgICAgICAgfSkgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9nZXRIZWFkZXI6IGZ1bmN0aW9uIGdldEhlYWRlcihxdWVyeSwgc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuaGVhZGVyID8gdGhpcy50ZW1wbGF0ZXMuaGVhZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMubmFtZVxuICAgICAgICAgICAgICAgIH0pIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcmVzZXRMYXN0U3VnZ2VzdGlvbjogZnVuY3Rpb24gcmVzZXRMYXN0U3VnZ2VzdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsYXN0U3VnZ2VzdGlvbiA9ICQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfaW5qZWN0UXVlcnk6IGZ1bmN0aW9uIGluamVjdFF1ZXJ5KHF1ZXJ5LCBvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc09iamVjdChvYmopID8gXy5taXhpbih7XG4gICAgICAgICAgICAgICAgICAgIF9xdWVyeTogcXVlcnlcbiAgICAgICAgICAgICAgICB9LCBvYmopIDogb2JqO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBjYW5jZWxlZCA9IGZhbHNlLCBzeW5jQ2FsbGVkID0gZmFsc2UsIHJlbmRlcmVkID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuY2FuY2VsID0gJC5ub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmFzeW5jICYmIHRoYXQudHJpZ2dlcihcImFzeW5jQ2FuY2VsZWRcIiwgcXVlcnkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2UocXVlcnksIHN5bmMsIGFzeW5jKTtcbiAgICAgICAgICAgICAgICAhc3luY0NhbGxlZCAmJiBzeW5jKFtdKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzeW5jKHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzeW5jQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3luY0NhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gKHN1Z2dlc3Rpb25zIHx8IFtdKS5zbGljZSgwLCB0aGF0LmxpbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWQgPSBzdWdnZXN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX292ZXJ3cml0ZShxdWVyeSwgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyZWQgPCB0aGF0LmxpbWl0ICYmIHRoYXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlcihcImFzeW5jUmVxdWVzdGVkXCIsIHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luYyhzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGVkICYmIHJlbmRlcmVkIDwgdGhhdC5saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5jYW5jZWwgPSAkLm5vb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCArPSBzdWdnZXN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9hcHBlbmQocXVlcnksIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIHRoYXQubGltaXQgLSByZW5kZXJlZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5hc3luYyAmJiB0aGF0LnRyaWdnZXIoXCJhc3luY1JlY2VpdmVkXCIsIHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYW5jZWw6ICQubm9vcCxcbiAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwiY2xlYXJlZFwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRlbC5pcyhcIjplbXB0eVwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsID0gJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIERhdGFzZXQ7XG4gICAgICAgIGZ1bmN0aW9uIGdldERpc3BsYXlGbihkaXNwbGF5KSB7XG4gICAgICAgICAgICBkaXNwbGF5ID0gZGlzcGxheSB8fCBfLnN0cmluZ2lmeTtcbiAgICAgICAgICAgIHJldHVybiBfLmlzRnVuY3Rpb24oZGlzcGxheSkgPyBkaXNwbGF5IDogZGlzcGxheUZuO1xuICAgICAgICAgICAgZnVuY3Rpb24gZGlzcGxheUZuKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZGlzcGxheV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVzKHRlbXBsYXRlcywgZGlzcGxheUZuKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5vdEZvdW5kOiB0ZW1wbGF0ZXMubm90Rm91bmQgJiYgXy50ZW1wbGF0aWZ5KHRlbXBsYXRlcy5ub3RGb3VuZCksXG4gICAgICAgICAgICAgICAgcGVuZGluZzogdGVtcGxhdGVzLnBlbmRpbmcgJiYgXy50ZW1wbGF0aWZ5KHRlbXBsYXRlcy5wZW5kaW5nKSxcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHRlbXBsYXRlcy5oZWFkZXIgJiYgXy50ZW1wbGF0aWZ5KHRlbXBsYXRlcy5oZWFkZXIpLFxuICAgICAgICAgICAgICAgIGZvb3RlcjogdGVtcGxhdGVzLmZvb3RlciAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLmZvb3RlciksXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbjogdGVtcGxhdGVzLnN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvblRlbXBsYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZnVuY3Rpb24gc3VnZ2VzdGlvblRlbXBsYXRlKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcIjxkaXY+XCIpLnRleHQoZGlzcGxheUZuKGNvbnRleHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1ZhbGlkTmFtZShzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiAvXltfYS16QS1aMC05LV0rJC8udGVzdChzdHIpO1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBNZW51ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBNZW51KG8sIHd3dykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICBpZiAoIW8ubm9kZSkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJub2RlIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3d3Lm1peGluKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy4kbm9kZSA9ICQoby5ub2RlKTtcbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0cyA9IF8ubWFwKG8uZGF0YXNldHMsIGluaXRpYWxpemVEYXRhc2V0KTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGluaXRpYWxpemVEYXRhc2V0KG9EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGF0LiRub2RlLmZpbmQob0RhdGFzZXQubm9kZSkuZmlyc3QoKTtcbiAgICAgICAgICAgICAgICBvRGF0YXNldC5ub2RlID0gbm9kZS5sZW5ndGggPyBub2RlIDogJChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoYXQuJG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YXNldChvRGF0YXNldCwgd3d3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfLm1peGluKE1lbnUucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIsIHtcbiAgICAgICAgICAgIF9vblNlbGVjdGFibGVDbGljazogZnVuY3Rpb24gb25TZWxlY3RhYmxlQ2xpY2soJGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJzZWxlY3RhYmxlQ2xpY2tlZFwiLCAkKCRlLmN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25SZW5kZXJlZDogZnVuY3Rpb24gb25SZW5kZXJlZCh0eXBlLCBkYXRhc2V0LCBzdWdnZXN0aW9ucywgYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLnRvZ2dsZUNsYXNzKHRoaXMuY2xhc3Nlcy5lbXB0eSwgdGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJkYXRhc2V0UmVuZGVyZWRcIiwgZGF0YXNldCwgc3VnZ2VzdGlvbnMsIGFzeW5jKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25DbGVhcmVkOiBmdW5jdGlvbiBvbkNsZWFyZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS50b2dnbGVDbGFzcyh0aGlzLmNsYXNzZXMuZW1wdHksIHRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwiZGF0YXNldENsZWFyZWRcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3Byb3BhZ2F0ZTogZnVuY3Rpb24gcHJvcGFnYXRlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9hbGxEYXRhc2V0c0VtcHR5OiBmdW5jdGlvbiBhbGxEYXRhc2V0c0VtcHR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmV2ZXJ5KHRoaXMuZGF0YXNldHMsIGlzRGF0YXNldEVtcHR5KTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0RhdGFzZXRFbXB0eShkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0LmlzRW1wdHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldFNlbGVjdGFibGVzOiBmdW5jdGlvbiBnZXRTZWxlY3RhYmxlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5maW5kKHRoaXMuc2VsZWN0b3JzLnNlbGVjdGFibGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9yZW1vdmVDdXJzb3I6IGZ1bmN0aW9uIF9yZW1vdmVDdXJzb3IoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlID0gdGhpcy5nZXRBY3RpdmVTZWxlY3RhYmxlKCk7XG4gICAgICAgICAgICAgICAgJHNlbGVjdGFibGUgJiYgJHNlbGVjdGFibGUucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmN1cnNvcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2Vuc3VyZVZpc2libGU6IGZ1bmN0aW9uIGVuc3VyZVZpc2libGUoJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsVG9wLCBlbEJvdHRvbSwgbm9kZVNjcm9sbFRvcCwgbm9kZUhlaWdodDtcbiAgICAgICAgICAgICAgICBlbFRvcCA9ICRlbC5wb3NpdGlvbigpLnRvcDtcbiAgICAgICAgICAgICAgICBlbEJvdHRvbSA9IGVsVG9wICsgJGVsLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgICAgICAgICAgIG5vZGVTY3JvbGxUb3AgPSB0aGlzLiRub2RlLnNjcm9sbFRvcCgpO1xuICAgICAgICAgICAgICAgIG5vZGVIZWlnaHQgPSB0aGlzLiRub2RlLmhlaWdodCgpICsgcGFyc2VJbnQodGhpcy4kbm9kZS5jc3MoXCJwYWRkaW5nVG9wXCIpLCAxMCkgKyBwYXJzZUludCh0aGlzLiRub2RlLmNzcyhcInBhZGRpbmdCb3R0b21cIiksIDEwKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxUb3AgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuc2Nyb2xsVG9wKG5vZGVTY3JvbGxUb3AgKyBlbFRvcCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlSGVpZ2h0IDwgZWxCb3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5zY3JvbGxUb3Aobm9kZVNjcm9sbFRvcCArIChlbEJvdHRvbSAtIG5vZGVIZWlnaHQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmluZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBvblNlbGVjdGFibGVDbGljaztcbiAgICAgICAgICAgICAgICBvblNlbGVjdGFibGVDbGljayA9IF8uYmluZCh0aGlzLl9vblNlbGVjdGFibGVDbGljaywgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5vbihcImNsaWNrLnR0XCIsIHRoaXMuc2VsZWN0b3JzLnNlbGVjdGFibGUsIG9uU2VsZWN0YWJsZUNsaWNrKTtcbiAgICAgICAgICAgICAgICBfLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0Lm9uU3luYyhcImFzeW5jUmVxdWVzdGVkXCIsIHRoYXQuX3Byb3BhZ2F0ZSwgdGhhdCkub25TeW5jKFwiYXN5bmNDYW5jZWxlZFwiLCB0aGF0Ll9wcm9wYWdhdGUsIHRoYXQpLm9uU3luYyhcImFzeW5jUmVjZWl2ZWRcIiwgdGhhdC5fcHJvcGFnYXRlLCB0aGF0KS5vblN5bmMoXCJyZW5kZXJlZFwiLCB0aGF0Ll9vblJlbmRlcmVkLCB0aGF0KS5vblN5bmMoXCJjbGVhcmVkXCIsIHRoYXQuX29uQ2xlYXJlZCwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiBmdW5jdGlvbiBpc09wZW4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG5vZGUuaGFzQ2xhc3ModGhpcy5jbGFzc2VzLm9wZW4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMub3Blbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLm9wZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUN1cnNvcigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldExhbmd1YWdlRGlyZWN0aW9uOiBmdW5jdGlvbiBzZXRMYW5ndWFnZURpcmVjdGlvbihkaXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmF0dHIoXCJkaXJcIiwgZGlyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RhYmxlUmVsYXRpdmVUb0N1cnNvcjogZnVuY3Rpb24gc2VsZWN0YWJsZVJlbGF0aXZlVG9DdXJzb3IoZGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGVzLCAkb2xkQ3Vyc29yLCBvbGRJbmRleCwgbmV3SW5kZXg7XG4gICAgICAgICAgICAgICAgJG9sZEN1cnNvciA9IHRoaXMuZ2V0QWN0aXZlU2VsZWN0YWJsZSgpO1xuICAgICAgICAgICAgICAgICRzZWxlY3RhYmxlcyA9IHRoaXMuX2dldFNlbGVjdGFibGVzKCk7XG4gICAgICAgICAgICAgICAgb2xkSW5kZXggPSAkb2xkQ3Vyc29yID8gJHNlbGVjdGFibGVzLmluZGV4KCRvbGRDdXJzb3IpIDogLTE7XG4gICAgICAgICAgICAgICAgbmV3SW5kZXggPSBvbGRJbmRleCArIGRlbHRhO1xuICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gKG5ld0luZGV4ICsgMSkgJSAoJHNlbGVjdGFibGVzLmxlbmd0aCArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBuZXdJbmRleCA9IG5ld0luZGV4IDwgLTEgPyAkc2VsZWN0YWJsZXMubGVuZ3RoIC0gMSA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJbmRleCA9PT0gLTEgPyBudWxsIDogJHNlbGVjdGFibGVzLmVxKG5ld0luZGV4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRDdXJzb3I6IGZ1bmN0aW9uIHNldEN1cnNvcigkc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUN1cnNvcigpO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9ICRzZWxlY3RhYmxlICYmICRzZWxlY3RhYmxlLmZpcnN0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGVjdGFibGUuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmN1cnNvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVZpc2libGUoJHNlbGVjdGFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRTZWxlY3RhYmxlRGF0YTogZnVuY3Rpb24gZ2V0U2VsZWN0YWJsZURhdGEoJGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICRlbCAmJiAkZWwubGVuZ3RoID8gRGF0YXNldC5leHRyYWN0RGF0YSgkZWwpIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRBY3RpdmVTZWxlY3RhYmxlOiBmdW5jdGlvbiBnZXRBY3RpdmVTZWxlY3RhYmxlKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZWN0YWJsZSA9IHRoaXMuX2dldFNlbGVjdGFibGVzKCkuZmlsdGVyKHRoaXMuc2VsZWN0b3JzLmN1cnNvcikuZmlyc3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJHNlbGVjdGFibGUubGVuZ3RoID8gJHNlbGVjdGFibGUgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFRvcFNlbGVjdGFibGU6IGZ1bmN0aW9uIGdldFRvcFNlbGVjdGFibGUoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlID0gdGhpcy5fZ2V0U2VsZWN0YWJsZXMoKS5maXJzdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2VsZWN0YWJsZS5sZW5ndGggPyAkc2VsZWN0YWJsZSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUocXVlcnkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNWYWxpZFVwZGF0ZSA9IHF1ZXJ5ICE9PSB0aGlzLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIHVwZGF0ZURhdGFzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFVwZGF0ZTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0KGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC51cGRhdGUocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24gZW1wdHkoKSB7XG4gICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIGNsZWFyRGF0YXNldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZW1wdHkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyRGF0YXNldChkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLm9mZihcIi50dFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlID0gJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgICAgIF8uZWFjaCh0aGlzLmRhdGFzZXRzLCBkZXN0cm95RGF0YXNldCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVzdHJveURhdGFzZXQoZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gTWVudTtcbiAgICB9KCk7XG4gICAgdmFyIERlZmF1bHRNZW51ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgcyA9IE1lbnUucHJvdG90eXBlO1xuICAgICAgICBmdW5jdGlvbiBEZWZhdWx0TWVudSgpIHtcbiAgICAgICAgICAgIE1lbnUuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgfVxuICAgICAgICBfLm1peGluKERlZmF1bHRNZW51LnByb3RvdHlwZSwgTWVudS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgICAgICAgICAgICAgIXRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSAmJiB0aGlzLl9zaG93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMub3Blbi5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMuY2xvc2UuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25SZW5kZXJlZDogZnVuY3Rpb24gb25SZW5kZXJlZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbigpICYmIHRoaXMuX3Nob3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMuX29uUmVuZGVyZWQuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25DbGVhcmVkOiBmdW5jdGlvbiBvbkNsZWFyZWQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FsbERhdGFzZXRzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW4oKSAmJiB0aGlzLl9zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzLl9vbkNsZWFyZWQuYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRMYW5ndWFnZURpcmVjdGlvbjogZnVuY3Rpb24gc2V0TGFuZ3VhZ2VEaXJlY3Rpb24oZGlyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5jc3MoZGlyID09PSBcImx0clwiID8gdGhpcy5jc3MubHRyIDogdGhpcy5jc3MucnRsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5zZXRMYW5ndWFnZURpcmVjdGlvbi5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9oaWRlOiBmdW5jdGlvbiBoaWRlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zaG93OiBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRNZW51O1xuICAgIH0oKTtcbiAgICB2YXIgVHlwZWFoZWFkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBUeXBlYWhlYWQobywgd3d3KSB7XG4gICAgICAgICAgICB2YXIgb25Gb2N1c2VkLCBvbkJsdXJyZWQsIG9uRW50ZXJLZXllZCwgb25UYWJLZXllZCwgb25Fc2NLZXllZCwgb25VcEtleWVkLCBvbkRvd25LZXllZCwgb25MZWZ0S2V5ZWQsIG9uUmlnaHRLZXllZCwgb25RdWVyeUNoYW5nZWQsIG9uV2hpdGVzcGFjZUNoYW5nZWQ7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghby5pbnB1dCkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJtaXNzaW5nIGlucHV0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvLm1lbnUpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwibWlzc2luZyBtZW51XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvLmV2ZW50QnVzKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcIm1pc3NpbmcgZXZlbnQgYnVzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3d3Lm1peGluKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cyA9IG8uZXZlbnRCdXM7XG4gICAgICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IF8uaXNOdW1iZXIoby5taW5MZW5ndGgpID8gby5taW5MZW5ndGggOiAxO1xuICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG8uaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLm1lbnUgPSBvLm1lbnU7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuaGFzRm9jdXMoKSAmJiB0aGlzLmFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmRpciA9IHRoaXMuaW5wdXQuZ2V0TGFuZ0RpcigpO1xuICAgICAgICAgICAgdGhpcy5faGFja3MoKTtcbiAgICAgICAgICAgIHRoaXMubWVudS5iaW5kKCkub25TeW5jKFwic2VsZWN0YWJsZUNsaWNrZWRcIiwgdGhpcy5fb25TZWxlY3RhYmxlQ2xpY2tlZCwgdGhpcykub25TeW5jKFwiYXN5bmNSZXF1ZXN0ZWRcIiwgdGhpcy5fb25Bc3luY1JlcXVlc3RlZCwgdGhpcykub25TeW5jKFwiYXN5bmNDYW5jZWxlZFwiLCB0aGlzLl9vbkFzeW5jQ2FuY2VsZWQsIHRoaXMpLm9uU3luYyhcImFzeW5jUmVjZWl2ZWRcIiwgdGhpcy5fb25Bc3luY1JlY2VpdmVkLCB0aGlzKS5vblN5bmMoXCJkYXRhc2V0UmVuZGVyZWRcIiwgdGhpcy5fb25EYXRhc2V0UmVuZGVyZWQsIHRoaXMpLm9uU3luYyhcImRhdGFzZXRDbGVhcmVkXCIsIHRoaXMuX29uRGF0YXNldENsZWFyZWQsIHRoaXMpO1xuICAgICAgICAgICAgb25Gb2N1c2VkID0gYyh0aGlzLCBcImFjdGl2YXRlXCIsIFwib3BlblwiLCBcIl9vbkZvY3VzZWRcIik7XG4gICAgICAgICAgICBvbkJsdXJyZWQgPSBjKHRoaXMsIFwiZGVhY3RpdmF0ZVwiLCBcIl9vbkJsdXJyZWRcIik7XG4gICAgICAgICAgICBvbkVudGVyS2V5ZWQgPSBjKHRoaXMsIFwiaXNBY3RpdmVcIiwgXCJpc09wZW5cIiwgXCJfb25FbnRlcktleWVkXCIpO1xuICAgICAgICAgICAgb25UYWJLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcImlzT3BlblwiLCBcIl9vblRhYktleWVkXCIpO1xuICAgICAgICAgICAgb25Fc2NLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcIl9vbkVzY0tleWVkXCIpO1xuICAgICAgICAgICAgb25VcEtleWVkID0gYyh0aGlzLCBcImlzQWN0aXZlXCIsIFwib3BlblwiLCBcIl9vblVwS2V5ZWRcIik7XG4gICAgICAgICAgICBvbkRvd25LZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcIm9wZW5cIiwgXCJfb25Eb3duS2V5ZWRcIik7XG4gICAgICAgICAgICBvbkxlZnRLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcImlzT3BlblwiLCBcIl9vbkxlZnRLZXllZFwiKTtcbiAgICAgICAgICAgIG9uUmlnaHRLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcImlzT3BlblwiLCBcIl9vblJpZ2h0S2V5ZWRcIik7XG4gICAgICAgICAgICBvblF1ZXJ5Q2hhbmdlZCA9IGModGhpcywgXCJfb3BlbklmQWN0aXZlXCIsIFwiX29uUXVlcnlDaGFuZ2VkXCIpO1xuICAgICAgICAgICAgb25XaGl0ZXNwYWNlQ2hhbmdlZCA9IGModGhpcywgXCJfb3BlbklmQWN0aXZlXCIsIFwiX29uV2hpdGVzcGFjZUNoYW5nZWRcIik7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJpbmQoKS5vblN5bmMoXCJmb2N1c2VkXCIsIG9uRm9jdXNlZCwgdGhpcykub25TeW5jKFwiYmx1cnJlZFwiLCBvbkJsdXJyZWQsIHRoaXMpLm9uU3luYyhcImVudGVyS2V5ZWRcIiwgb25FbnRlcktleWVkLCB0aGlzKS5vblN5bmMoXCJ0YWJLZXllZFwiLCBvblRhYktleWVkLCB0aGlzKS5vblN5bmMoXCJlc2NLZXllZFwiLCBvbkVzY0tleWVkLCB0aGlzKS5vblN5bmMoXCJ1cEtleWVkXCIsIG9uVXBLZXllZCwgdGhpcykub25TeW5jKFwiZG93bktleWVkXCIsIG9uRG93bktleWVkLCB0aGlzKS5vblN5bmMoXCJsZWZ0S2V5ZWRcIiwgb25MZWZ0S2V5ZWQsIHRoaXMpLm9uU3luYyhcInJpZ2h0S2V5ZWRcIiwgb25SaWdodEtleWVkLCB0aGlzKS5vblN5bmMoXCJxdWVyeUNoYW5nZWRcIiwgb25RdWVyeUNoYW5nZWQsIHRoaXMpLm9uU3luYyhcIndoaXRlc3BhY2VDaGFuZ2VkXCIsIG9uV2hpdGVzcGFjZUNoYW5nZWQsIHRoaXMpLm9uU3luYyhcImxhbmdEaXJDaGFuZ2VkXCIsIHRoaXMuX29uTGFuZ0RpckNoYW5nZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oVHlwZWFoZWFkLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgX2hhY2tzOiBmdW5jdGlvbiBoYWNrcygpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGlucHV0LCAkbWVudTtcbiAgICAgICAgICAgICAgICAkaW5wdXQgPSB0aGlzLmlucHV0LiRpbnB1dCB8fCAkKFwiPGRpdj5cIik7XG4gICAgICAgICAgICAgICAgJG1lbnUgPSB0aGlzLm1lbnUuJG5vZGUgfHwgJChcIjxkaXY+XCIpO1xuICAgICAgICAgICAgICAgICRpbnB1dC5vbihcImJsdXIudHRcIiwgZnVuY3Rpb24oJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSwgaXNBY3RpdmUsIGhhc0FjdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSAkbWVudS5pcyhhY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICBoYXNBY3RpdmUgPSAkbWVudS5oYXMoYWN0aXZlKS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc01zaWUoKSAmJiAoaXNBY3RpdmUgfHwgaGFzQWN0aXZlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5kZWZlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJG1lbnUub24oXCJtb3VzZWRvd24udHRcIiwgZnVuY3Rpb24oJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25TZWxlY3RhYmxlQ2xpY2tlZDogZnVuY3Rpb24gb25TZWxlY3RhYmxlQ2xpY2tlZCh0eXBlLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgkZWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkRhdGFzZXRDbGVhcmVkOiBmdW5jdGlvbiBvbkRhdGFzZXRDbGVhcmVkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25EYXRhc2V0UmVuZGVyZWQ6IGZ1bmN0aW9uIG9uRGF0YXNldFJlbmRlcmVkKHR5cGUsIGRhdGFzZXQsIHN1Z2dlc3Rpb25zLCBhc3luYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJyZW5kZXJcIiwgc3VnZ2VzdGlvbnMsIGFzeW5jLCBkYXRhc2V0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25Bc3luY1JlcXVlc3RlZDogZnVuY3Rpb24gb25Bc3luY1JlcXVlc3RlZCh0eXBlLCBkYXRhc2V0LCBxdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImFzeW5jcmVxdWVzdFwiLCBxdWVyeSwgZGF0YXNldCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uQXN5bmNDYW5jZWxlZDogZnVuY3Rpb24gb25Bc3luY0NhbmNlbGVkKHR5cGUsIGRhdGFzZXQsIHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiYXN5bmNjYW5jZWxcIiwgcXVlcnksIGRhdGFzZXQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkFzeW5jUmVjZWl2ZWQ6IGZ1bmN0aW9uIG9uQXN5bmNSZWNlaXZlZCh0eXBlLCBkYXRhc2V0LCBxdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImFzeW5jcmVjZWl2ZVwiLCBxdWVyeSwgZGF0YXNldCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRm9jdXNlZDogZnVuY3Rpb24gb25Gb2N1c2VkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbkxlbmd0aE1ldCgpICYmIHRoaXMubWVudS51cGRhdGUodGhpcy5pbnB1dC5nZXRRdWVyeSgpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25CbHVycmVkOiBmdW5jdGlvbiBvbkJsdXJyZWQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQuaGFzUXVlcnlDaGFuZ2VkU2luY2VMYXN0Rm9jdXMoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJjaGFuZ2VcIiwgdGhpcy5pbnB1dC5nZXRRdWVyeSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRW50ZXJLZXllZDogZnVuY3Rpb24gb25FbnRlcktleWVkKHR5cGUsICRlKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRBY3RpdmVTZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblRhYktleWVkOiBmdW5jdGlvbiBvblRhYktleWVkKHR5cGUsICRlKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRBY3RpdmVTZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRUb3BTZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGUoJHNlbGVjdGFibGUpICYmICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkVzY0tleWVkOiBmdW5jdGlvbiBvbkVzY0tleWVkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25VcEtleWVkOiBmdW5jdGlvbiBvblVwS2V5ZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yKC0xKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25Eb3duS2V5ZWQ6IGZ1bmN0aW9uIG9uRG93bktleWVkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvcigrMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uTGVmdEtleWVkOiBmdW5jdGlvbiBvbkxlZnRLZXllZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgPT09IFwicnRsXCIgJiYgdGhpcy5pbnB1dC5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGUodGhpcy5tZW51LmdldFRvcFNlbGVjdGFibGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblJpZ2h0S2V5ZWQ6IGZ1bmN0aW9uIG9uUmlnaHRLZXllZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgPT09IFwibHRyXCIgJiYgdGhpcy5pbnB1dC5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGUodGhpcy5tZW51LmdldFRvcFNlbGVjdGFibGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblF1ZXJ5Q2hhbmdlZDogZnVuY3Rpb24gb25RdWVyeUNoYW5nZWQoZSwgcXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5MZW5ndGhNZXQocXVlcnkpID8gdGhpcy5tZW51LnVwZGF0ZShxdWVyeSkgOiB0aGlzLm1lbnUuZW1wdHkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25XaGl0ZXNwYWNlQ2hhbmdlZDogZnVuY3Rpb24gb25XaGl0ZXNwYWNlQ2hhbmdlZCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uTGFuZ0RpckNoYW5nZWQ6IGZ1bmN0aW9uIG9uTGFuZ0RpckNoYW5nZWQoZSwgZGlyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlyICE9PSBkaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXIgPSBkaXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudS5zZXRMYW5ndWFnZURpcmVjdGlvbihkaXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb3BlbklmQWN0aXZlOiBmdW5jdGlvbiBvcGVuSWZBY3RpdmUoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSgpICYmIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9taW5MZW5ndGhNZXQ6IGZ1bmN0aW9uIG1pbkxlbmd0aE1ldChxdWVyeSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXy5pc1N0cmluZyhxdWVyeSkgPyBxdWVyeSA6IHRoaXMuaW5wdXQuZ2V0UXVlcnkoKSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeS5sZW5ndGggPj0gdGhpcy5taW5MZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3VwZGF0ZUhpbnQ6IGZ1bmN0aW9uIHVwZGF0ZUhpbnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlLCBkYXRhLCB2YWwsIHF1ZXJ5LCBlc2NhcGVkUXVlcnksIGZyb250TWF0Y2hSZWdFeCwgbWF0Y2g7XG4gICAgICAgICAgICAgICAgJHNlbGVjdGFibGUgPSB0aGlzLm1lbnUuZ2V0VG9wU2VsZWN0YWJsZSgpO1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLm1lbnUuZ2V0U2VsZWN0YWJsZURhdGEoJHNlbGVjdGFibGUpO1xuICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuaW5wdXQuZ2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmICFfLmlzQmxhbmtTdHJpbmcodmFsKSAmJiAhdGhpcy5pbnB1dC5oYXNPdmVyZmxvdygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gSW5wdXQubm9ybWFsaXplUXVlcnkodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlZFF1ZXJ5ID0gXy5lc2NhcGVSZWdFeENoYXJzKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgZnJvbnRNYXRjaFJlZ0V4ID0gbmV3IFJlZ0V4cChcIl4oPzpcIiArIGVzY2FwZWRRdWVyeSArIFwiKSguKyQpXCIsIFwiaVwiKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmcm9udE1hdGNoUmVnRXguZXhlYyhkYXRhLnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoICYmIHRoaXMuaW5wdXQuc2V0SGludCh2YWwgKyBtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5jbGVhckhpbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFbmFibGVkOiBmdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24gYWN0aXZhdGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRW5hYmxlZCgpIHx8IHRoaXMuZXZlbnRCdXMuYmVmb3JlKFwiYWN0aXZlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYWN0aXZhdGU6IGZ1bmN0aW9uIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50QnVzLmJlZm9yZShcImlkbGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiaWRsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogZnVuY3Rpb24gaXNPcGVuKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbnUuaXNPcGVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkgJiYgIXRoaXMuZXZlbnRCdXMuYmVmb3JlKFwib3BlblwiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnUub3BlbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVIaW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcIm9wZW5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3BlbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4oKSAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoXCJjbG9zZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnUuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5jbGVhckhpbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5yZXNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiY2xvc2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc09wZW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWw6IGZ1bmN0aW9uIHNldFZhbCh2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFF1ZXJ5KF8udG9TdHIodmFsKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VmFsOiBmdW5jdGlvbiBnZXRWYWwoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZ2V0UXVlcnkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdCgkc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5tZW51LmdldFNlbGVjdGFibGVEYXRhKCRzZWxlY3RhYmxlKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoXCJzZWxlY3RcIiwgZGF0YS5vYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0UXVlcnkoZGF0YS52YWwsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJzZWxlY3RcIiwgZGF0YS5vYmopO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBmdW5jdGlvbiBhdXRvY29tcGxldGUoJHNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnksIGRhdGEsIGlzVmFsaWQ7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmlucHV0LmdldFF1ZXJ5KCk7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMubWVudS5nZXRTZWxlY3RhYmxlRGF0YSgkc2VsZWN0YWJsZSk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGRhdGEgJiYgcXVlcnkgIT09IGRhdGEudmFsO1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmICF0aGlzLmV2ZW50QnVzLmJlZm9yZShcImF1dG9jb21wbGV0ZVwiLCBkYXRhLm9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5zZXRRdWVyeShkYXRhLnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImF1dG9jb21wbGV0ZVwiLCBkYXRhLm9iaik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW92ZUN1cnNvcjogZnVuY3Rpb24gbW92ZUN1cnNvcihkZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeSwgJGNhbmRpZGF0ZSwgZGF0YSwgcGF5bG9hZCwgY2FuY2VsTW92ZTtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHRoaXMuaW5wdXQuZ2V0UXVlcnkoKTtcbiAgICAgICAgICAgICAgICAkY2FuZGlkYXRlID0gdGhpcy5tZW51LnNlbGVjdGFibGVSZWxhdGl2ZVRvQ3Vyc29yKGRlbHRhKTtcbiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5tZW51LmdldFNlbGVjdGFibGVEYXRhKCRjYW5kaWRhdGUpO1xuICAgICAgICAgICAgICAgIHBheWxvYWQgPSBkYXRhID8gZGF0YS5vYmogOiBudWxsO1xuICAgICAgICAgICAgICAgIGNhbmNlbE1vdmUgPSB0aGlzLl9taW5MZW5ndGhNZXQoKSAmJiB0aGlzLm1lbnUudXBkYXRlKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbE1vdmUgJiYgIXRoaXMuZXZlbnRCdXMuYmVmb3JlKFwiY3Vyc29yY2hhbmdlXCIsIHBheWxvYWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudS5zZXRDdXJzb3IoJGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldElucHV0VmFsdWUoZGF0YS52YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5yZXNldElucHV0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJjdXJzb3JjaGFuZ2VcIiwgcGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnUuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFR5cGVhaGVhZDtcbiAgICAgICAgZnVuY3Rpb24gYyhjdHgpIHtcbiAgICAgICAgICAgIHZhciBtZXRob2RzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIF8uZWFjaChtZXRob2RzLCBmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eFttZXRob2RdLmFwcGx5KGN0eCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBvbGQsIGtleXMsIG1ldGhvZHM7XG4gICAgICAgIG9sZCA9ICQuZm4udHlwZWFoZWFkO1xuICAgICAgICBrZXlzID0ge1xuICAgICAgICAgICAgd3d3OiBcInR0LXd3d1wiLFxuICAgICAgICAgICAgYXR0cnM6IFwidHQtYXR0cnNcIixcbiAgICAgICAgICAgIHR5cGVhaGVhZDogXCJ0dC10eXBlYWhlYWRcIlxuICAgICAgICB9O1xuICAgICAgICBtZXRob2RzID0ge1xuICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShvLCBkYXRhc2V0cykge1xuICAgICAgICAgICAgICAgIHZhciB3d3c7XG4gICAgICAgICAgICAgICAgZGF0YXNldHMgPSBfLmlzQXJyYXkoZGF0YXNldHMpID8gZGF0YXNldHMgOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgbyA9IG8gfHwge307XG4gICAgICAgICAgICAgICAgd3d3ID0gV1dXKG8uY2xhc3NOYW1lcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChhdHRhY2gpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCwgJHdyYXBwZXIsICRoaW50LCAkbWVudSwgZGVmYXVsdEhpbnQsIGRlZmF1bHRNZW51LCBldmVudEJ1cywgaW5wdXQsIG1lbnUsIHR5cGVhaGVhZCwgTWVudUNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2goZGF0YXNldHMsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQuaGlnaGxpZ2h0ID0gISFvLmhpZ2hsaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICR3cmFwcGVyID0gJCh3d3cuaHRtbC53cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgJGhpbnQgPSAkZWxPck51bGwoby5oaW50KTtcbiAgICAgICAgICAgICAgICAgICAgJG1lbnUgPSAkZWxPck51bGwoby5tZW51KTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEhpbnQgPSBvLmhpbnQgIT09IGZhbHNlICYmICEkaGludDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lbnUgPSBvLm1lbnUgIT09IGZhbHNlICYmICEkbWVudTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEhpbnQgJiYgKCRoaW50ID0gYnVpbGRIaW50RnJvbUlucHV0KCRpbnB1dCwgd3d3KSk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZW51ICYmICgkbWVudSA9ICQod3d3Lmh0bWwubWVudSkuY3NzKHd3dy5jc3MubWVudSkpO1xuICAgICAgICAgICAgICAgICAgICAkaGludCAmJiAkaGludC52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dCA9IHByZXBJbnB1dCgkaW5wdXQsIHd3dyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0SGludCB8fCBkZWZhdWx0TWVudSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHdyYXBwZXIuY3NzKHd3dy5jc3Mud3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuY3NzKGRlZmF1bHRIaW50ID8gd3d3LmNzcy5pbnB1dCA6IHd3dy5jc3MuaW5wdXRXaXRoTm9IaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC53cmFwKCR3cmFwcGVyKS5wYXJlbnQoKS5wcmVwZW5kKGRlZmF1bHRIaW50ID8gJGhpbnQgOiBudWxsKS5hcHBlbmQoZGVmYXVsdE1lbnUgPyAkbWVudSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIE1lbnVDb25zdHJ1Y3RvciA9IGRlZmF1bHRNZW51ID8gRGVmYXVsdE1lbnUgOiBNZW51O1xuICAgICAgICAgICAgICAgICAgICBldmVudEJ1cyA9IG5ldyBFdmVudEJ1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbDogJGlucHV0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IG5ldyBJbnB1dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50OiAkaGludCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiAkaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgfSwgd3d3KTtcbiAgICAgICAgICAgICAgICAgICAgbWVudSA9IG5ldyBNZW51Q29uc3RydWN0b3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogJG1lbnUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0czogZGF0YXNldHNcbiAgICAgICAgICAgICAgICAgICAgfSwgd3d3KTtcbiAgICAgICAgICAgICAgICAgICAgdHlwZWFoZWFkID0gbmV3IFR5cGVhaGVhZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZW51OiBtZW51LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXM6IGV2ZW50QnVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluTGVuZ3RoOiBvLm1pbkxlbmd0aFxuICAgICAgICAgICAgICAgICAgICB9LCB3d3cpO1xuICAgICAgICAgICAgICAgICAgICAkaW5wdXQuZGF0YShrZXlzLnd3dywgd3d3KTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0LmRhdGEoa2V5cy50eXBlYWhlYWQsIHR5cGVhaGVhZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzRW5hYmxlZDogZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICAgICAgICAgICAgICAgIHZhciBlbmFibGVkO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IHQuaXNFbmFibGVkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gdC5pc0FjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3RpdmU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0aXZhdGU6IGZ1bmN0aW9uIGFjdGl2YXRlKCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWFjdGl2YXRlOiBmdW5jdGlvbiBkZWFjdGl2YXRlKCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogZnVuY3Rpb24gaXNPcGVuKCkge1xuICAgICAgICAgICAgICAgIHZhciBvcGVuO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbiA9IHQuaXNPcGVuKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wZW47XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICB0Lm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZSwgJGVsID0gJChlbCk7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdC5zZWxlY3QoJGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdXRvY29tcGxldGU6IGZ1bmN0aW9uIGF1dG9jb21wbGV0ZShlbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2UsICRlbCA9ICQoZWwpO1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHQuYXV0b2NvbXBsZXRlKCRlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW92ZUN1cnNvcjogZnVuY3Rpb24gbW92ZUN1cnNvZShkZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdC5tb3ZlQ3Vyc29yKGRlbHRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWw6IGZ1bmN0aW9uIHZhbChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLmZpcnN0KCksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gdC5nZXRWYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWwobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0eXBlYWhlYWQsICRpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICByZXZlcnQoJGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgdHlwZWFoZWFkLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgJC5mbi50eXBlYWhlYWQgPSBmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgICAgICAgIGlmIChtZXRob2RzW21ldGhvZF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kc1ttZXRob2RdLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgJC5mbi50eXBlYWhlYWQubm9Db25mbGljdCA9IGZ1bmN0aW9uIG5vQ29uZmxpY3QoKSB7XG4gICAgICAgICAgICAkLmZuLnR5cGVhaGVhZCA9IG9sZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiB0dEVhY2goJGVscywgZm4pIHtcbiAgICAgICAgICAgICRlbHMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJCh0aGlzKSwgdHlwZWFoZWFkO1xuICAgICAgICAgICAgICAgICh0eXBlYWhlYWQgPSAkaW5wdXQuZGF0YShrZXlzLnR5cGVhaGVhZCkpICYmIGZuKHR5cGVhaGVhZCwgJGlucHV0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkSGludEZyb21JbnB1dCgkaW5wdXQsIHd3dykge1xuICAgICAgICAgICAgcmV0dXJuICRpbnB1dC5jbG9uZSgpLmFkZENsYXNzKHd3dy5jbGFzc2VzLmhpbnQpLnJlbW92ZURhdGEoKS5jc3Mod3d3LmNzcy5oaW50KS5jc3MoZ2V0QmFja2dyb3VuZFN0eWxlcygkaW5wdXQpKS5wcm9wKFwicmVhZG9ubHlcIiwgdHJ1ZSkucmVtb3ZlQXR0cihcImlkIG5hbWUgcGxhY2Vob2xkZXIgcmVxdWlyZWRcIikuYXR0cih7XG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICB0YWJpbmRleDogLTFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHByZXBJbnB1dCgkaW5wdXQsIHd3dykge1xuICAgICAgICAgICAgJGlucHV0LmRhdGEoa2V5cy5hdHRycywge1xuICAgICAgICAgICAgICAgIGRpcjogJGlucHV0LmF0dHIoXCJkaXJcIiksXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiAkaW5wdXQuYXR0cihcImF1dG9jb21wbGV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrOiAkaW5wdXQuYXR0cihcInNwZWxsY2hlY2tcIiksXG4gICAgICAgICAgICAgICAgc3R5bGU6ICRpbnB1dC5hdHRyKFwic3R5bGVcIilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJGlucHV0LmFkZENsYXNzKHd3dy5jbGFzc2VzLmlucHV0KS5hdHRyKHtcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgICAgICAgICAgc3BlbGxjaGVjazogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAhJGlucHV0LmF0dHIoXCJkaXJcIikgJiYgJGlucHV0LmF0dHIoXCJkaXJcIiwgXCJhdXRvXCIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIHJldHVybiAkaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0QmFja2dyb3VuZFN0eWxlcygkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZEF0dGFjaG1lbnQ6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnRcIiksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENsaXA6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLWNsaXBcIiksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAkZWwuY3NzKFwiYmFja2dyb3VuZC1jb2xvclwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLWltYWdlXCIpLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRPcmlnaW46ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLW9yaWdpblwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLXBvc2l0aW9uXCIpLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLXJlcGVhdFwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJGVsLmNzcyhcImJhY2tncm91bmQtc2l6ZVwiKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZXZlcnQoJGlucHV0KSB7XG4gICAgICAgICAgICB2YXIgd3d3LCAkd3JhcHBlcjtcbiAgICAgICAgICAgIHd3dyA9ICRpbnB1dC5kYXRhKGtleXMud3d3KTtcbiAgICAgICAgICAgICR3cmFwcGVyID0gJGlucHV0LnBhcmVudCgpLmZpbHRlcih3d3cuc2VsZWN0b3JzLndyYXBwZXIpO1xuICAgICAgICAgICAgXy5lYWNoKCRpbnB1dC5kYXRhKGtleXMuYXR0cnMpLCBmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgICAgICAgICAgIF8uaXNVbmRlZmluZWQodmFsKSA/ICRpbnB1dC5yZW1vdmVBdHRyKGtleSkgOiAkaW5wdXQuYXR0cihrZXksIHZhbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICRpbnB1dC5yZW1vdmVEYXRhKGtleXMudHlwZWFoZWFkKS5yZW1vdmVEYXRhKGtleXMud3d3KS5yZW1vdmVEYXRhKGtleXMuYXR0cikucmVtb3ZlQ2xhc3Mod3d3LmNsYXNzZXMuaW5wdXQpO1xuICAgICAgICAgICAgaWYgKCR3cmFwcGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICRpbnB1dC5kZXRhY2goKS5pbnNlcnRBZnRlcigkd3JhcHBlcik7XG4gICAgICAgICAgICAgICAgJHdyYXBwZXIucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gJGVsT3JOdWxsKG9iaikge1xuICAgICAgICAgICAgdmFyIGlzVmFsaWQsICRlbDtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBfLmlzSlF1ZXJ5KG9iaikgfHwgXy5pc0VsZW1lbnQob2JqKTtcbiAgICAgICAgICAgICRlbCA9IGlzVmFsaWQgPyAkKG9iaikuZmlyc3QoKSA6IFtdO1xuICAgICAgICAgICAgcmV0dXJuICRlbC5sZW5ndGggPyAkZWwgOiBudWxsO1xuICAgICAgICB9XG4gICAgfSkoKTtcbn0pOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wialF1ZXJ5XCJdOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgQmxvb2Rob3VuZCBmcm9tICd0eXBlYWhlYWQuanMnO1xuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuaW1wb3J0IEF1dG9Db21wbGV0ZVNlYXJjaCBmcm9tICdAY29tcG9uZW50cy9hdXRvLWNvbXBsZXRlLXNlYXJjaCc7XG5pbXBvcnQgUGVyZmVjdFNjcm9sbGJhciBmcm9tICdwZXJmZWN0LXNjcm9sbGJhcic7XG5pbXBvcnQgQ29tcG9uZW50c01hcCBmcm9tICdAY29tcG9uZW50cy9jb21wb25lbnRzLW1hcCc7XG5pbXBvcnQgJ3BlcmZlY3Qtc2Nyb2xsYmFyL2Nzcy9wZXJmZWN0LXNjcm9sbGJhci5jc3MnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmNvbnN0IGluaXRNdWx0aXN0b3JlSGVhZGVyID0gKCkgPT4ge1xuICBjb25zdCBNdWx0aXN0b3JlSGVhZGVyTWFwID0gQ29tcG9uZW50c01hcC5tdWx0aXN0b3JlSGVhZGVyO1xuICBjb25zdCBoZWFkZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKE11bHRpc3RvcmVIZWFkZXJNYXAuaGVhZGVyQnV0dG9uKTtcbiAgY29uc3QgbW9kYWxNdWx0aXNob3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKE11bHRpc3RvcmVIZWFkZXJNYXAubW9kYWwpO1xuICBjb25zdCAkc2VhcmNoSW5wdXQgPSAkKE11bHRpc3RvcmVIZWFkZXJNYXAuc2VhcmNoSW5wdXQpO1xuICBjb25zdCByb3V0ZXIgPSBuZXcgUm91dGVyKCk7XG4gIGNvbnN0IHJvdXRlID0gcm91dGVyLmdlbmVyYXRlKCdhZG1pbl9zaG9wc19zZWFyY2gnLCB7XG4gICAgc2VhcmNoVGVybTogJ19fUVVFUllfXycsXG4gIH0pO1xuXG4gIG5ldyBQZXJmZWN0U2Nyb2xsYmFyKE11bHRpc3RvcmVIZWFkZXJNYXAuanNTY3JvbGxiYXIpO1xuXG4gIGNvbnN0IHNvdXJjZSA9IG5ldyBCbG9vZGhvdW5kKHtcbiAgICBkYXR1bVRva2VuaXplcjogQmxvb2Rob3VuZC50b2tlbml6ZXJzLm9iai53aGl0ZXNwYWNlLFxuICAgIHF1ZXJ5VG9rZW5pemVyOiBCbG9vZGhvdW5kLnRva2VuaXplcnMud2hpdGVzcGFjZSxcbiAgICByZW1vdGU6IHtcbiAgICAgIHVybDogcm91dGUsXG4gICAgICB3aWxkY2FyZDogJ19fUVVFUllfXycsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgZGF0YVNldENvbmZpZyA9IHtcbiAgICBzb3VyY2UsXG4gICAgb25TZWxlY3Qoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICBjb25zdCBjb250ZXh0VXJsTGV0dGVyID0gdHlwZW9mIHNlbGVjdGVkSXRlbS5ncm91cE5hbWUgIT09ICd1bmRlZmluZWQnID8gJ3MnIDogJ2cnO1xuICAgICAgY29uc3Qgc2V0Q29udGV4dFVybCA9IE11bHRpc3RvcmVIZWFkZXJNYXAuc2V0Q29udGV4dFVybCh3aW5kb3cubG9jYXRpb24uaHJlZiwgY29udGV4dFVybExldHRlciwgc2VsZWN0ZWRJdGVtLmlkKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gc2V0Q29udGV4dFVybDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfTtcblxuICBuZXcgQXV0b0NvbXBsZXRlU2VhcmNoKCRzZWFyY2hJbnB1dCwgZGF0YVNldENvbmZpZyk7XG5cbiAgaGVhZGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgIG1vZGFsTXVsdGlzaG9wLmNsYXNzTGlzdC50b2dnbGUoJ211bHRpc2hvcC1tb2RhbC1oaWRkZW4nKTtcbiAgICBoZWFkZXJCdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG4gIH0pO1xufTtcblxuJCgoKSA9PiB7XG4gIGluaXRNdWx0aXN0b3JlSGVhZGVyKCk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=